텔레그램 메시지 처리 – 간단한 챗봇 만들기

들어가기 앞서

안녕하세요! 이번 포스팅에서는 텔레그램 봇을 이용하여 사용자가 채팅방에 입력한 메시지를 처리하고 응답하는 간단한 챗봇을 만들어보도록 하겠습니다.

 

 

카카오톡 고객센터
예시) 카카오톡 고객센터 챗봇

 

 

카카오톡 고객센터의 챗봇인데요. 위 사진처럼 ‘카카오톡’이라고 입력하면, 챗봇이 ‘카카오톡’이라는 답변을 받았을 때 ‘사람과 세상…’이라는 문구의 답변을 하도록 프로그래밍되어 있는 것처럼, 오늘 저희가 작성해 볼 코드는 바로, 챗봇이 특정 메시지를 입력받았을 때 답변을 하는 코드를 작성해 보려고 합니다.

 

 

전제 조건

텔레그램 봇 생성과 Token이 필요한데요. 지난 포스팅에서 봇 생성관련하여 포스팅을 하였으니, 준비가 되지 않으신 분들은 이 링크를 통해 이전 포스팅에서 봇 생성, 토큰을 얻으신 뒤 진행하시면 될 것 같습니다.

 

이번 코드 작성에서는 파이썬 텔레그램 봇 라이브러리를 활용하여 작성할 예정입니다. 아래와 같이 입력하시어 python-telegram-bot 라이브러리를 설치하시면 되겠습니다.

pip install python-telegram-bot

 

 

코드 복사 방법

 

 

새창으로 열기
새창으로 열기

 

 

코드 복사
코드 복사

 

 

우클릭 방지가 적용되어 있어서 코드 복사가 어려우실 것 같습니다. 코드 블록 우측아이콘 중 세 번째 아이콘을 클릭하시면 새창에서 코드가 표시되는데요. 이 창에서 코드를 복사하셔서 활용하시면 되겠습니다.

 

 

[목차]

1. 라이브러리와 변수 설정

2. 메시지 처리 함수 작성

3. 메인 함수 설정

4. 전체코드

5. 마무리

 

 

라이브러리와 변수 설정

먼저, 필요한 라이브러리를 임포트 하고 텔레그램 봇의 토큰을 설정합니다.

 

 

from telegram import Update
from telegram.ext import filters, ApplicationBuilder, ContextTypes, MessageHandler

# 토큰을 bot_token 변수에 저장
bot_token = '토큰을 여기에 입력합니다'

 

 

 

메시지 처리 함수 작성

우선, 간단하게 사용자가 채팅방에 메시지를 입력하면 해당 메시지를 받아서 응답하는 함수를 작성해 보도록 하겠습니다. 입력된 메시지를 로 읽어온 뒤 간단한 메시지를 추가한 후 사용자에게 다시 최종 메시지를 전송하는 코드입니다.

 

 

# 메시지 처리 함수
async def msg(update: Update, context: ContextTypes.DEFAULT_TYPE):

    send_msg = update.message.text + "(이)라고 하셨습니다."

    await context.bot.send_message(chat_id=update.effective_chat.id, text=send_msg)

 

 

사용자가 입력한 메시지update.message.text를 이용해 확인해 볼 수 있습니다. 사용자가 보낸 메시지에 ‘(이)라고 하셨습니다.’라는 문자열을 붙여서 다시 보내보겠습니다.

보내는 방법은 context.bot.send_message를 이용하여 보내면 메시지가 보내집니다. chat_id는 update.effective_chat.id에서 메시지를 보낸 사람의 User ID를 가져와서 사용하는 방식입니다.

 

 

 

메인 함수 설정

 

 

if __name__ == '__main__':

    # 챗봇 application 인스턴스 생성
    application = ApplicationBuilder().token(bot_token).build()

    # 핸들러 생성
    msg_handler = MessageHandler(filters.TEXT & (~filters.COMMAND), msg)

    # 핸들러 추가
    application.add_handler(msg_handler)

    # 폴링 방식으로 실행
    application.run_polling()

 

 

메인 함수에서는 먼저, 챗봇을 사용하기 위해 application 인스턴스를 생성해 주셔야 하는데요. 위에 입력했던 토큰을 가져와서 ApplicationBuilder를 이용해 인스턴스를 생성합니다.

다음은 핸들러 생성인데요. MessageHandler를 이용해 메시지를 받는 핸들러를 선언하고 사용자가 메시지를 입력할 때마다 위에서 작성했던 msg 함수를 실행한다는 정보를 입력해 주는 과정입니다.

핸들러를 생성했다면 조금 전에 생성한 application 인스턴스에 이 핸들러를 add_handler를 이용하여 추가해 주시면 되고, 마지막으로 run_polling을 실행해 챗봇이 폴링 방식으로 메시지를 받을 준비를 하게 됩니다.

 

 

 

전체코드

지금까지 작성한 코드를 전체적으로 보면 아래와 같습니다.

 

 

from telegram import Update
from telegram.ext import filters, ApplicationBuilder, ContextTypes, MessageHandler

# 토큰을 bot_token 변수에 저장
bot_token = '토큰을 여기에 입력합니다'


# 메시지 처리 함수
async def msg(update: Update, context: ContextTypes.DEFAULT_TYPE):

    send_msg = update.message.text + "(이)라고 하셨습니다."

    await context.bot.send_message(chat_id=update.effective_chat.id, text=send_msg)


if __name__ == '__main__':

    # 챗봇 application 인스턴스 생성
    application = ApplicationBuilder().token(bot_token).build()

    # 핸들러 생성
    msg_handler = MessageHandler(filters.TEXT & (~filters.COMMAND), msg)

    # 핸들러 추가
    application.add_handler(msg_handler)

    # 폴링 방식으로 실행
    application.run_polling()

 

 

이 파이썬 코드 파일을 실행한 뒤 텔레그램 챗봇과의 채팅에서 메시지를 입력해 보았습니다.

 

 

챗봇 실행 및 답변
챗봇 실행 및 답변

 

 

의도한 대로 사용자의 입력에 문자열을 메시지를 잘 전송하는 것을 확인할 수 있었습니다.

 

 

 

마무리

지금까지 텔레그램 챗봇의 메시지를 처리하는 방법에 대해서 알아보았는데요. 혹시 더 자세한 설명을 원하시는 분들은 이 링크의 Python-Telegram-Bot 문서를 확인해 보시면, 사용방법을 더 확실하게 이해하실 수 있으실 것 같습니다.

 

이제 이 메시지 처리 방법을 이용해서 챗봇을 각자의 입맛에 맞게 구성해 보시면 될 것 같습니다. 활용범위는 무궁무진할 것 같은데요.

 

 

네이버 뉴스
네이버 뉴스

 

 

예를 들어, ‘뉴스’라고 입력하면 관심 있는 뉴스를 스크래핑해서 전송해 주는 뉴스봇을 만들 수 있을 것 같고, 아니면 주식 관련 챗봇을 만들 수도 있을 것 같습니다. 야후 파이낸스 API를 연동해서 ‘애플’이라고 입력하면 애플의 주가와 애플 관련 지표들을 전송해 주는 지표봇을 만들 수도 있겠습니다.

 

 

ChatGPT
ChatGPT

 

 

또, 지난 포스팅에서 소개해드린 OpenAI의 API를 신청하셔서 챗봇에 활용하시면, 텔레그램 채팅방에서 ChatGPT를 사용할 수 있는 AI봇도 만들어보실 수 있으실 것 같습니다. 이처럼 챗봇을 여러 범위로 확장하여 개발하신다면, 생활에 도움을 줄 수 있는 재미난 챗봇들을 만드실 수 있으실 것 같습니다.

 

이번 포스팅은 여기서 마무리하도록 하겠습니다.

 

감사합니다!

 

댓글 남기기