Lala's tower

카카오톡으로 챗GPT 봇 만들기

카카오톡으로 챗GPT 봇 만들기

2024-06-06 21:30:07

우리나라 핸드폰 사용자의 대부분의 사람들이 이용하는 카카오톡으로 챗GPT 봇을 만들어 보겠습니다. Open AI API(유료)와 카카오톡 비지니스를 이용합니다.

카카오톡으로 챗GPT 봇 만들기 실행 결과

카카오톡으로 챗GPT 봇 재료

먼저, 아래 준비가 필요합니다.

  1. 카카오톡 비지니스 가입

  2. Open AI 가입 및 API Key 발급

  3. 구름 IDE (또는 클라우드 서버 또는 colab+grok)

카카오톡 비지니스 가입 후 콜백 서비스 신청

카카오톡 비지니스 홈페이지 에서 회원가입을 합니다.
채널을 만듭니다. (카카오톡 비지니스 채널 개설)
채널은 카카오톡에서 회원이 접속하는 창구 역할입니다.
챗봇을 만듭니다. (카카오톡 챗봇)
챗봇은 채널에서 자동으로 응답해주는 프로그램입니다.
챗봇에는 '카카오톡 챗봇'과 '보이스봇' 2가지가 있습니다.
'카카오톡 챗봇'으로 선택하여 이름을 정하고 생성합니다.
시나리오와 스킬을 만들어 줘야합니다.
시나리오는 이렇게 질문받으면 이렇게 답해라고 정해주는 것인데 챗GPT가 답하므로 이부분 비교적 간단합니다.
스킬은 질문 받으면 처리 방법을 정의합니다.

스킬 추가

메뉴에서 스킬/스킬목록을 선택합니다.
생성을 눌러줍니다.
설명에 적당히 이름을 정해주면 되는데 send2gpt라고 하시죠.

URL에는 구름 IDE의 preview에서 확인된 링크를 붙여 넣습니다.
(preview URL확인 방법, 상세 내용은 아래 링크를 참조)
구름IDE API서버 만들기 2

시나리오의 폴백 블록 설정

시나리오 메뉴를 선택하고 기본 시나리오에서 폴백 블록을 선택합니다.
Fallback 은 준비된 시나리오로 대응이 안될 경우의 대체 경로를 의미합니다만 챗GPT가 모두 대응하므로 다른 시나리오는 필요없이 폴백 블록만 설정하시면 됩니다.

파라미터 설정 오른 쪽에서 스킬에 생성했던 send2gpt를 선택합니다.

아래 봇 응답에는 스킬데이터 사용을 선택합니다.

배포

챗봇 페이지에서 배포메뉴를 선택하시고 배포 버튼을 누릅니다.
배포를 하면 카카오톡에서 사용할 수 있습니다.
채널 관리페이지에서 프로필 설정에서 1:1채팅을 켜둡니다.
친구모으기 메뉴에서 채팅 URL로 접속하시면 준비 완료

구름IDE에 파이썬 코드 실행

아래 코드를 구름IDE에서 kakaoGPT.py로 저장하고 실행합니다.
OpenAI API key를 받아서 아래 코드에 붙여 넣으세요.

아래 문구도 원하시는 내용으로 수정하세요.
CHAT_MODEL_CONTEXT = "넌, 만화 둘리의 고길동이야."

# 카카오톡으로 챗GPT 만들기
from flask import Flask, jsonify, request
from openai import OpenAI

app = Flask(__name__)

# 채팅 모델 컨텍스트
CHAT_MODEL_CONTEXT = "넌, 만화 둘리의 고길동이야."

# OpenAI API 클라이언트 설정
client = OpenAI(api_key="API키를 넣어주세요.")


# API 엔드포인트
@app.route('/', methods=['POST'])
def chat_response():
    # 사용자 요청 데이터 추출
    user_request = request.json.get('userRequest', {})
    callback_url = user_request.get('callbackUrl')
    utterance = user_request.get('utterance', '')
    print(f"user_request: {user_request}")
    print(f"callback_url: {callback_url}")
    print(f"utterance: {utterance}")

    # 시스템 컨텍스트로 메시지 리스트 초기화
    messageList = [{"role": "system", "content": CHAT_MODEL_CONTEXT}]

    # 사용자 메시지를 메시지 리스트에 추가
    dicMessage = {"role": "user", "content": utterance}
    messageList.append(dicMessage)

    # OpenAI 채팅 모델에서 응답 받기
    completion = client.chat.completions.create(
        model="gpt-4o",
        messages=messageList
    )
    response_message = completion.choices[0].message

    # 응답 페이로드 준비
    response = {
        "version": "2.0",
        "template": {
            "outputs": [
                {
                    "simpleText": {
                        "text": f"{response_message.content}"

                    }
                }
            ]
        }
    }

    return jsonify(response)


# 카카오톡으로 챗GPT 애플리케이션 실행
if __name__ == '__main__':
    app.run(debug=True, host="0.0.0.0", port=80)

주의

챗GPT API가 5초 이내 답장을 주지 않으면 전송 실패합니다. 서버 성능이 느리거나 이미지 생성을 요청하셨다면 5초 이상이 소요될 수 있습니다. 이 경우에는 카카오 콜백 사용을 신청하셔야 합니다. 카카오 콜백은 5초이상 60초 이내 응답하는 메시지를 전송할 수 있습니다. 60초 이상이 걸리면 카카오 Event API를 사용하시면 됩니다.

카카오 Event API는 유료로 15원 가량 요금이 발생합니다.

채팅으로 이어질 필요없이 메시지를 발송하는 것으로 충분하다면 알림톡을 보내면됩니다. 이것은 카카오 Event API보다는 저렴합니다. 문자 보다도 저렴합니다.

카카오톡 챗봇 튜토리얼

텔레그램으로 챗GPT 봇 만들기
챗GPT API로 이미지 생성하기
카카오톡으로 챗GPT 봇 만들기
gunicorn을 이용한 배포 방법