AI 자동 전화 시스템, 개발자가 직접 구축하는 법
AI 자동 전화 시스템, 개발자가 직접 구축하는 법

한번은 직접 다 만들어봤는데, 솔직히 다시 하고 싶진 않습니다.
AI 자동 전화 시스템이 뭔가 복잡해 보이지만, 구조 자체는 단순합니다. 레이어 5개가 순서대로 연결되는 파이프라인입니다. 문제는 각 레이어를 실제로 구현할 때 터지는 이슈들입니다.
전체 아키텍처
┌─────────────────────────────────────────────────────┐
│ 전화 상대방 │
└──────────────────────┬──────────────────────────────┘
│ PSTN/SIP
┌──────────────────────▼──────────────────────────────┐
│ [1] SIP Gateway │
│ SIP/2.0 (RFC 3261) · SRTP 암호화 · DTMF 처리 │
│ 070-XXXX-XXXX 번호 바인딩 · SBC 연동 │
└──────────────────────┬──────────────────────────────┘
│ 오디오 스트림 (RTP)
┌──────────────────────▼──────────────────────────────┐
│ [2] STT (Speech-to-Text) │
│ 음성 → 텍스트 변환 │
│ ex) 한국어 특화 STT 엔진 │
└──────────────────────┬──────────────────────────────┘
│ 텍스트
┌──────────────────────▼──────────────────────────────┐
│ [3] LLM (Language Model) │
│ 대화 맥락 유지 · 응답 생성 │
│ ex) gpt-4o │
└──────────────────────┬──────────────────────────────┘
│ 응답 텍스트
┌──────────────────────▼──────────────────────────────┐
│ [4] TTS (Text-to-Speech) │
│ 텍스트 → 음성 변환 │
│ ex) 한국어 TTS 엔진 │
└──────────────────────┬──────────────────────────────┘
│ 오디오 스트림 (RTP)
┌──────────────────────▼──────────────────────────────┐
│ [5] SIP Gateway (응답 전송) │
│ 생성된 음성을 상대방에게 스트리밍 │
└─────────────────────────────────────────────────────┘
한 사이클이 이겁니다: 상대방이 말하면 → SIP으로 오디오 수신 → STT로 텍스트 변환 → LLM이 응답 생성 → TTS로 음성 변환 → SIP으로 송신. 이 루프가 500ms 안에 돌아야 자연스러운 대화가 됩니다. 음성 AI 레이턴시 최적화에서 이 지연 시간을 줄이는 기법을 다룹니다.
레이어별 설명
[1] SIP Gateway — 제일 고통스러운 부분
SIP(Session Initiation Protocol, RFC 3261)은 인터넷 전화의 표준 프로토콜입니다. 한국에서 070 번호를 쓰려면 SIP 트렁크를 통신사에서 받아야 합니다. 한국 SIP API 연동 가이드에서 더 상세하게 다뤘습니다.
직접 구축하면 이런 걸 다 처리해야 합니다:
- SBC(Session Border Controller) 연동: 통신사 SBC랑 SDP 네고시에이션. 코덱 호환, 미디어 포트 협상이 패킷 레벨에서 안 맞으면 통화 자체가 안 됩니다
- NAT Traversal: 서버가 사설 IP 뒤에 있으면 SIP INVITE가 제대로 라우팅 안 됩니다. STUN/TURN 세팅 필수입니다
- SRTP 암호화: 통화 내용 암호화. 보안을 위해 필수입니다
- DTMF 지원: ARS 메뉴 선택 시 톤 신호 처리
보통 FreeSWITCH나 Asterisk를 설치해서 세팅하는데, 이것만 3~5일 잡아야 합니다. SIP 디버깅은 tcpdump 뜨면서 SDP 패킷 분석하는 거라 경험 없으면 더 오래 걸립니다.
[2] STT — 한국어가 문제입니다
영어는 Whisper로 충분한데 한국어는 다릅니다. 테스트해보면 Whisper 한국어 인식률이 기대 이하입니다. 특히 전화 음질(8kHz, narrow-band)에서는 더 떨어집니다.
한국어 전화 음성에 최적화된 STT 엔진을 사용하면 정확도가 확실히 높습니다. 실시간 스트리밍 STT를 지원하는 엔진이어야 전화 통화에 바로 붙일 수 있습니다.
[3] LLM — 레이턴시가 관건입니다
GPT-4o 기준으로, 응답 생성에 200~400ms 걸립니다. 스트리밍 응답으로 첫 토큰이 오는 즉시 TTS로 넘기면 체감 레이턴시를 줄일 수 있습니다. system prompt에 대화 시나리오를 잘 잡아주는 게 중요합니다.
[4] TTS — 자연스러움
한국어 음성 자연스러움 기준으로 최적의 TTS 엔진을 선택해야 합니다. 실시간 스트리밍 합성이 되어야 레이턴시가 안 쌓입니다.
[5] 다시 SIP — 응답 전송
TTS에서 나온 오디오를 RTP 패킷으로 포장해서 상대방한테 보냅니다. 코덱 매칭, 패킷 타이밍, 지터 버퍼 관리까지 신경 써야 합니다.
직접 구축 vs ClawOps 전화 인프라 API
| 구성요소 | 직접 구축 | ClawOps |
|---|---|---|
| SIP 서버 | FreeSWITCH 설치 + SBC 연동 (3~5일) | API 한 줄 |
| 070 번호 | 통신사 계약 (1~2일) | POST /v1/accounts/{accountId}/numbers |
| STT/TTS | 개별 연동 + 스트리밍 파이프라인 (2~3일) | 개발자가 직접 선택 (예시 SDK: OpenAI Realtime API 사용, 추천) |
| 보안 | SRTP 직접 설정 + PIPA 검토 | 기본 적용 (국내 서버 데이터 처리, SRTP 암호화) |
| 전체 소요 | 최소 1~2주 | 10분 |
Python으로 하면 이렇습니다:
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']}")
# 전화 발신
call = requests.post(f"{BASE}/calls", headers=headers,
json={
"to": "01012345678",
"from": number["number"],
"webhookUrl": "https://your-server.com/status"
}).json()
SIP 레이어 전체가 API로 제공되어서 SDP 네고시에이션이나 SRTP 같은 건 신경 안 써도 됩니다. STT/TTS/LLM은 개발자가 직접 선택해서 연동합니다. 예시 SDK에서는 OpenAI Realtime API를 사용했고 이를 추천합니다. webhook으로 call.transcript, call.ended, call.recording.ready 이벤트 받으면 통화 후처리도 자동화할 수 있습니다.
발신 분당 116원이고, 수신은 무료입니다. Starter가 월 19,900원(60분, 전화회선 1개), Growth가 49,900원(300분, 전화회선 3개, 동시통화 3건), Business가 149,000원(1000분, 전화회선 10개, 동시통화 10건). 수신통화 무제한 무료. 약정 없습니다.
직접 구축해보면 왜 전화 인프라 API가 필요한지 바로 체감됩니다. SIP 서버 구축은 한번 해보는 건 추천하는데, 프로덕션에서 유지보수까지 감당하려면 솔직히 빡셉니다. ClawOps는 전화 인프라만 제공하고, STT/TTS/LLM은 개발자가 원하는 걸 선택해서 사용하는 구조입니다.
참고 링크
관련 글 더 보기
음성 AI 레이턴시 300ms의 벽: 실시간 통화 품질 최적화 가이드
AI 음성 에이전트의 레이턴시를 300ms 이하로 최적화하는 방법. STT, LLM, TTS 각 단계별 최적화 전략.
가이드070 번호 API: REST API 한 줄로 전화번호 발급받기
070 인터넷전화 번호를 REST API 한 줄로 발급받는 방법. 기존 통신사 계약 방식 대비 10초 만에 번호를 발급받고 바로 전화를 걸 수 있습니다.
가이드한국에서 SIP API 사용하기: 070 번호 연동 가이드
한국에서 SIP API로 070 번호를 연동하는 방법을 정리합니다. SIP 프로토콜 기초, 한국 SIP 트렁크 현황, NAT/SBC/SRTP 이슈와 해결 방법을 다룹니다.
가이드AI 전화 에이전트의 감정 인식: 화난 고객을 알아채고 톤을 바꾸는 법
AI 전화 에이전트가 고객의 감정을 실시간으로 인식하고 톤을 조절하는 기술을 소개합니다. 감정 분석 API부터 프롬프트 전략까지.
가이드AI 전화 에이전트 테스트 자동화: 배포 전 통화 품질을 검증하는 법
AI 전화 에이전트를 배포하기 전에 자동화된 테스트로 통화 품질을 검증하는 방법을 소개합니다. 시나리오 테스트부터 부하 테스트까지.