← 블로그 목록

Gemini Live API 로 한국어 voice agent 5분 만들기 — ClawOps 070 직접 연결

Google Gemini Live API + ClawOps 070 번호 인프라로 한국어 음성 에이전트를 5분 만에 만드는 가이드. 코드 30줄 + 시스템 프롬프트 예시.

Gemini Live API 로 한국어 voice agent 5분 만들기 — ClawOps 070 직접 연결

Google Gemini Live API 는 한국어 발음 자연도가 OpenAI Realtime 보다 좋고 단가도 저렴. 하지만 한국 사용자에게 진짜로 닿으려면 한국 070 번호가 필요한데, Google 은 telephony 인프라를 직접 제공 안 한다. ClawOps 070 + Gemini Live 직접 연결로 30줄 코드 + 5분에 한국어 voice agent 완성.

0. 사전 준비

1. ClawOps SDK 설치

pip install "clawops[agent,gemini]"

agent extras: 음성 에이전트 런타임 (SIP/WebRTC bridge, RTP 인코딩, turn-taking). gemini extras: Gemini Live API 연동.

2. 환경변수

export CLAWOPS_API_KEY="sk_..."
export GOOGLE_API_KEY="AIzaSy..."

3. 코드 — agent.py

import asyncio
from clawops import ClawOps
from clawops.agent import ClawOpsAgent, GeminiRealtime

client = ClawOps()                                 # CLAWOPS_API_KEY 자동 인식
number = client.numbers.create()                   # 070 번호 즉시 발급
print(f"발급된 070 번호: {number.number}")

agent = ClawOpsAgent(
    from_=number.number,
    session=GeminiRealtime(
        voice="Kore",                              # 한국어 자연 보이스
        language="ko",
        system_prompt=(
            "당신은 ABC 회사의 인바운드 상담원입니다.\n"
            "- 제품 문의·가격·일정 질문을 짧고 친절하게 응대\n"
            "- 견적이 필요하면 회사명·연락처·예산을 받아 메모\n"
            "- 답변 어려운 건 담당자 연결 약속 후 hang_up\n"
            "- 한국어로만 응대, 영어 섞지 말 것"
        ),
    ),
)
asyncio.run(agent.serve())                          # ngrok 없이 바로 inbound 수신

agent.serve() 만 호출하면:

  1. ClawOps 가 발급된 070 으로 들어오는 모든 inbound SIP 트래픽을 자동 라우팅
  2. WebSocket bridge 로 Gemini Live API 에 음성 stream 전달
  3. Gemini 응답을 다시 SIP RTP 로 변환해 통화에 회신
  4. turn-taking (말 끊김·동시 발화) 자동 처리

4. 테스트 통화

python agent.py

다른 휴대폰에서 출력된 070 번호로 전화 → AI 상담원이 응답.

5. Outbound (전화 걸기)

발신도 같은 에이전트 인스턴스로 겁니다. agent.call() 을 호출하면 그 통화가 위에서 만든 Gemini Live 세션으로 연결됩니다.

import asyncio
from clawops.agent import ClawOpsAgent, GeminiRealtime

agent = ClawOpsAgent(
    from_=number.number,
    session=GeminiRealtime(
        voice="Kore",
        language="ko",
        system_prompt=(
            "당신은 OOO 회사의 영업담당입니다.\n"
            "내일 오후 2시 시연 약속을 잡아주세요.\n"
            "시간 안 맞으면 다른 시간대 받아오세요.\n"
            "5분 안에 마무리하고 통화를 종료하세요."
        ),
    ),
)

async def main():
    call = await agent.call("01012345678")   # connect() 는 자동으로 먼저 수행된다
    print(f"call_id: {call.call_id}")
    await agent.serve()                       # 통화가 끝날 때까지 세션 유지

asyncio.run(main())

시스템 프롬프트는 인스턴스 단위입니다. 고객마다 다른 내용으로 대량 발신해야 한다면, 인스턴스를 매번 새로 띄우는 대신 콘솔에서 만든 매니지드 에이전트에 agent_id 로 거는 방식이 적합합니다. 그 경우 통화별 지시는 call_context 로 넘깁니다.

client.calls.create(
    to="01012345678",
    from_=number.number,
    agent_id=SALES_AGENT_ID,
    call_context={"instruction": "내일 오후 2시 시연 약속을 잡아주세요."},
)

6. 통화 종료 후 — 요약·전사

# 통화 끝난 뒤 (callback webhook 또는 polling)
result = client.calls.get(call.call_id)
print(result.status)              # "completed"
print(result.recording_url)       # 녹음 다운로드 경로

summary = client.calls.get_summary(call.call_id)   # AI 가 생성한 한국어 요약
transcript = client.calls.get_transcript(call.call_id)  # 전사 결과

add_on=summary 활성화시 통화 요약이 자동 생성된다 (₩10/분).

7. Gemini Live vs OpenAI Realtime (한국어 통화 기준)

항목Gemini LiveOpenAI Realtime
한국어 보이스 자연도매우 우수 (Aoede/Puck)우수 (alloy/verse)
latency~600ms~700ms
input 가격약 50%기준
audio output 가격약 40%기준
함수 호출지원 (tools)지원 (tools)
한국 전화 지원❌ 직접 안 됨 → ClawOps 필요❌ 직접 안 됨 → ClawOps 필요

8. 작동 원리

[한국 사용자 휴대폰]
   ↕ PSTN
[한국 통신사 070]
   ↕ SIP/2.0 + SRTP
[ClawOps SIP gateway, GCP 서울]
   ↕ WebSocket (RTP ↔ PCM)
[Gemini Live API, Google]
   ↕ inference
[Gemini 2.0 Flash Realtime]

9. 비용 (월 100분 통화 기준)

  • ClawOps Individual: ₩19,000/월 (발신 100분 포함, 수신 1,000분)
  • Gemini Live: 무료 quota 안에서 시작 가능, 초과시 기본 약 $0.0001/sec output audio
  • 총합: 5만원 이내에서 한국어 voice agent 1개 운영 가능

다음 단계

이전 글

AI 전화로 본인인증 구현하기: 070 수신으로 고객 동의를 자동화하는 법

ClawOps AI 전화 API로 시작하기

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