텔레그램으로 챗GPT 봇 만들기
텔레그램 채팅창에서 질문을 입력하면 챗GPT 봇이 답변해주는 '텔레그램으로 챗GPT 봇' 프로그램을 만들어 보겠습니다. 봇 추가하는 방법, 텔레그램 API로 메시지 전송 기능 구현 방법이 포함되었습니다. 아래와 같이 질문하면 챗GPT4o가 답변해주는 프로그램입니다.
텔레그램으로 챗GPT 봇 만들기 봇 추가
텔레그램으로 봇을 만들고 방에 들어가서 API와 토큰을 얻는 과정을 정리하였습니다.
봇 추가하기
왼쪽 상단 검색창에 BotFather를 입력한다.
What can this bot do? 메시지가 나오고 아래 START 버튼이 나온다.
START버튼을 누른다.
채팅창에 /newbot 이라고 입력한다.
그래서 끝이 'bot'으로 끝나는 이름을 정해 입력한다.
그리고 bot으로 끝나는, 봇의 유저명을 정해준다. (중복되지 않도록 저는 오늘 날짜를 붙여주었습니다.)
API 및 토큰 얻기
API URL과 토큰이 표시될 것이다. 잘 복사해둔다.
방 입장
메시지가 표시되면 t.me/로 시작하는 링크를 눌러 방에 입장한다. 이제 봇의 메시지를 볼 준비가 완료되었다.
텔레그램으로 챗GPT 봇 만들기 파이썬 코드
아래 TOKEN에 위에서 만든 토큰을 붙여넣기 한다.
OPENAI의 API KEY도 붙여넣기 한다.
텔레그램 연동을 위해 아래 패키지를 설치한다.
pip install python-telegram-bot urllib3 six
python-telegram-bot 버전 21.2
pip show python-telegram-bot 하면 현재 설치된 버전을 확인한다.
설치되지 않았다면
pip install python-telegram-bot
로 설치한다.
21.2 보다 오래된 버전이면 업그레이드 한다.
pip install python-telegram-bot --upgrade
# python-telegram-bot ver. 21.2 텔레그램으로 챗GPT 봇
import logging
from telegram import Update
from telegram.ext import Application, MessageHandler, filters, CommandHandler, ContextTypes
# pip install openai
from flask import Flask, jsonify, render_template, request
from flask_socketio import SocketIO
from openai import OpenAI
# 로깅 설정
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)
logger = logging.getLogger(__name__)
# 설정 상수
TELEGRAM_TOKEN = "YOUR_TELEGRAM_TOKEN"
OPENAI_API_KEY = "YOUR_OPENAI_API_KEY"
OPENAPI_MODEL = "gpt-4"
CHAT_MODEL_CONTEXT = """
넌, 친절한 상담자야.
"""
# OpenAI 클라이언트 초기화
openai_client = OpenAI(api_key=OPENAI_API_KEY)
message_list = [
{"role": "system", "content": CHAT_MODEL_CONTEXT}
]
async def chat_gpt_response(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
chat_id = update.effective_chat.id
user_message = update.message.text
# 사용자 메시지를 대화 목록에 추가
message_list.append({"role": "assistant", "content": user_message})
# OpenAI 모델 사용하여 응답 생성
try:
completion = openai_client.chat.completions.create(
model=OPENAPI_MODEL,
messages=message_list
)
response_message = completion.choices[0].message.content
await context.bot.send_message(chat_id=chat_id, text=response_message)
except Exception as e:
logger.error(f"chat_id {chat_id}로 메시지 전송 실패: {e}")
await update.message.reply_text("오류: 메시지를 보낼 수 없습니다.")
def main() -> None:
# Application 생성 및 봇 토큰 전달
application = Application.builder().token(TELEGRAM_TOKEN).build()
# 메시지 핸들러 등록
application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, chat_gpt_response))
# 봇 시작
application.run_polling()
if __name__ == '__main__':
main()
python-telegram-bot 버전 13.7
텔레그램으로 챗GPT 봇 만들기, python-telegram-bot 버전 13.7를 사용하여 구현할 수도 있다.
pip install python-telegram-bot==13.7
이제 아래 코드를 실행한다.
# python-telegram-bot ver. 13.7 텔레그램으로 챗GPT 봇
# pip install python-telegram-bot urllib3 six
import logging
from telegram import Update
from telegram.ext import Updater, MessageHandler, Filters, CallbackContext
# pip install openai
from flask import Flask, jsonify, render_template, request
from flask_socketio import SocketIO
from openai import OpenAI
# 로깅 설정
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)
logger = logging.getLogger(__name__)
# 설정 상수
TELEGRAM_TOKEN = "YOUR_TELEGRAM_TOKEN"
OPENAI_API_KEY = "YOUR_OPENAI_API_KEY"
OPENAPI_MODEL = "gpt-4o"
CHAT_MODEL_CONTEXT = """
넌, 친절한 상담자야.
"""
# OpenAI 클라이언트 초기화
openai_client = OpenAI(api_key=OPENAPI_API_KEY)
message_list = [
{"role": "system", "content": CHAT_MODEL_CONTEXT}
]
def chat_gpt_response(update: Update, context: CallbackContext) -> None:
chat_id = update.effective_chat.id
user_message = update.message.text
# 사용자 메시지를 대화 목록에 추가
message_list.append({"role": "assistant", "content": user_message})
# OpenAI 모델 사용하여 응답 생성
try:
completion = openai_client.chat.completions.create(
model=OPENAPI_MODEL,
messages=message_list
)
response_message = completion.choices[0].message.content
context.bot.send_message(chat_id=chat_id, text=response_message)
except Exception as e:
logger.error(f"chat_id {chat_id}로 메시지 전송 실패: {e}")
update.message.reply_text("오류: 메시지를 보낼 수 없습니다.")
def main() -> None:
# Updater 생성 및 봇 토큰 전달
updater = Updater(TOKEN)
# 디스패처 가져오기
dispatcher = updater.dispatcher
# 메시지 핸들러 등록
dispatcher.add_handler(MessageHandler(Filters.text & ~Filters.command, chat_gpt_response))
# 봇 시작
updater.start_polling()
# Ctrl-C를 누를 때까지 봇 실행
updater.idle()
if __name__ == '__main__':
main()
텔레그램 봇 방에서 메시지를 입력하면 위와 같이 챗GPT가 답변해준다.
Telegram APIs 공식홈페지
Chat GPT로 챗봇 만들기
Vertex AI로 챗봇 만들기
Google AI studio(Gemini) 로 챗봇 구현
Claude로 챗봇 만들기
챗팅창 화면 꾸미기