ngrok 없이 로컬에서 음성 에이전트 띄우기 — 5분, ClawOps managed inbound
ngrok 없이 로컬에서 음성 에이전트 띄우기 — 5분, ClawOps managed inbound
음성 에이전트 dev/prototype 할 때 ngrok 셋업이 매번 불편. ClawOps 는 SIP inbound 를 자체 호스팅해서 로컬 프로세스가 ngrok 없이 즉시 inbound 받음. 노트북 한 대로 진짜 070 통화 받기.
0. 사전 준비
- Python 3.10+
- ClawOps 가입 (https://claw-ops.com)
- OpenAI/Anthropic/Gemini API key 하나
1. ClawOps SDK 설치
pip install "clawops[agent,openai]"
2. 코드 — agent.py
from clawops import ClawOps
from clawops.agent import ClawOpsAgent, OpenAIRealtime
client = ClawOps() # CLAWOPS_API_KEY env
number = client.numbers.create() # 070 번호 발급
print(f"이 070 으로 전화 걸어보세요: {number.number}")
ClawOpsAgent(
from_=number.number,
session=OpenAIRealtime(
system_prompt=(
"당신은 데모 에이전트입니다. "
"한국어로 짧고 친절하게 응답하세요. "
"주제 자유. 30초 이상 침묵 시 hang_up."
),
language="ko-KR",
voice="alloy",
),
).serve()
3. 실행
export CLAWOPS_API_KEY="sk_..."
export OPENAI_API_KEY="sk-..."
python agent.py
콘솔 출력:
이 070 으로 전화 걸어보세요: 07052358010
[agent] Connected to ClawOps. Listening for inbound calls.
휴대폰으로 발급된 070 번호로 전화 걸면 AI 가 받는다. ngrok·webhook·Flask 설치 없음.
4. 원리 — ClawOps managed inbound
[휴대폰] → 070 다이얼
↓ PSTN
[ClawOps SIP gateway, GCP 서울]
↓ WebSocket persistent connection (당신 로컬에서 outbound)
[당신의 Python 프로세스 (laptop, 사무실, 어디든)]
↓
[OpenAI Realtime API (or Gemini Live, Anthropic)]
당신 프로세스가 ClawOps 에 outbound WebSocket 으로 연결 → ClawOps 가 inbound SIP 트래픽을 그 WebSocket 으로 forward.
즉:
- 당신 머신에 inbound port 열 필요 X
- 공인 IP 필요 X
- ngrok 필요 X
- 방화벽·NAT 신경 X
WebSocket outbound 만 가면 NAT 뒤든 회사 방화벽 뒤든 LAN 어디서든 작동.
5. 다중 동시 통화
serve() 가 동시 통화 N 개를 한 프로세스에서 처리합니다. 들어오는 통화마다 독립 세션이 생성됩니다.
agent = ClawOpsAgent(
from_=number.number,
session=OpenAIRealtime(...),
)
agent.serve()
동시 통화 수는 ClawOps 요금제 한도(예: Business 동시통화 10) 안에서 처리됩니다.
6. 여러 번호 동시 — multiplex
import asyncio
async def run_for(phone_number, prompt):
await ClawOpsAgent(
from_=phone_number,
session=OpenAIRealtime(system_prompt=prompt, language="ko-KR"),
).serve()
async def main():
# 5개 매장, 각자 070 + 시스템 프롬프트
await asyncio.gather(
run_for("07011110001", "강남점 안내"),
run_for("07011110002", "역삼점 안내"),
# ...
)
asyncio.run(main())
한 머신에서 N 개 070 동시 호스팅.
7. 개발 → production 흐름
| 단계 | 환경 | 비고 |
|---|---|---|
| Dev | 로컬 macOS/Linux | python agent.py 직접 실행 |
| Staging | Docker 컨테이너 (laptop / dev 서버) | 동일 코드, ENV 만 staging |
| Production | Fly.io / Render / Railway shared-cpu-1x | 동일 코드, supervisor process |
ClawOps WebSocket outbound 패턴이라 어디서든 동작. Kubernetes·VPS·serverless 다 OK.
8. 비교 — ngrok·Twilio·자체 SIP
| 항목 | ngrok + Twilio webhook | 자체 Asterisk + SIP | ClawOps |
|---|---|---|---|
| 한국 070 발급 | ❌ (Twilio) | 가능 (SIP 계약 별도) | ✅ |
| 셋업 시간 | 30분 ~ 1시간 | 2-4주 | 5분 |
| ngrok 의존 | ✅ 필요 | ❌ | ❌ |
| 공인 IP 필요 | ❌ | ✅ | ❌ |
| 다중 통화 | webhook 폭주 위험 | OK | OK |
9. 비용
- ClawOps Trial: 무료, 카드 X (발신 10분 포함)
- Individual ₩19,000/월
- OpenAI Realtime / Gemini Live: 통화 시간만큼
10. 한 단계 더 — Anthropic Claude + ClawOps
OpenAI Realtime 외에도:
from clawops.agent.pipeline import PipelineSession, DeepgramSTT, AnthropicLLM, ElevenLabsTTS
ClawOpsAgent(
from_=number.number,
session=PipelineSession(
system_prompt="친절한 상담원입니다.",
stt=DeepgramSTT(language="ko"),
llm=AnthropicLLM(model="claude-sonnet-4-6"),
tts=ElevenLabsTTS(),
),
).serve()
Pipeline 모드로 STT/LLM/TTS 자유 조합. Anthropic Claude 도 사용 가능.
다음 단계
관련 글 더 보기
Python AI 전화 SDK — 한국 070 번호로 voice agent 5분 만들기 (ngrok 없이)
Python 한 줄 `pip install clawops[agent,openai]` 로 한국 070 번호 발급 + OpenAI Realtime 음성 에이전트 5분 셋업. ngrok·터널링 없이 로컬에서 바로 받기.
가이드Retell AI 사용자가 ClawOps 070 추가하기 — 한국 시장 진출 5분 가이드
Retell AI voice agent 에 한국 070 번호를 추가하는 마이그레이션 가이드. SIP 직접연결 hybrid 또는 ClawOps Pipeline 으로 풀 전환.
가이드Vapi 사용자가 ClawOps 070 추가하기 — SIP 직접연결로 한국 시장 진출 5분
Vapi voice agent 에 한국 070 번호를 추가하는 가이드. 풀 마이그레이션 또는 SIP 직접연결 하이브리드. 코드 diff + 비용 비교.
가이드OpenClaw 에 한국 070 번호 붙이기 — 오픈소스 컴퓨터 에이전트 + 전화
OpenClaw(오픈소스 computer-use 에이전트)에 한국 070 번호 전화 도구를 붙이는 가이드. MCP 서버 통합 + ClawOps 070 발급 + 실전 시나리오.
가이드Claude Code 에 한국 070 번호 붙이기 — MCP 한 줄로 'thomi 한테 전화 걸어' 가능하게
Claude Code(터미널 CLI) 안에서 한국 070 번호로 직접 전화 걸고 받게 만드는 가이드. MCP 서버 설정 + ClawOps 070 번호 발급 + Claude Code agent 가 부르는 실제 프롬프트.