Lala's tower

텔레그램으로 챗GPT 봇 만들기

텔레그램으로 챗GPT 봇 만들기

2024-05-19 16:29:57

텔레그램 채팅창에서 질문을 입력하면 챗GPT 봇이 답변해주는 '텔레그램으로 챗GPT 봇' 프로그램을 만들어 보겠습니다. 봇 추가하는 방법, 텔레그램 API로 메시지 전송 기능 구현 방법이 포함되었습니다. 아래와 같이 질문하면 챗GPT4o가 답변해주는 프로그램입니다.

텔레그램으로 챗GPT 봇 연동하여
메시지 입력 받아 챗GPT가 답변하는 예시

텔레그램으로 챗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로 챗봇 만들기
챗팅창 화면 꾸미기