[라즈베리파이] 텔레그램 봇과 연동하기
텔레그램 봇을 이용하기 위해서는 봇을 생성하고 Bot API 를 사용하기 위한 키를 제공 받아야 합니다.
텔레그램에서는 이러한 설정을 편하게 하기 위한 BotFather 채널을 운영하고 있습니다.
1. BotFather 채널 추가하기
안드로이드 폰의 경우 우측 상단에 있는 돋보기 아이콘을 클릭하고 아이폰의 경우 Chat 탭에서 리스트를 아래로 스크롤 해 검색창을 열어 @BotFather를 검색해서 추가합니다.
2. BotFather 채팅창에서 ‘시작’버튼을 누른 후, 새로운 봇을 생성하기 위해 채팅창에 ‘/newbot’이라고 타이핑 하거나 채팅창의 ‘/’ 아이콘을 클릭해 ‘/newbot’을 선택합니다.
3. 봇의 이름과 봇의 ID를 생성합니다. 봇의 이름은 이후 봇 사용시 상단에 보이는 이름이며 봇 ID는 BotFather 검색해서 연결할 때와 마찬가지로 봇에 접속하기 위해 사용되는 유일한 값입니다.
4.봇 ID 까지 생성 완료하면 다음과 같이 API 토큰값이 전달됩니다. 이 키값은 라즈베리파이에서 봇을 실행시키기 위해 사용됩니다.
봇 생성은 이걸로 끝입니다.
이제 라즈베리파이에서 텔레그램 봇을 통해 들어오는 요청을 처리하는 코드를 구현해야 합니다.
텔레그램 봇 서버를 구현하기 위해 파이썬 모듈 중 ‘telepot’을 이용할 예정입니다.
PIP를 통해 telepot을 다운 받습니다.
pip3 install telepot
telepot을 다운로드 받은 후 파이썬으로 특정 텍스트에 따라 처리할 수 있는 코드를 구현합니다.
#-*- coding: utf-8 -*- import time import telepot from telepot.loop import MessageLoop def handle(msg): content_type, chat_type, chat_id = telepot.glance(msg) if content_type == 'text': if msg['text'].upper() == 'LED ON': bot.sendMessage(chat_id, msg['text']) elif msg['text'] == '/start': pass else: bot.sendMessage(chat_id, '지원하지 않는 기능입니다') TOKEN = '676XXXXX8:AAE8XXXXXXXXXX-XXX_LOXXXXXXXXXXXXXXXXXXvM' # 텔레그램으로부터 받은 Bot API 토큰 bot = telepot.Bot(TOKEN) MessageLoop(bot, handle).run_as_thread() print ('Listening ...') # Keep the program running. while True: time.sleep(1000)
‘LED ON’ 이라는 메세지가 오면 다시 메세지를 보내고 그 외 메세지가 들어올 경우 ‘지원하지 않는 기능입니다’라는 메세지를 보내는 프로그램입니다.
소스를 실행시키면 라즈베리파이는 텔레그램으로부터 메세지가 들어오기를 대기합니다.
텔레그램 앱에서 새로 추가한 봇을 검색하여 메세지를 보내면 정상적으로 동작하는 걸 보실 수 있습니다.
참고자료
https://core.telegram.org/bots
https://bakyeono.net/post/2015-08-24-using-telegram-bot-api.html