카카오톡 챗봇은 사용자는 앱을 새로 설치하거나 웹사이트에 접속할 필요가 없기 때문에 카카오톡에 챗봇을 만들면 접근성이 좋다
카카오톡 챗봇에서 ChatGPT를 직접 호출하는 것은 아니다.
중간에 별도 서버가 필요하다
사용자: ChatGPT가 뭐야?
카카오 챗봇
→ 내 FastAPI 서버 호출
→ FastAPI 서버가 OpenAI API 호출
→ GPT 답변 생성
→ FastAPI가 카카오 응답 JSON으로 변환
→ 카카오톡 말풍선 출력
프로젝트 구성
가장 간단하게 잡았다
kakao-gpt-bot/
├── main.py
└── .env
.env
OPENAI_API_KEY=본인의_OPENAI_API_KEY
OPENAI_MODEL=gpt-4o-mini
API키는 OpenAI 플랫폼에서 생성한다
https://platform.openai.com/api-keys
main.py
import os
import logging
from typing import Any
from pydantic import BaseModel
from openai import AsyncOpenAI
from fastapi import FastAPI
from dotenv import load_dotenv
load_dotenv()
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
app = FastAPI()
client = AsyncOpenAI()
MODEL = os.getenv("OPENAI_MODEL", "gpt-5.5")
class ChatRequest(BaseModel):
message: str
def kakao_simple_text(text: str) -> dict[str, Any]:
return {
"version": "2.0",
"template": {
"outputs": [
{
"simpleText": {
"text": text
}
}
]
}
}
async def ask_gpt(user_message: str) -> str:
response = await client.responses.create(
model=MODEL,
reasoning=None,
instructions=(
"너는 카카오톡 챗봇 상담원이다. "
"따뜻하게 응대하세요"
),
input=user_message,
)
return response.output_text.strip()
@app.get("/health")
async def health():
return {"status": "ok"}
@app.post("/kakao/skill")
async def kakao_skill(payload: dict[str, Any]):
"""
카카오 챗봇 스킬 서버용 API
"""
try:
user_request = payload.get("userRequest", {})
utterance = user_request.get("utterance", "")
if not utterance:
return kakao_simple_text("질문을 입력해주세요.")
answer = await ask_gpt(utterance)
logger.info(answer)
return kakao_simple_text(answer)
except Exception as e:
logger.exception(e)
return kakao_simple_text("답변 생성 중 오류가 발생했습니다. 잠시 후 다시 시도해주세요.")
@app.post("/kakao/hello")
async def kakao_skill(payload: dict[str, Any]):
"""
카카오 챗봇 스킬 서버용 API (테스트용)
"""
return kakao_simple_text("안녕하세요, 반갑습니다")
테스트하는데 비용 드는것이 신경쓰인다면 /kakao/hello URL로 테스트한다
외부에서 호출해야하므로 로컬에서 기동하고 ngrok 연동한다
uvicorn main:app --reload --host 0.0.0.0 --port 8000
# 다른터미널에서
ngrok http 8000
아래와 같은 식의 주소가 나온다
Forwarding https://abc-123.ngrok-free.app -> http://localhost:8000
외부망에서 https://abc-123.ngrok-free.app/ 를 통해 접근가능하다
카카오i오픈빌더
아래 링크에서 카카오톡 챗봇을 만든다.

사이드바 > 스킬 > 스킬목록
에서 스킬을 생성한다
아래와 같이 입력하고 저장한다

자세한 스킬 가이드는 아래 링크를 참고한다
https://kakaobusiness.gitbook.io/main/tool/chatbot/skill_guide/answer_json_format
좌측 사이드바 시나리오 > 폴백 블록에 들어간다
스킬을 등록해주고 봇 응답에 스킬데이터를 사용한다

왜 이렇게 하냐면,
카카오 챗봇 룰베이스 챗봇으로 대략 이렇게 동작합니다.
→ 어떤 블록과 매칭되는지 판단
→ 매칭 안 되면 폴백 블록 실행
→ 폴백 블록의 응답 실행
봇테스트를 통해 확인할 수 있습니다

유의사항
카카오 문서 기준으로 스킬 처리시간 SLA가 5초이기 때문에 5초가 넘어가면 콜백 등록을 별도로 진행해야 합니다.
'개발업무 > 개발' 카테고리의 다른 글
| Strands Agents와 LangGraph: model이 주도할까, 코드가 주도할까 (0) | 2026.06.07 |
|---|---|
| OpenAI LLM API: Responses, Chat Completions, Batch (0) | 2026.04.25 |
| OAuth란 (0) | 2026.03.21 |
| Spring Boot: WebClient vs RestTemplate (0) | 2025.09.30 |
| LoadRunner로 WebSocket(STOMP) 부하 테스트하기 (1) | 2025.08.29 |