블로그로 돌아가기

카카오톡 API → AI 에이전트 → 업무 실행 파이프라인

카카오톡 메시지를 받아 AI가 처리하고 업무를 자동 실행하는 파이프라인 구조를 설명합니다. 카카오 비즈니스 채널 API부터 n8n 연동까지 실제 구현 방법을 공유합니다.

Robotext2026년 2월 9일9 min read

카카오톡 API → AI 에이전트 → 업무 실행 파이프라인

문제 정의: 카톡에서 바로 업무를 처리할 수 없을까?

한국에서 업무 커뮤니케이션의 시작은 대부분 카카오톡이다. "이번 달 매출 현황 알려줘", "내일 미팅 잡아줘", "지난주 발주서 다시 보내줘" — 이런 요청이 카톡으로 오면, 담당자가 사내 시스템에 접속해 수동으로 처리하고 다시 카톡으로 응답한다.

이 과정을 카카오톡 메시지 수신 → AI 에이전트 판단 → 업무 시스템 실행 → 결과 자동 응답으로 자동화할 수 있다. 2025년 10월 카카오가 ChatGPT를 카카오톡에 직접 통합하면서 AI 기반 카톡 자동화에 대한 관심이 폭발적으로 증가했다.


카카오톡 비즈니스 API 구조

카카오 비즈메시지는 크게 3가지 채널로 구성된다.

채널용도특징
알림톡정보성 메시지 발송템플릿 기반, 건당 ~8원, 수신 동의 불필요
친구톡광고/마케팅 메시지친구 추가 필수, 이미지 포함 가능
챗봇대화형 자동 응답스킬(Skill) 서버 연동, 실시간 대화

AI 에이전트 연동에는 카카오 i 오픈빌더의 스킬(Skill) 서버 방식을 사용한다. 사용자가 채널에 메시지를 보내면, 카카오 서버가 우리가 등록한 Webhook URL로 요청을 전달하고, 우리 서버가 응답을 반환하는 구조다.


아키텍처

┌──────────┐     ┌──────────────┐     ┌─────────────────┐
│ 사용자    │     │ 카카오 서버   │     │  우리 서버       │
│ (카카오톡)│────▶│ (오픈빌더)   │────▶│  (FastAPI)       │
│          │     │              │     │                  │
│          │◀────│              │◀────│  ┌────────────┐  │
│          │     │              │     │  │ AI 에이전트  │  │
└──────────┘     └──────────────┘     │  │ (GPT-4o)   │  │
                                      │  └─────┬──────┘  │
                                      │        │         │
                                      │  ┌─────▼──────┐  │
                                      │  │ 업무 시스템  │  │
                                      │  │ - DB 조회   │  │
                                      │  │ - 캘린더    │  │
                                      │  │ - ERP      │  │
                                      │  └────────────┘  │
                                      └─────────────────┘
sequenceDiagram
    participant U as 사용자 (카카오톡)
    participant K as 카카오 오픈빌더
    participant S as FastAPI 서버
    participant AI as AI 에이전트
    participant BIZ as 업무 시스템
 
    U->>K: "이번 달 매출 현황 알려줘"
    K->>S: POST /webhook (JSON payload)
    S->>AI: 의도 분류 + 파라미터 추출
    AI->>BIZ: query_sales(month="2026-02")
    BIZ-->>AI: {total: 52000000, ...}
    AI-->>S: 응답 텍스트 생성
    S-->>K: JSON 응답 (SimpleText)
    K-->>U: "2월 매출 현황: 5,200만원 (전월 대비 +12%)"

구현 예시: FastAPI + OpenAI Function Calling

1단계: Webhook 서버

from fastapi import FastAPI, Request
from pydantic import BaseModel
import json
 
app = FastAPI()
 
class KakaoRequest(BaseModel):
    """카카오 오픈빌더 스킬 요청 구조"""
    intent: dict
    userRequest: dict
    bot: dict
    action: dict
 
@app.post("/webhook")
async def kakao_webhook(request: Request):
    body = await request.json()
 
    # 사용자 메시지 추출
    user_message = body["userRequest"]["utterance"]
    user_id = body["userRequest"]["user"]["id"]
 
    # AI 에이전트로 처리
    response_text = await process_with_agent(user_message, user_id)
 
    # 카카오 응답 포맷
    return {
        "version": "2.0",
        "template": {
            "outputs": [
                {
                    "simpleText": {
                        "text": response_text
                    }
                }
            ]
        }
    }

2단계: AI 에이전트 (Function Calling)

from openai import OpenAI
 
client = OpenAI()
 
# 업무 도구 정의
tools = [
    {
        "type": "function",
        "function": {
            "name": "query_sales",
            "description": "월별 매출 현황을 조회합니다",
            "parameters": {
                "type": "object",
                "properties": {
                    "month": {
                        "type": "string",
                        "description": "조회할 월 (YYYY-MM 형식)"
                    }
                },
                "required": ["month"]
            }
        }
    },
    {
        "type": "function",
        "function": {
            "name": "schedule_meeting",
            "description": "미팅을 예약합니다",
            "parameters": {
                "type": "object",
                "properties": {
                    "date": {"type": "string", "description": "날짜 (YYYY-MM-DD)"},
                    "time": {"type": "string", "description": "시간 (HH:MM)"},
                    "attendees": {
                        "type": "array",
                        "items": {"type": "string"},
                        "description": "참석자 목록"
                    }
                },
                "required": ["date", "time"]
            }
        }
    }
]
 
async def process_with_agent(user_message: str, user_id: str) -> str:
    """AI 에이전트: 의도 분류 → 도구 호출 → 응답 생성"""
 
    messages = [
        {
            "role": "system",
            "content": (
                "당신은 회사 업무를 돕는 AI 비서입니다. "
                "카카오톡으로 들어온 요청을 분석하고 적절한 도구를 호출하세요. "
                "응답은 카카오톡에 표시되므로 간결하게 작성하세요 (200자 이내)."
            )
        },
        {"role": "user", "content": user_message}
    ]
 
    response = client.chat.completions.create(
        model="gpt-4o",
        messages=messages,
        tools=tools,
        tool_choice="auto"
    )
 
    message = response.choices[0].message
 
    # 도구 호출이 필요한 경우
    if message.tool_calls:
        for tool_call in message.tool_calls:
            func_name = tool_call.function.name
            func_args = json.loads(tool_call.function.arguments)
 
            # 실제 업무 시스템 호출
            result = await execute_business_function(func_name, func_args)
 
            messages.append(message)
            messages.append({
                "role": "tool",
                "tool_call_id": tool_call.id,
                "content": json.dumps(result, ensure_ascii=False)
            })
 
        # 결과를 기반으로 최종 응답 생성
        final_response = client.chat.completions.create(
            model="gpt-4o",
            messages=messages
        )
        return final_response.choices[0].message.content
 
    return message.content

3단계: 업무 시스템 연동

async def execute_business_function(func_name: str, args: dict) -> dict:
    """실제 업무 시스템(DB, API 등) 호출"""
 
    if func_name == "query_sales":
        # 예시: DB에서 매출 조회
        # result = await db.query("SELECT ... WHERE month = ?", args["month"])
        return {
            "month": args["month"],
            "total": 52000000,
            "prev_month_change": "+12%",
            "top_product": "클라우드 컨설팅"
        }
 
    elif func_name == "schedule_meeting":
        # 예시: Google Calendar API 호출
        return {
            "status": "scheduled",
            "date": args["date"],
            "time": args["time"],
            "meeting_link": "https://meet.google.com/xxx-yyy-zzz"
        }
 
    return {"error": "알 수 없는 기능입니다"}

실전 팁

메시지 파싱 주의사항

  • 카카오톡 메시지에는 이모지, 줄바꿈, 사진 설명 등이 포함될 수 있다
  • utterance 필드를 그대로 LLM에 전달하기 전에 기본 전처리(공백 정리, 길이 제한)를 수행하라
  • 카카오 오픈빌더의 스킬 서버 응답 시간 제한은 5초 — 복잡한 작업은 비동기 처리 후 알림톡으로 결과 전송

에러 핸들링 필수 패턴

@app.post("/webhook")
async def kakao_webhook(request: Request):
    try:
        body = await request.json()
        user_message = body["userRequest"]["utterance"]
        response_text = await process_with_agent(user_message, "user")
    except Exception as e:
        logger.error(f"처리 실패: {e}")
        response_text = "죄송합니다. 일시적인 오류가 발생했습니다. 잠시 후 다시 시도해주세요."
 
    return {"version": "2.0", "template": {"outputs": [{"simpleText": {"text": response_text}}]}}

보안 체크리스트

  • API 키는 환경 변수 또는 Secret Manager로 관리 (코드에 절대 하드코딩 금지)
  • 카카오 오픈빌더 서버 IP 화이트리스트 적용
  • 개인정보(이름, 전화번호 등)가 LLM API로 전송되지 않도록 PII 마스킹 처리
  • 대화 로그 보관 시 개인정보보호법 준수 (동의 확보, 보관 기간 설정)

비용 구조

월 5,000건 메시지 처리 기준:

항목예상 비용
알림톡 발송 (결과 응답)~40,000원 (건당 ~8원)
OpenAI API (GPT-4o)~$20 (~28,000원)
서버 (AWS t3.small)~$15 (~21,000원)
카카오 비즈 채널무료 (기본)
월 합계~89,000원

메시지당 약 18원. 담당자 인건비 대비 극도로 효율적이다.


결론

카카오톡 + AI 에이전트 조합은 한국 업무 환경에 최적화된 자동화 패턴이다. 카카오 오픈빌더의 스킬 서버와 LLM의 Function Calling을 결합하면, 별도 앱 개발 없이도 카톡 메시지 하나로 매출 조회, 미팅 예약, 문서 검색까지 처리하는 AI 비서를 구축할 수 있다.


이런 시스템을 우리 회사에도 도입하고 싶다면 → 기술 상담 신청

공유하기

우리 회사, 어디부터 자동화할 수 있을까?

무료 업무 진단으로 반복 업무를 찾아드립니다. 30분 통화로 월 몇 시간을 아낄 수 있는지 바로 확인하세요.

무료 진단 신청

관련 글

AI 자동화 인사이트를 받아보세요

새로운 가이드와 사례가 올라올 때 알려드립니다. 스팸 없이, 유용한 글만.