← 블로그 목록
가이드2026-05-21

AI 전화 에이전트 Call Transfer 구현 가이드: AI가 상담원에게 전화를 넘기는 법

AI 전화 에이전트 Call Transfer 구현 가이드: AI가 상담원에게 전화를 넘기는 법

ClawOps - AI 전화 에이전트 플랫폼

AI 전화 에이전트를 도입할 때 가장 자주 받는 질문이 있습니다: "AI가 처리 못 하는 건 어떻게 하나요?"

답은 Call Transfer(통화 전환)입니다. AI가 대화하다가 복잡한 문의, VIP 고객, 불만 사항을 인식하면 실시간으로 사람 상담원에게 전화를 넘깁니다. 고객은 전화를 끊고 다시 걸 필요 없이, 같은 통화에서 자연스럽게 상담원과 연결됩니다.

ClawOps Voice Agent SDK는 Blind Transfer, Warm Transfer, 전환 후 AI 복귀까지 3가지 모드를 지원합니다.

Call Transfer 모드 비교

모드동작적합한 상황
Blind Transfer즉시 전환, AI 세션 종료단순 연결 (내선 전환, 부서 연결)
Warm Transfer상담원에게 먼저 안내 후 고객 연결VIP 고객, 맥락 전달 필요 시
전환 후 복귀상담원 통화 종료 후 AI가 다시 대화전문가 상담 후 후속 안내

기본 설정: Transfer Tool 활성화

BuiltinTool.TRANSFER_CALL을 활성화하면 AI가 프롬프트에 따라 자동으로 전환을 판단합니다.

Python

from clawops.agent import ClawOpsAgent, OpenAIRealtime, BuiltinTool
import asyncio

agent = ClawOpsAgent(
    from_="07012341234",
    session=OpenAIRealtime(
        system_prompt="""고객 상담 AI입니다.
다음 경우 상담원에게 전환하세요:
- 고객이 상담원 연결을 요청할 때
- 환불/결제 관련 복잡한 문의
- 고객이 화가 나있을 때
상담원 번호: 01012345678""",
        voice="marin",
        language="ko",
    ),
    builtin_tools=[BuiltinTool.HANG_UP, BuiltinTool.TRANSFER_CALL],
)

asyncio.run(agent.serve())

Node.js

import { ClawOpsAgent, OpenAIRealtime, BuiltinTool } from '@teamlearners/clawops/agent';

const agent = new ClawOpsAgent({
  from: '07012341234',
  session: new OpenAIRealtime({
    systemPrompt: `고객 상담 AI입니다.
다음 경우 상담원에게 전환하세요:
- 고객이 상담원 연결을 요청할 때
- 환불/결제 관련 복잡한 문의
- 고객이 화가 나있을 때
상담원 번호: 01012345678`,
    voice: 'marin',
    language: 'ko',
  }),
  builtinTools: [BuiltinTool.HANG_UP, BuiltinTool.TRANSFER_CALL],
});

await agent.serve();

이제 고객이 "상담원 연결해주세요"라고 하면, AI가 자동으로 transfer_call 도구를 호출해 01012345678로 전환합니다.

Blind Transfer: 즉시 전환

가장 간단한 전환입니다. 고객을 대상 번호로 즉시 연결하고, AI 세션은 종료됩니다.

# 이벤트 핸들러에서 직접 호출 (프로그래밍 방식)
@agent.on("call_start")
async def on_call_start(call):
    # 특정 조건에서 즉시 전환
    if should_transfer(call.from_number):
        await call.transfer("01012345678")
// Node.js
agent.on('call_start', async (call) => {
  await call.transfer('01012345678');
});

적합한 상황:

  • 부서 연결 (영업부, 기술지원부)
  • 내선번호 전환
  • 단순한 상담원 연결 요청

Warm Transfer: 안내 후 전환

상담원이 전화를 받으면 whisper 메시지를 먼저 들려줍니다. 고객은 이 메시지를 들을 수 없고, 연결 대기 중에는 대기 음악이 재생됩니다.

await call.transfer(
    "01012345678",
    mode="warm",
    whisper="VIP 고객님이십니다. 주문 번호 A1234에 대한 환불 문의입니다.",
)
// Node.js
await call.transfer('01012345678', {
  mode: 'warm',
  whisper: 'VIP 고객님이십니다. 주문 번호 A1234에 대한 환불 문의입니다.',
});

Warm Transfer 흐름:

  1. AI가 고객에게 "상담원에게 연결해드리겠습니다. 잠시만 기다려주세요." 안내
  2. 고객에게 대기 음악 재생
  3. 상담원에게 전화 연결
  4. 상담원이 whisper 메시지를 들음 (고객은 못 들음)
  5. 상담원이 전화를 받으면 고객과 연결

Context 전달

whisper 외에도 구조화된 데이터를 webhook으로 전달할 수 있습니다:

await call.transfer(
    "01012345678",
    mode="warm",
    whisper="VIP 고객입니다.",
    hold_media="moh",        # 대기 음악 ("moh" 또는 "silence")
    context={
        "customer_name": "홍길동",
        "order_id": "ORD-20260521-001",
        "priority": "high",
        "issue": "환불 요청",
    },
)

상담원 측 시스템이 이 context를 webhook으로 수신해 화면에 고객 정보를 바로 표시할 수 있습니다.

전환 후 AI 복귀

전환된 통화가 끝나면 AI가 다시 고객과 대화를 이어갑니다. 전문 상담원과 통화 후 AI가 후속 안내를 하는 시나리오에 적합합니다.

await call.transfer(
    "01012345678",
    after_transfer="return",  # 기본값: "terminate"
)

시나리오 예시:

  1. AI가 기본 상담 진행
  2. 전문가 상담 필요 → 상담원에게 전환 (after_transfer="return")
  3. 상담원과 고객이 통화
  4. 상담원이 통화 종료
  5. AI가 다시 돌아와 "상담원과의 통화가 종료되었습니다. 추가로 도와드릴 내용이 있으신가요?"

전체 파라미터 레퍼런스

파라미터타입기본값설명
tostr(필수)전환할 전화번호
modestr"blind""blind": 즉시 전환, "warm": whisper 후 전환
after_transferstr"terminate""terminate": AI 세션 종료, "return": AI가 다시 대화 이어감
hold_mediastr"moh"전환 중 고객 대기 음원. "moh": 대기 음악, "silence": 무음
whisperstrNoneWarm 모드에서 상담원에게 전달할 안내 (고객은 못 들음)
contextdictNone구조화 데이터 (webhook으로 전달)
caller_idstrNone전환 발신 시 표시할 발신자 번호
timeoutint30대상 응답 대기 시간 (초)

실전 시나리오: 온라인 쇼핑몰 CS

from clawops.agent import ClawOpsAgent, OpenAIRealtime, BuiltinTool
import asyncio

agent = ClawOpsAgent(
    from_="07012341234",
    session=OpenAIRealtime(
        system_prompt="""온라인 쇼핑몰 CS AI입니다.

처리 가능한 업무:
- 주문 상태 조회
- 배송 추적
- 영업시간/매장 안내
- 간단한 FAQ 응대

상담원 전환 조건:
- 환불/교환 요청 → 환불팀 (01011112222)
- 결제 오류 → 결제팀 (01033334444)
- 고객 불만/화남 → 고객센터장 (01055556666)
- 고객이 직접 상담원을 요청

전환 시 반드시 Warm Transfer로 맥락을 전달하세요.""",
        voice="marin",
        language="ko",
    ),
    builtin_tools=[BuiltinTool.HANG_UP, BuiltinTool.TRANSFER_CALL],
)

@agent.tool
async def check_order(order_id: str) -> str:
    """주문 상태를 확인합니다."""
    return f"주문 {order_id}: 배송 중 (내일 도착 예정)"

@agent.on("call_start")
async def on_start(call):
    print(f"[CS] 전화 수신: {call.from_number}")

@agent.on("call_end")
async def on_end(call):
    print(f"[CS] 통화 종료: {call.call_id} ({call.duration:.1f}초)")

asyncio.run(agent.serve())

이 설정으로:

  • 주문 조회, FAQ는 AI가 직접 처리
  • "환불해주세요" → 환불팀으로 Warm Transfer (맥락 전달)
  • "사람이랑 얘기하고 싶어요" → 고객센터장으로 전환

Call Transfer 설계 팁

1. 전환 조건을 프롬프트에 명확히

상담원 전환 조건:
- 환불/교환: 환불팀 01011112222
- 결제 오류: 결제팀 01033334444
- 고객 불만: 고객센터장 01055556666

AI는 프롬프트를 보고 전환 여부를 판단합니다. 조건이 모호하면 불필요한 전환이 발생합니다.

2. 전환 전 안내 멘트

AI가 전환 전에 고객에게 안내하도록 프롬프트에 명시하세요:

전환 전 반드시 "담당 상담원에게 연결해드리겠습니다. 잠시만 기다려주세요"라고 안내하세요.

3. Warm Transfer의 whisper를 활용

상담원이 맥락 없이 "여보세요?"로 시작하면 고객이 처음부터 다시 설명해야 합니다. whisper로 핵심 정보를 전달하세요:

whisper=f"고객 {customer_name}님, 주문 {order_id} 환불 문의입니다. 이미 배송 완료 상태입니다."

4. 전환 실패 대비

상담원이 안 받을 수 있습니다. timeout 내 응답이 없으면 전환이 실패합니다:

await call.transfer("01012345678", timeout=30)
# 30초 내 상담원이 안 받으면 AI가 다시 대화를 이어감

마무리

Call Transfer는 AI 전화 에이전트와 사람 상담원을 이어주는 핵심 기능입니다. AI가 처리할 수 있는 80%의 통화는 자동화하고, 나머지 20%는 매끄럽게 사람에게 넘기는 것이 현실적인 AI 콜센터의 모습입니다.

ClawOps의 Blind/Warm Transfer, 전환 후 복귀 기능으로 고객 경험을 해치지 않는 자연스러운 전환을 구현해보세요.

3일 무료 Trial → claw-ops.com


관련 글: AI 전화 에이전트 만들기 · AI 전화 에이전트에 Tool 연동하기 · AI 콜센터 Build vs Buy

관련 글 더 보기

ClawOps AI 전화 API로 시작하기

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