← 블로그 목록
가이드2026-06-04

ngrok 없이 로컬에서 음성 에이전트 띄우기 — 5분, ClawOps managed inbound

ngrok 없이 로컬에서 음성 에이전트 띄우기 — 5분, ClawOps managed inbound

음성 에이전트 dev/prototype 할 때 ngrok 셋업이 매번 불편. ClawOps 는 SIP inbound 를 자체 호스팅해서 로컬 프로세스가 ngrok 없이 즉시 inbound 받음. 노트북 한 대로 진짜 070 통화 받기.

0. 사전 준비

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/Linuxpython agent.py 직접 실행
StagingDocker 컨테이너 (laptop / dev 서버)동일 코드, ENV 만 staging
ProductionFly.io / Render / Railway shared-cpu-1x동일 코드, supervisor process

ClawOps WebSocket outbound 패턴이라 어디서든 동작. Kubernetes·VPS·serverless 다 OK.

8. 비교 — ngrok·Twilio·자체 SIP

항목ngrok + Twilio webhook자체 Asterisk + SIPClawOps
한국 070 발급❌ (Twilio)가능 (SIP 계약 별도)
셋업 시간30분 ~ 1시간2-4주5분
ngrok 의존✅ 필요
공인 IP 필요
다중 통화webhook 폭주 위험OKOK

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 도 사용 가능.

다음 단계

관련 글 더 보기

ClawOps AI 전화 API로 시작하기

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