Twilio 한국 070 안 된다 — ClawOps로 5분 마이그레이션
Twilio Console에서 Phone Numbers → Buy a Number → Country: Korea 를 선택하면 "No numbers available" 이 뜬다. Toll-Free·Mobile·Local 모두 같다. 빌더 입장에서 한국 진출이 막힌다. 이 글은 Twilio 코드 베이스를 그대로 두면서 한국 070 번호와 통화 흐름만 ClawOps 로 옮기는 hybrid 패턴, 그리고 전면 마이그레이션 코드 diff 를 정리한다.
왜 Twilio 가 한국 070 을 못 주는가
한국 070 번호는 방통위(KCC) 별정통신사업자 등록 + KT·SKT·LG U+ 와의 상호접속 계약이 있어야 발급 가능하다. Twilio 는 한국 별정통신 등록이 없다. Vonage·Plivo·MessageBird·Telnyx 도 동일하다. Vapi·Retell 같은 음성 AI 플랫폼은 내부적으로 Twilio·Telnyx 위에 얹혀 있기 때문에 한국 번호 카탈로그가 비어 있다. 즉 "Twilio alternative for Korea" 를 찾는 건 다른 글로벌 CPaaS 를 갈아끼우는 게 아니라, 한국 별정통신사업자가 운영하는 SIP/REST 인프라를 직접 붙여야 한다는 뜻이다.
옵션 1 — Hybrid: Twilio 글로벌 + ClawOps 한국 070
기존 미국·유럽 번호는 Twilio 에 유지하고, 한국 번호만 ClawOps 에서 발급한다. 통화 도착 시 양쪽이 같은 라우터로 webhook 을 보내게 만들어 음성 AI agent 코드는 한 번만 작성한다.
# 라우터 한 개로 양쪽 받기
@app.post("/voice/inbound")
def inbound(req: Request):
provider = "twilio" if "X-Twilio-Signature" in req.headers else "clawops"
payload = normalize(req.json(), provider=provider)
return route_to_agent(payload)
ClawOps 한국 070 발급:
curl -X POST https://api.claw-ops.com/v1/accounts/$CLAWOPS_ACCOUNT_ID/numbers \
-H "Authorization: Bearer $CLAWOPS_KEY" \
-H "Content-Type: application/json" \
-d '{"webhookUrl":"https://you.com/voice/inbound"}'
070 번호는 풀에서 자동 발급된다. 응답에 발급된 번호 정보가 들어오며, 카드 등록·약정 없이 즉시 발급된다.
옵션 2 — 풀 마이그레이션: Twilio Voice → ClawOps
Twilio Voice API 호출 패턴을 ClawOps SDK 로 1:1 교체한다. 의미 매핑이 거의 직역이라 diff 가 짧다.
- from twilio.rest import Client
- client = Client(sid, token)
- client.calls.create(
- to="+8210xxxxxxxx",
- from_="+1xxxxxxxxxx",
- url="https://you.com/twiml"
- )
+ from clawops import ClawOps
+ client = ClawOps(api_key=os.environ["CLAWOPS_KEY"])
+ client.calls.create(
+ to="+8210xxxxxxxx",
+ from_="+8270xxxxxxxx",
+ url="https://you.com/voice/inbound"
+ )
TwiML 흐름은 거의 그대로 옮겨진다. ClawOps 수신 webhook 계약은 TwiML 호환 XML 마크업(VoiceML)이라 <Say>·<Gather>·<Dial>·<Record> 를 그대로 쓴다. 수신 전화가 들어오면 ClawOps 가 webhook URL 로 application/x-www-form-urlencoded POST(CallId, From, To, CallStatus, Direction)를 보내고, 서버는 Content-Type: application/xml 로 <Response> 를 응답한다.
def inbound(req: Request):
# req.form: CallId, From, To, CallStatus=in-progress, Direction=inbound
return Response(content="""<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Say language="ko">안녕하세요, 예약 도와드릴게요.</Say>
<Gather numDigits="1" timeout="5" action="https://you.com/voice/menu">
<Say language="ko">상담은 1번, 안내는 2번을 눌러주세요.</Say>
</Gather>
</Response>""", media_type="application/xml")
AI 에이전트로 실시간 응대하려면 <Connect><Stream url="wss://..."/></Connect> 로 통화 오디오(μ-law 8k 양방향)를 당신의 WebSocket 에 직결한다. 그 소켓 뒤에서 OpenAI Realtime·Anthropic 등 원하는 모델을 붙이면 된다. polling 없이 latency 가 한 hop 줄어든다.
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Connect>
<Stream url="wss://you.com/voice/stream"/>
</Connect>
</Response>
5분 체크리스트
- ClawOps 가입 — 카드 없이 070 1개 발급 (
POST /v1/accounts/{accountId}/numbers). - Twilio inbound webhook URL 과 동일 경로를 ClawOps webhook 에 등록.
- 위
normalize()어댑터로 양쪽 payload 통일. - 발급된 070-XXXX-XXXX 로 직접 전화 걸어서 agent 응답 확인.
- 통화 종료 후 webhook
summarypayload 가 DB 에 떨어지는지 확인.
기존 미국 트래픽은 Twilio 그대로, 한국 트래픽만 ClawOps. 코드 한 파일(라우터)만 건드린다.
SIP 직접 연결 — Asterisk·FreeSWITCH 운영 팀
SDK 없이 SIP 트렁크만 쓰고 싶다면 ClawOps 콘솔에서 SIP credential 을 발급받아 Asterisk pjsip.conf 또는 FreeSWITCH external profile 에 등록한다. INVITE 가 070 으로 들어오고, BYE 후 transcript webhook 이 별도로 도착한다. 자체 RTP 미디어 처리·자체 STT 파이프라인이 있는 팀에 맞는다.
자주 막히는 곳
- From 번호 포맷: 한국 발신은 반드시 E.164 (
+8270...). 국내 형식 (070-...) 으로 보내면 ClawOps API 가 400 으로 거절한다. - Webhook 서명 검증: ClawOps 는 번호에 서명 키가 등록돼 있으면
X-Signature헤더를 보낸다. Twilio 검증 로직과 분기 처리. - STT 언어 강제: 한국어 통화에 다국어 모델을 강제하면 정확도가 떨어진다.
lang="ko"명시. - DTMF vs Speech: 본인 인증·메뉴 분기는 DTMF 가 안전하다. 음성 인식 단독 의존 금지.
Twilio 코드 베이스를 버릴 필요 없다. 한국 번호와 한국어 음성 부분만 ClawOps 로 가져와라. 5분이면 070 이 받는다.
claw-ops.com
관련 글 더 보기
한국 SMS/LMS/MMS API 완벽 가이드: Python으로 문자 보내기
한국에서 SMS, LMS, MMS를 API로 발송하는 방법. ClawOps Python SDK로 단문·장문·이미지 문자를 보내고, 수신 웹훅으로 자동 응답하는 실전 가이드입니다.
가이드웹훅으로 전화 자동화 구현하기: Python + FastAPI 실전 코드
Python과 FastAPI로 전화 웹훅 서버를 구축하는 실전 가이드. CRM 연동, 주문 확인 전화, 부재중 알림 등 비즈니스 자동화 시나리오를 코드로 구현합니다.
가이드ClawOps Node.js SDK 완전 가이드: TypeScript로 AI 전화 에이전트 만들기
ClawOps Node.js/TypeScript SDK로 AI 음성 에이전트를 구축하는 방법. 설치부터 REST API, AI Agent, Tool 등록, MCP 연동까지 실전 코드 예제와 함께 안내합니다.
가이드AI 전화 에이전트에 Tool 연동하기: 예약 조회, DB 검색, 외부 API 호출
ClawOps Voice Agent SDK의 Tool 등록 기능으로 AI 전화 에이전트가 DB 조회, 예약 확인, 외부 API 호출을 수행하게 만드는 방법. Python/Node.js 실전 코드 포함.
가이드통화 녹음 전사 & AI 요약 API: 상담 내용을 자동으로 정리하는 법
ClawOps의 통화 전사(Transcript)와 AI 요약(Summary) API로 상담 통화를 텍스트로 변환하고 핵심 내용을 자동 추출하는 방법. Python/Node.js 코드와 웹훅 연동 가이드.