안녕하세요 대무무입니다.
최근에 Python 과 FastAPI 를 가지고 간단한 로또 번호 예측 결과를 출력하는 백엔드를 만들어봤는데요.
요걸 좀 편하게 사용할 방법이 없을까 싶어서 찾아보다 텔레그램의 봇 기능을 이용해서 로또 예측 번호 알려주거나 내가 가진 로또 번호와 당첨 번호 비교하는 기능을 개발했고 이 경험을 통해 텔레그램 봇 기능을 한번 간단하게 소개시켜드리려 합니다.
텔레그램 봇(Telegram Bot)?
https://core.telegram.org/bots
Bots: An introduction for developers
Bots are small applications that run entirely within the Telegram app. Users interact with bots through flexible interfaces…
core.telegram.org
텔레그램에서 소개하기를 "텔레그램 내 작은 앱" 이라고 합니다. 텔레그램에서 제공하는 채팅 기능을 통해 봇과 상호작용이 가능하기 때문에 이렇게 소개한 것이라 생각됩니다. 봇 기능은 텔레그램에서 무료로 제공하므로 개발자들이 편하게 봇을 제작할 수 있습니다. Python 의 경우 텔레그램에서 제공한 Bot API 를 통해 라이브러리 만든 패키지(python-telegram-bot) 이 있습니다. 이 패키지를 이용해서 Python 으로 텔레그램 봇을 편하게 만들 수 있습니다.
어떻게 만들어?
우선 텔레그램으로 접속해서 BotFather 를 통해 Bot 채팅방을 만들어야 합니다. 텔레그램 검색창에 BotFather 라고 검색합니다. 그러면 여러 결과가 나오는데 여기서 오른쪽에 체크 표시있는 것을 클릭합니다. 이제 봇 채팅방을 만들어야 합니다. 다음 과정을 거치면 됩니다.
- /newbot 이라고 채팅을 입력하면 봇 채팅방을 만들기 위한 과정에 돌입합니다.
- 이후 봇 채팅방 이름을 정합니다. 저는 블로그용 이라고 작성했습니다.
- 봇의 이름을 정합니다. 여기서 중요한 점은 _bot 이라고 끝나야 합니다. 저는 blotTest12341234_bot 이라고 작성했습니다. blogTest_bot 은 이미 있다고 거절당한 것을 이미지에서 확인하실 수 있습니다.
- 이후 봇 채팅방이 만들어지고 다음 링크(t.me/blogTest12341234_bot) 가 생성되었습니다. 해당 링크가 봇 채팅방으로 접속하기 위한 링크이며 아래 토큰 정보(6097811978:AAHhYq0xPL_z9NKF14AG4pJI--tNW8qonr4) 가 존재합니다. 해당 토큰이 있어야만 봇 컨트롤이 가능하며 토큰은 개발자만 알고 있어야 합니다. 저는 이 봇을 블로그에 게재하고 지울 예정입니다.
링크를 클릭하여 봇 채팅방에 입장하고 Start 버튼을 클릭하면 시작입니다.
자 이제 python-telegram-bot 패키지를 사용하여 봇을 만들어 봇 채팅방의 입력을 가지고 답변을 할 수 있도록 해봅시다!
다음 명령을 통해 python-telegram-bot 패키지를 다운로드 받습니다.
$ pip3 install python-telegram-bot
이후 기본 봇 컨트롤하기 위한 기본 python 코드를 작성합니다. python-telegram-bot 패키지가 20 버전으로 업되면서 비동기로 변경되었는데요. 비동기에 대한 설명은 여기서는 스킵하겠습니다!
import os
from telegram import Update
from telegram.ext import ApplicationBuilder, ContextTypes, CommandHandler
telegram_api_token = os.getenv('TELEGRAM_TOKEN')
class TelegramBotHandler:
@classmethod
async def help(cls, update: Update, context: ContextTypes.DEFAULT_TYPE):
msg = "안녕하세요. 반갑습니다!!! 저는 사용자분의 '/help' 명령에 의해 답변드립니다."
await update.message.reply_text(msg)
def main():
try:
application = ApplicationBuilder().token(telegram_api_token).build()
application.add_handler(CommandHandler('help', TelegramBotHandler.help))
application.run_polling()
except KeyboardInterrupt:
return True
if __name__ == '__main__':
main()
다음은 봇 채팅방에서 /help 라고 쳤을 때 봇이 자동으로 "안녕하세요. 반갑습니다!!! 저는 사용자분의 '/help' 명령에 의해 답변드립니다." 라고 답변하는 단순한 코드입니다. 해당 코드를 저장한 파일 이름이 'main.py' 라고 가정했을 때 실행 방법은 다음과 같습니다.
$ python3 -u main.py
실행 순서는 if __name__ == '__main__' 에 의해 main 함수를 호출합니다. main 함수 내 application 이라는 변수가 빌더에 의해 할당되며 이때 telegram_api_token 에 넣을 값이 앞에서 생성했던 토큰(6097811978:AAHhYq0xPL_z9NKF14AG4pJI--tNW8qonr4) 입니다. 저는 TELEGRAM_TOKEN 환경 변수에 토큰값을 넣었고 코드 실행 시 자동으로 불러오도록 했습니다. 이후 CommandHandler 에 의해 'help' 라는 명령이 TelegramBotHandler 클래스의 help 라는 정적 클래스 메소드와 매핑되도록 콜백 함수를 등록합니다. 이후 run_polling() 함수를 통해 텔레그램으로부터 채팅 메시지가 오면 자동으로 콜백 함수가 실행되도록 합니다.
간단한 Python 코드를 쭉 설명했는데요. 다음 코드를 실행시킨 후 텔레그램에서 /help 라는 명령을 봇 채팅방에 입력하고 엔터를 클릭하면 다음과 같이 답변하는 모습을 확인할 수 있습니다.
여기까지 진행하시면 원래 목적인 봇 만드는데는 성공한 겁니다.
추가적으로 봇 채팅방에 사용할 명령들을 미리 지정해서 봇 채팅창에 띄울 수 있습니다. 다음 과정을 진행해보세요.
- 봇 채팅창 상단 제목쪽을 클릭하여 봇 채팅창 정보 및 수정창으로 이동합니다.
- Edit 버튼을 클릭합니다.
- Edit Commands 버튼을 클릭합니다.
- BodFather 채팅창에서 다음과 같이 추가할 명령과 명령 설명을 입력합니다.
- 이후 5분 정도 대기 후 봇 채팅창을 입장하면 왼쪽 하단에 메뉴바가 생긴 것을 확인할 수 있습니다. 해당 메뉴바를 클릭하면 지정했던 명령과 설명이 표시됩니다.
이렇게 텔레그램 봇 기능을 사용한 챗봇을 만들어봤는데요. 인프라를 구축하신 분들이라면 미리 명령을 등록해놓고 원하는 시간에 자유롭게 명령을 실행하여 인프라 모니터링이나 서버 작동과 같은 작업을 진행할 수 있습니다!
저는 현재 로또 예측 및 당첨결과 알림 챗봇을 만들어 무료로 서비스 중입니다. 한번 놀러오셔서 재미로 해보세요!
로또 예측 및 당첨 결과 챗봇
로또 알림 및 예측 번호 조회 및 알림을 목적으로 합니다. 사용자가 고른 로또 번호를 입력하면 매칭 알림도 가능합니다. 문의사항은 damho1104@gmail.com 으로 부탁드려요!
t.me
Reference
https://core.telegram.org/bots
https://github.com/python-telegram-bot/python-telegram-bot
https://github.com/python-telegram-bot/python-telegram-bot/wiki/Extensions---Your-first-Bot
'개발' 카테고리의 다른 글
VM vs Container: 고성능 앱 배포를 위한 최적 선택은? (VM 격리 vs 컨테이너 효율성) (1) | 2025.03.07 |
---|---|
생각하는 LLM 모델: DeepSeek-R1 및 QLASS가 AI의 논리적 사고를 혁신하는 방법 (1) | 2025.03.03 |
MLOps 마스터하기: 자동화된 머신러닝 모델 개발부터 배포까지 5단계 가이드 (3) | 2025.02.05 |
[Python] 텔레그램 봇 기능 사용해보기 part 2 (0) | 2024.01.17 |
[Python] Python MongoDB 라이브러리 비교 (PyMongo VS MongoEngine) (1) | 2024.01.09 |