본문 바로가기
Programming/python

Telegrambot 만들기

by 유주원 2017. 5. 24.

seq2seq 모델을 이용해서 챗봇 모델을 학습했는데, 이를 테스트해 볼 환경이 필요했다. (shell에서 입력을 받게 할 수도 있지만.. 뽀대가 안나는 관계로..)

가장 쉬운 방법으로 메신저 서비스의 챗봇 API를 이용해 보기로 했다.

카카오톡도 bot api가 있는데 엘로아이디를 발급받고 하는 절차가 너무 귀찮아서 telegrambot api를 이용하기로 했다. (telegram은 그냥 botfather만 찾으면 됨)


우선 텔레그램에 들어가서 bot의 아버지. BotFather를 찾자!! 텔레그램 검색창에서 @BotFather라고 치면 된다.

BotFather를 찾았다면 이제 말을 걸어서 access_token을 발급 받자. /start 명령어를 통해 시작을 알리고,

/newbot으로 새로운 봇을 등록한다. 그러면 BotFather가 이름을 물어볼텐데 이 이름은 telegram 대화창에 나타나는 이름을 말한다. (여기서는 주팩토리라고 이름 지음). 이름을 입력하고 나면 username for bot을 물어보는데 이 이름은 봇을 검색할때 필요한 이름이며 마지막에 항상 _bot 형태로 끝나야 한다. 여기서는 ju_factory_bot이라고 명시했다.

이렇게 이름을 붙여주고 나면 BotFather가 access token을 알려주며 이 access token을 가지고 우리는 봇을 customizing 해 볼 것이다.

봇 등록이 끝나면 이제 python을 이용해서 bot server를 만들어 보자. 아래의 package를 설치한다. 


$> pip3 install telepot


설치가 끝났으면 keyfile 파일을 만들어서 BotFather에게 받은 access token을 저장하자. (token을 좀 더 쉽게 받기 위한 용도)

이제 jufactory_serve.py 를 만들고 아래의 코드를 입력하자.

코드는 상당히 간단하다. keyfile을 읽어서 access token을 읽고 읽은 access token을 telegram server에 보내 준다. 

그 후에 이벤트 핸들러들을 등록하는데 위와 같이 CommandHandler로 등록된 keyword들은 실제 텔레그램 메시지에서 /와 함께 쓰여서 동작이 된다. (ex. /start, /help ...)

MessageHandler도 등록하자. 실제 메시지가 들어오면 동작하는 이벤트 핸들러이다.

errorHandler도 등록하고, 모든 Handler 등록이 완료되었으면 bot에게 polling을 시키고 대기한다.

실제 telegram 메신저에서 입력이 들어오면 Telegram server에서 내가 만든 python server에게 이벤트를 알려주고, idle 상태에 있던 bot은 해당 Handler를 처리하고 다시 idle 상태로 동작한다.

위의 코드는 그냥 메시지를 던져주면 해당 메시지를 응답하는 echo server이며, response 함수 부분을 customizing 함으로써 내가 원하는 형태의 봇을 만들 수가 있다.