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/numbers \
-H "Authorization: Bearer $CLAWOPS_KEY" \
-d '{"country":"KR","prefix":"070","webhook":"https://you.com/voice/inbound"}'
응답에 phone_number, sip_uri, created_at 이 들어온다. 카드 등록·약정 없이 즉시 발급된다.
옵션 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",
+ webhook="https://you.com/voice/inbound"
+ )
TwiML 흐름은 webhook + JSON action 으로 바뀐다. <Say> → tts payload, <Gather> → dtmf 이벤트, <Dial> → transfer action. 한국어 TTS 는 ClawOps 내장 보이스가 기본이고, 외부 TTS (ElevenLabs·OpenAI) 는 audio_url 로 스트리밍한다.
def handle_event(event):
if event["type"] == "call.started":
return {"action": "tts", "text": "안녕하세요, 예약 도와드릴게요."}
if event["type"] == "speech.final":
reply = my_agent.respond(event["text"])
return {"action": "tts", "text": reply}
if event["type"] == "call.ended":
save_transcript(event["transcript"], event["summary"])
OpenAI Realtime · Anthropic 모델은 ClawOps SIP 트렁크로 직결되어 양방향 오디오를 끌어 쓸 수 있다. media_url polling 없이 latency 가 한 hop 줄어든다.
5분 체크리스트
- ClawOps 가입 — 카드 없이 070 1개 발급 (
POST /v1/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-Clawops-SignatureHMAC-SHA256. 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 코드와 웹훅 연동 가이드.