알쓸전컴(알아두면 쓸모있는 전자 컴퓨터)

Telegram bot 개발 본문

기타/메신저 연동

Telegram bot 개발

백곳 2017. 10. 28. 15:06

Telegram bot 개발 (with python)


telegram은 bot을 지원 합니다. 


bot은 채팅에 대응해 필요한 정보를 줄수 있는 프로그램을 만들수 있도록 해줍니다. 


Token 발급 받기


bot 개발을 위해서 우선은 토큰을 받아야 합니다. 


그러기 위해서는 botfather 을 텔레그램에서 찾아서 채팅을 해야 합니다. 



그리고 봇을 생성 하기 위해서 명령어 /newbot 을 입력 합니다. 

주의점은 bot의 이름은 항상 _bot 으로 끝나야합니다. 


위에 해당 하는 부분이 Token 입니다. 


python telegram 라이브 러리 설치



pip install python-telegram-bot --upgrade


으로 설치를 완료 하시면 됩니다. 


간단 예제(1)


import telegram   #텔레그램 모듈을 가져옵니다.


my_token = '여기에 토큰을 입력해 주세요'   #토큰을 변수에 저장합니다.


bot = telegram.Bot(token = my_token)   #bot을 선언합니다.


updates = bot.getUpdates()  #업데이트 내역을 받아옵니다.


for u in updates :   # 내역중 메세지를 출력합니다.


print(u.message)


간단 예제(2)


여기서는 메세지를 받고 상황에 받는 데이터를 주기 위한 예제 입니다. 


from telegram.ext import Updater


updater = Updater(token='TOKEN')


dispatcher = updater.dispatcher


#dispatcher 는 이벤트 왔을때 처리해줄수 있는 객체 입니다. 


#아래와 같이 start 함수를 만들어 놓습니다. 


def start(bot, update):

bot.send_message(chat_id=update.message.chat_id, text="I'm a bot, please talk to me!")


from telegram.ext import CommandHandler


start_handler = CommandHandler('start', start)


dispatcher.add_handler(start_handler)


updater.start_polling()


#여기서 CommandHandler 는 /start 메세지 를 들어 올때는 의미합니다 / 가 붙으면 커맨더 명령이라고 인식 합니다. 


# 그리고 dispatcher 에 해당 핸들러를 추가 해 줍니다. 


# 그럼/start 채팅이 홨을때 update.message.chat_id-> /start 메세지를 보낸 ID 에 


"I'm a bot, please talk to me!" 을 보냅니다. 


간단 예제(3)


from telegram.ext import Updater


updater = Updater(token='TOKEN')


dispatcher = updater.dispatcher


def echo(bot, update):

bot.send_message(chat_id=update.message.chat_id, text=update.message.text)


update.message.text 은 상대방에게 받은 메세지 입니다. 

# 받은 메세지를 그대로 돌려 줍니다. 

echo_handler = MessageHandler(Filters.text, echo)


MessageHandler 메세지를 받았을때 행동합니다. 


dispatcher.add_handler(echo_handler)


updater.start_polling()


간단 예제(4)



from telegram.ext import Updater


updater = Updater(token='TOKEN')


dispatcher = updater.dispatcher


def caps(bot, update, args):

text_caps = ' '.join(args).upper()

bot.send_message(chat_id=update.message.chat_id, text=text_caps)


caps_handler = CommandHandler('caps', caps, pass_args=True)


dispatcher.add_handler(caps_handler)


updater.start_polling()


# 커맨더 /caps  에 파라메터 값을 전달할수 있습니다. /caps abcd 라고 채팅하면 BOT은 ABCD 로 대답 합니다. 


간단 예제(5) 멀티미디어 


>>> bot.send_photo(chat_id=chat_id, photo=open('tests/test.png', 'rb'))


>>> bot.send_voice(chat_id=chat_id, voice=open('tests/telegram.ogg', 'rb'))


>>> bot.send_photo(chat_id=chat_id, photo='https://telegram.org/img/t_logo.png')


>>> bot.send_audio(chat_id=chat_id, audio=open('tests/test.mp3', 'rb'))


>>> bot.send_document(chat_id=chat_id, document=open('tests/test.zip', 'rb'))



메모리에서 이미지 전송 

 

from io import BytesIO

>>> bio = BytesIO()

>>> bio.name = 'image.jpeg'

>>> image.save(bio, 'JPEG')

>>> bio.seek(0)

>>> bot.send_photo(chat_id, photo=bio)



멀티미디어 다운 

>>> file_id = message.voice.file_id

>>> newFile = bot.get_file(file_id)

>>> newFile.download('voice.ogg')



간단 예제(6)  키보드 메뉴 


>>> custom_keyboard = [['top-left', 'top-right'],  ['bottom-left', 'bottom-right']]

>>> reply_markup = telegram.ReplyKeyboardMarkup(custom_keyboard)

>>> bot.send_message(chat_id=chat_id, text="Custom Keyboard Test",  reply_markup=reply_markup)



Remove a custom keyboard

>>> reply_markup = telegram.ReplyKeyboardRemove()

>>> bot.send_message(chat_id=chat_id, text="I'm back.", reply_markup=reply_markup)


좀 더 진화된 메뉴들 


메뉴얼에 보면 위와 같은 화면또한 만들수 있다.


참조 = https://github.com/python-telegram-bot/python-telegram-bot/wiki/Code-snippets



java api 라이브러리 주소 


https://github.com/rubenlagus/TelegramBots





'기타 > 메신저 연동' 카테고리의 다른 글

telegrambots (java api) 기본 sample code  (0) 2018.07.06
LINE Notify 사용하기 [메신저 알람]  (0) 2017.09.28
Comments