← 블로그 목록
가이드2026-03-10

전화 봇 만들기: AI가 진짜로 전화 걸고 받는 봇 구축하기

전화 봇 만들기: AI가 진짜로 전화 걸고 받는 봇 구축하기

ClawOps - AI 전화 에이전트 플랫폼

챗봇은 이제 누구나 만듭니다. Slack 봇, 디스코드 봇, 카카오톡 챗봇... 근데 전화 봇은요?

한국어로 전화 걸고 받는 AI 봇을 만들려고 하면 갑자기 할 수 있는 게 없어집니다. 해외 서비스(Vapi, Retell, Bland)는 전부 한국 070 번호를 지원하지 않거든요. 한국 전화번호 없이 한국 고객한테 전화할 수가 없습니다.

이 글에서는 ClawOps MCP 서버를 써서 실제로 전화 걸고 받는 봇을 처음부터 끝까지 만들어보겠습니다. 전체 AI 전화 시스템 아키텍처가 궁금하다면 별도 글을 참고하세요.

필요한 것

  • ClawOps 계정
  • API Key
  • Node.js 18+ (MCP 서버용)
  • Python 3.9+ (SDK 사용 시)

Step 1: MCP 서버 세팅

MCP를 지원하는 AI 에이전트(Claude Desktop 등)에 전화 기능을 붙이려면 MCP 서버를 설정해야 합니다.

claude_desktop_config.json에 이거 추가하면 끝입니다:

{
  "mcpServers": {
    "call-me": {
      "command": "npx",
      "args": ["-y", "call-me-mcp"]
    }
  }
}

MCP 서버 전화 연동에 대한 자세한 설명은 여기를 참고하세요. 이러면 MCP 도구 4개가 붙습니다:

  • initiate_call — 전화 걸기
  • continue_call — 대화 이어가기
  • speak_to_user — 음성 전달
  • end_call — 전화 끊기

Step 2: 070 번호 발급

전화를 걸려면 발신 번호가 필요합니다. 예전에는 통신사 가서 서류 쓰고 2~3주 기다려야 했는데, API 한 줄이면 됩니다.

import requests

API_KEY = "your-api-key"
ACCOUNT_ID = "your-account-id"
BASE = f"https://api.claw-ops.com/v1/accounts/{ACCOUNT_ID}"
headers = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json"
}

# 070 번호 발급 — 이게 전부다
number = requests.post(f"{BASE}/numbers", headers=headers,
    json={"webhookUrl": "https://your-server.com/voice"}).json()
print(f"발급된 번호: {number['number']}")

curl로도 됩니다:

curl -X POST \
  https://api.claw-ops.com/v1/accounts/{accountId}/numbers \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"webhookUrl": "https://your-server.com/voice"}'

발급되는 번호는 한국 070-XXXX-XXXX 형식입니다. 070 번호 API 상세 가이드에서 더 자세한 내용을 볼 수 있습니다. SIP/2.0(RFC 3261) 기반이고 SRTP 암호화, DTMF 지원까지 다 됩니다. SIP 트렁크 계약이나 FreeSWITCH 세팅 같은 건 ClawOps가 알아서 처리합니다.

Step 3: 첫 번째 전화 걸기

번호가 생겼으니 이제 바로 발신 전화를 생성합니다. 에이전트를 따로 만들 필요 없이, 번호와 대상만 지정하면 됩니다.

# 전화 발신
call = requests.post(f"{BASE}/calls", headers=headers,
    json={
        "to": "01012345678",
        "from": number["number"],
        "webhookUrl": "https://your-server.com/status"
    }).json()
print(f"통화 ID: {call['callId']}")

ClawOps는 전화 인프라(SIP, 070번호, 통화 연결)를 제공합니다. 음성 처리(STT/TTS/LLM)는 개발자가 직접 선택합니다. 예시 SDK에서는 OpenAI Realtime API를 사용했고 이를 추천합니다. 국내 인프라(GCP 한국 리전 (서울))에서 처리돼서 레이턴시가 500ms 미만으로 나옵니다.

통화 결과는 이렇게 확인합니다:

# 통화 상세 조회
result = requests.get(f"{BASE}/calls/{call['callId']}", headers=headers).json()

Step 4: 수신 전화 처리 (Webhook)

발신만 되면 반쪽짜리입니다. 수신 전화도 처리해야 합니다.

ClawOps에서 웹훅을 설정하면 전화 상태가 바뀔 때마다 이벤트가 날아옵니다:

  • call.initiated — 전화 시작
  • call.ringing — 벨 울리는 중
  • call.answered — 상대가 받음
  • call.transcript — 실시간 전사
  • call.ended — 통화 종료
  • call.recording.ready — 녹음 파일 준비됨
  • call.analysis.ready — 통화 분석 완료

Flask로 웹훅 받는 예시입니다:

from flask import Flask, request

app = Flask(__name__)

@app.route("/webhook", methods=["POST"])
def handle_webhook():
    event = request.json

    if event["type"] == "call.answered":
        print(f"전화 받음: {event['call_id']}")
    elif event["type"] == "call.transcript":
        print(f"상대방: {event['text']}")
    elif event["type"] == "call.ended":
        print(f"통화 종료. 길이: {event['duration']}초")

    return {"ok": True}

이걸로 수신 전화가 오면 AI가 자동으로 응대하고, 통화 내용을 실시간으로 전사하고, 끝나면 녹음과 분석까지 받을 수 있습니다. 실제 봇 대화 시나리오를 설계하는 방법은 음성봇 시나리오 설계 가이드에서 다룹니다.

정리

전체 흐름을 다시 보면:

  1. MCP 서버 세팅 (npx -y call-me-mcp) — 1분
  2. 070 번호 발급 (API 한 줄) — 10초
  3. 발신 전화 생성 — 코드 5줄
  4. 웹훅으로 수신 전화 처리 — Flask 라우트 하나

가격은 Starter 월 19,900원(발신 60분, 수신 무제한 무료, 전화회선 1개)부터 시작하고, 발신 분당 116원, 수신은 무료입니다. 종량제는 발신 116원/분, SMS 17원/건. 약정 없고 언제든 해지 가능합니다.

한국에서 AI 전화 봇 만들 때 070 번호를 API로 발급해주는 서비스가 여기밖에 없어서 이걸 쓰게 됐습니다. 참고로 한국 인터넷전화 번호 체계는 과학기술정보통신부에서 관리하며, 통신 보안 기준은 한국인터넷진흥원(KISA)에서 정하고 있습니다. 직접 SIP 인프라 구축하면 최소 1~2주인데 이건 30분이면 끝납니다.

참고 링크

관련 글 더 보기

ClawOps AI 전화 API로 시작하기

070 번호 발급부터 AI 음성 통화까지, REST API 몇 줄이면 됩니다.