영혼 없이 Telegram Bot 만들기

텔레그램에서는 봇을 만들 수 있는 API를 공식적으로 지원합니다. 게다가 무료이므로 개발자라면 누구나 쉽게 봇을 만들어 볼 수 있습니다.

BotFather

우선 봇을 만들려면 봇 전용 텔레그램 계정이 필요합니다. 전화번호나 이메일 없이 봇 전용 계정을 만들기 위해서는 BotFather의 도움이 필요합니다.
텔레그램 앱에서 “botfather”를 검색합니다. 그리고 아래와 같은 프로필 사진을 가진 BotFather를 선택하고 “시작” 버튼을 클릭합니다.

그러면 사용할 수 있는 커맨드에 대한 설명이 나옵니다. 새로운 봇을 생성하기 위해 “/newbot”을 입력합니다. 그리고 name과 username을 차례로 입력합니다. name은 다른 사용자에게 보이는 프로필 이름이고 username은 고유하게 식별되는 계정 아이디입니다. 따라서 username은 다른 사용자와 중복될 수 없으며 항상 bot으로 끝나야 합니다.

입력한 username이 문제가 없으면 API 토큰을 알려줍니다. 대충 이런 형태로 생겼습니다.
123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11

Bot API

Bot API는 HTTP 기반으로, 아래와 같이 토큰과 메소드명을 포함한 URL을 통해 API를 사용할 수 있습니다.

https://api.telegram.org/bot<토큰>/<메소드명>

2개의 API만 알면 기본적인 메시지를 받고 보낼 수 있기 때문에 저는 영혼 없이 2개만 사용해 보았습니다. 다양한 API에 대한 구체적인 설명은 공식 문서를 확인하시기 바랍니다.

받은 메시지 조회 – getUpdates

getUpdates API를 통해 봇이 받은 메시지를 조회할 수 있습니다. API를 테스트하기 위해 텔레그램 앱을 열고 아까 만든 봇을 대화 상대로 추가합니다. 그리고 “hello”라는 메시지를 보냅니다.

getUpdates API를 호출하면 아래와 같이 JSON 형태의 결과를 받을 수 있습니다. 참고로, 아래 스크린샷에는 대화를 시작하면서 자동으로 보내진 “/start”만 보이지만 실제로는 “hello”도 포함되어 있습니다.

메시지 전송 – sendMessage

sendMessage API를 통해 대화 상대에게 메시지를 전송할 수 있습니다. 메시지를 보내기 위해서는 “받는 사람”과 “메시지 내용”이 반드시 있어야 합니다. getUpdates API를 통해 확인한 chat_id가 받는 사람입니다.

sendMessage API는 HTTP 요청에 본문을 포함하고 있으므로 getUpdates API와 달리 POST로 전송하여야 합니다. 본문에는 JSON 형태로 chat_id와 text를 입력합니다. text는 “hello, world!”라는 다소 식상한 메시지를 써보았습니다.
참고로, JSON 말고 다른 방식도 지원하지만 귀찮으니까 신경쓰지 않고 JSON으로 보냅니다.

텔레그램 앱으로 전송된 봇의 “hello, world!” 메시지를 확인할 수 있습니다.

샘플 코드 구현

위에서 소개한 2개의 API만으로 자바 샘플 코드를 구현해 보았습니다. 대화 상대방이 보낸 메시지를 단순히 뒤집어서 답변하는 기능을 Apache HttpComponents 라이브러리를 활용하여 구현하였습니다. 자바로 구현하다보니 역시 REST API 호출과 JSON 처리는 자바보다 Node.js가 훨씬 속 편하다는 생각이 들었습니다.

별로 가치는 없겠지만 삽질한 코드를 Github에 올려두었습니다. 몇 년 뒤에 다시 보면 어떤 기분이 들지 궁금하네요.

https://github.com/bigbossdev/telegram-bot-example

마무리

텔레그램 봇 API를 사용해보니 생각했던 것보다 훨씬 쉽게 잘 만들어져 있었습니다. 물론, 봇이 봇처럼 동작하도록 서비스를 만드는 것이 진짜 큰 일이겠지만 텔레그램 봇 API는 그 진입 장벽을 상당히 낮춰 주고 있다고 생각됩니다.

Leave a Reply

Your email address will not be published. Required fields are marked *