Google 전화 통신 플랫폼

이 가이드에서는 에이전트 애플리케이션의 새 Google Telephony Platform (GTP) 전화번호를 만들고 구성하는 과정을 안내합니다. 이 기본 제공 기능을 사용하면 몇 분 만에 수신 트래픽을 처리할 수 있는 새 전화번호를 에이전트에 연결할 수 있습니다.

기존 전화번호를 사용하려면 기존 번호를 새 GTP 번호로 자동 리디렉션하도록 세션 보더 컨트롤 (SBC) 시스템을 구성하면 됩니다. SBC 통합 및 설정에 관한 자세한 안내는 Dialogflow CX Telephony 문서를 참고하세요.

시작하기 전에

  1. 설정 및 정리 페이지의 단계에 따라 배포에 사용할 프로젝트를 만들거나 구성합니다.
  2. 배포에 사용할 에이전트 애플리케이션을 만들고 구성합니다.
  3. 프로젝트에서 Dialogflow API를 사용 설정합니다.

제한사항

다음과 같은 제한사항이 적용됩니다.

  • 표준 PSTN (공중 교환 전화망) 전화번호는 us 멀티 리전에서 지원됩니다. eu 멀티 리전의 경우 가상 전화번호를 사용할 수 있습니다.
  • us 멀티 리전에서는 미국 전화번호만 지원됩니다.
  • 가상 전화번호는 표준 PSTN 전화에서 걸 수 없습니다.

에이전트 애플리케이션을 GTP 전화번호에 연결

  1. CX Agent Studio 콘솔을 열고 에이전트 애플리케이션을 선택합니다.
  2. 콘솔 상단에서 배포 탭을 클릭한 다음 플랫폼에 연결 을 클릭합니다. 이미 배포된 채널이 있는 경우 +새 채널 을 클릭합니다.
  3. 채널의 이름 을 입력하고 플랫폼 메뉴에서 Google Telephony Platform(GTP) 을 선택합니다.
  4. 기본 옵션은 브라우저에서 에이전트 애플리케이션을 테스트하기 위해 가상 전화번호를 프로비저닝하는 것입니다. 표준 PSTN (공중 교환 전화망) 전화번호를 프로비저닝하려면 Connection type 드롭다운에서 해당 옵션을 선택합니다.
  5. 배포할 버전 을 선택합니다. 기존 버전이 없는 경우 새 버전을 만듭니다.
  6. (선택사항) 채널별 동작 전환 버튼을 클릭하여 추가 옵션을 구성합니다. 에이전트 응답 길이를 변경하고, DTMF 입력을 사용 설정하고, 사용자가 응답 중간에 에이전트를 중단하도록 허용할 수 있습니다. 이러한 설정에 관한 자세한 내용은 에이전트 애플리케이션 설정 문서를 참고하세요.
  7. 채널 만들기 를 클릭합니다. 이제 채널의 전화번호와 배포 ID를 확인할 수 있습니다.
  8. PSTN 전화번호를 프로비저닝한 경우 전화번호를 호출하여 에이전트 애플리케이션에 연결되는지 테스트한 다음 완료 를 클릭합니다. 새 채널이 에이전트 애플리케이션의 배포된 채널 페이지에 표시됩니다. 이제 이 번호를 사용하여 고객이 에이전트에 전화를 걸도록 할 수 있습니다. 가상 전화 번호를 프로비저닝한 경우 WebRTC 위젯에서 테스트할 수 있습니다.

WebRTC 위젯에서 에이전트 애플리케이션 테스트

표준 PSTN 또는 가상 전화번호를 프로비저닝했는지 여부와 관계없이 오디오, 동영상 또는 텍스트를 사용하여 WebRTC 위젯에서 에이전트 애플리케이션을 테스트할 수 있습니다.

  1. 콘솔 상단에서 배포 탭을 클릭합니다.
  2. 배포된 채널 이름 옆에 있는 아이콘을 클릭합니다. 오른쪽에 WebRTC 위젯이 열립니다.
  3. WebRTC 위젯에서 메시지가 표시되면 브라우저에 마이크 및 카메라 액세스 권한을 부여합니다.
  4. 오디오, 동영상 또는 텍스트를 통해 에이전트와 상호작용합니다. 동영상을 사용하는 경우 카메라 아이콘 옆에 있는 드롭다운 메뉴를 사용하여 화면 공유로 전환할 수도 있습니다.

에이전트 애플리케이션 동작 구성

통화 종료 및 전달과 관련된 에이전트의 동작을 맞춤설정할 수 있습니다.

에이전트 통화 종료 구성

에이전트가 통화를 종료하도록 허용하려면 다음 단계를 따르세요.

  1. 에이전트 오른쪽 상단에 있는 더하기 기호를 클릭하고 도구 추가 를 클릭합니다.
  2. 에이전트 (및 있는 경우 모든 하위 에이전트)에 end_session 도구를 추가합니다. 이 시스템 도구 는 기본적으로 모든 에이전트에서 자동으로 사용할 수 있습니다.
  3. 안내에 통화 종료 동작에 관한 설명을 추가합니다. 예를 들면 End the call by executing the end_session tool with arguments reason="customer_query_ended".

상담사에게 통화 전달

에이전트가 상담사에게 통화를 전달하고 통화의 가상 에이전트 구간을 종료하도록 구성하려면 다음 단계를 따르세요.

  • 에이전트 (및 있는 경우 모든 하위 에이전트)에 end_session 시스템 도구를 추가합니다.
  • 다음 변수를 만듭니다.
    • escalationMessage: 선택적으로 에이전트가 통화를 전달하기 전에 메시지를 말하도록 하려면 기본값 필드에 텍스트를 추가합니다.
    • telephonyTransferCall: 유형커스텀 스키마 로 설정합니다. 에이전트가 통화를 전달할 전화번호 (E.164 형식 필요)를 사용하여 스키마 입력 상자에 다음 JSON 객체를 입력합니다.
{
  "phoneNumber": "+PHONE_NUMBER"
}
  • 안내에 이 동작에 관한 설명을 추가합니다. 예를 들면: Escalate the call to a human agent by executing the end_session tool with session_escalated=true

파트너 지원 상담사 전달

시스템에 Google 이외의 파트너 가 통합되어 있는 경우 상담사 전달에 사용할 수 있는 두 가지 옵션이 있습니다. liveAgentHandoff 변수 또는 telephonyPayload 변수입니다. 두 경우 모두 파트너의 안내에 따라 JSON 페이로드가 다를 수 있습니다.

상담사 전달 상담사 전달:

  • 에이전트 (및 있는 경우 모든 하위 에이전트)에 end_session 시스템 도구를 추가합니다.
  • 다음 변수를 만듭니다.
    • liveAgentHandoff: 유형커스텀 스키마 로 설정하고 파트너가 요구하는 JSON 스키마를 추가합니다. 예를 들면 다음과 같습니다.
{
  "PARTNER_NAME": {
    "type": "action",
    "action": "deflection",
    "deflection_type": "sip",
    "sip_uri": "SIP_URI",
    "sip_refer": true,
    "sip_parameters": {
      "x-header": "value"
    }
  }
}
  • 안내에 이 동작에 관한 설명을 추가합니다. 예를 들면: Escalate the call to a human agent by executing the end_session tool with session_escalated=true

커스텀 페이로드 상담사 전달:

  • 에이전트 (및 있는 경우 모든 하위 에이전트)에 end_session 시스템 도구를 추가합니다.
  • 다음 변수를 만듭니다.
    • telephonyPayload: 유형커스텀 스키마 로 설정하고 파트너가 요구하는 JSON 스키마를 추가합니다. 예를 들면 다음과 같습니다.
{
  "PARTNER_NAME": {
    "type": "action",
    "action": "deflection",
    "deflection_type": "sip",
    "sip_uri": "SIP_URI",
    "sip_refer": true,
    "sip_parameters": {
      "x-header": "value"
    }
  }
}
  • 안내에 이 동작에 관한 설명을 추가합니다. 예를 들면: Escalate the call to a human agent by executing the end_session tool with session_escalated=true

SIP 신호를 사용하여 에이전트 간에 데이터 전달

SBC 통합을 완료한 경우 SIP 신호를 사용하여 SIP 헤더를 통해 에이전트에 데이터를 전달할 수 있습니다. 에이전트에서 BYE, REFER 또는 INVITE가 트리거될 때 데이터를 전달할 수도 있습니다.

에이전트에 전달된 모든 데이터는 변수를 사용하여 액세스할 수 있습니다. 데이터에 액세스하려면 먼저 변수를 만들어야 합니다.

발신자의 전화번호 (ANI)는 Text 유형의 telephony-caller-id 변수에 저장됩니다.

에이전트가 에스컬레이션을 실행하기 전에 메시지를 말해야 하는 경우 메시지는 Text 유형의 escalationMessage 변수에 저장되어야 합니다.

SIP REFER 또는 SIP INVITE를 실행하려면 phoneNumberuseOriginatingTrunk 변수가 지정된 Custom schema (advanced) 유형의 telephonyTransferCall 변수가 있어야 합니다.

전달해야 하는 모든 데이터는 Custom schema (advanced) 유형의 liveAgentHandoff 변수에 있어야 합니다.

UUI SIP 헤더

16진수로 인코딩된 세미콜론으로 구분된 키-값 쌍 목록을 ;encoding=hex;purpose=Goog-Session-Param과 함께 전달할 수 있습니다. 에이전트 내에서 이 목록에 액세스하려면 이름이 uui-headers이고 유형이 List인 변수를 만듭니다.

예를 들어 문자열 key1=value1;key2=value2를 전달해야 하는 경우 다음 UUI 헤더를 전송해야 합니다. 여기서 페이로드는 16진수로 인코딩된 값 key1=value1;key2=value2입니다.

User-to-User: 6B6579313D76616C7565313B6B6579323D76616C756532;encoding=hex;purpose=Goog-Session-Param

uui-headers 변수에는 다음 객체가 포함됩니다.

"uui-headers": ["key1=value1;key2=value2"]

end_session 도구를 호출할 때 uuiHeaders를 전달하려면 params={"liveAgentHandoff": {"uuiHeaders": [ {uui-headers}[0] ]}}를 지정합니다.

예를 들어 전달된 UUI 헤더가 SIP BYE 시에 전달되어야 하는 경우 다음과 비슷한 안내가 있습니다.

If the user says that they would like to speak to an agent, escalate the call to the agent by executing the end_session tool with session_escalated=true and params={"escalationMessage": "I am transferring you to an agent", "liveAgentHandoff":{"uuiHeaders": [ {uui-headers}[0] ]}}.

SIP x-headers

x-로 시작하는 SIP 헤더를 에이전트에 전달하고 x-headers 변수 및 Custom schema (advanced) 유형으로 저장할 수 있습니다. 변수의 헤더 이름에서 x- 접두어가 삭제됩니다.

예를 들어 SIP INVITE에 다음 헤더가 포함되어 있다고 가정합니다.

x-billing-id: 12345

x-headers 변수에는 다음 객체가 포함됩니다.

{
  "x-headers": {
    "billing-id": "12345"
  }
}

end_session 도구를 호출할 때 xHeaders를 전달하려면 params={"liveAgentHandoff": {"xHeaders": {x-headers} }}를 지정합니다.

예를 들어 전달된 x-headers가 SIP BYE 시에 전달되어야 하는 경우 다음과 비슷한 안내가 있습니다.

If the user says that they would like to speak to an agent, escalate the call to the agent by executing the end_session tool with session_escalated=true and params={"escalationMessage": "I am transferring you to an agent", "liveAgentHandoff":{"xHeaders": {x-headers} }}.

SIP BYE 전송

에이전트가 통화를 종료하면 SIP BYE가 전송됩니다. SIP BYE에서 uuiHeadersxHeaders를 전송하려면 다음 예와 비슷한 안내를 사용합니다.

If the user says that they would like to speak to an agent, escalate the call to the agent by executing the end_session tool with session_escalated=true and params={"escalationMessage": "I am transferring you to an agent", "liveAgentHandoff":{"xHeaders": {x-headers}, "uuiHeaders": [{uui-headers[0]}] }}.

SIP REFER 전송

에이전트가 상담사에게 통화를 에스컬레이션하고 통화를 끊어야 하는 경우 SIP REFER를 사용해야 합니다. SIP REFER는 "sipRefer": true 변수에서 liveAgentHandoff를 지정하여 트리거되며 refer-to 번호는 telephonyTransferCall 변수에 제공되어야 합니다. SIP REFER를 실행하고 uuiHeadersxHeaders를 전달하는 안내 예시:

If the user says that they would like to speak to an agent, escalate the call to the agent by executing the end_session tool with session_escalated=true and params={"escalationMessage": "I am transferring you to an agent", "telephonyTransferCall": {"phoneNumber": "+19496855555", "useOriginatingTrunk": true}, "liveAgentHandoff":{"sipRefer": true, "xHeaders": {x-headers}, "uuiHeaders": [{uui-headers[0]}] }}.

SIP INVITE 전송

에이전트가 상담사에게 통화를 에스컬레이션하고 Agent Assist 기능을 사용할 수 있도록 통화를 유지해야 하는 경우 SIP INVITE를 사용해야 합니다. SIP INVITE는 telephonyTransferCall 변수의 phoneNumber에 의해 트리거됩니다. SIP INVITE를 실행하고 uuiHeadersxHeaders를 전달하는 안내 예시:

If the user says that they would like to speak to an agent, escalate the call to the agent by executing the end_session tool with session_escalated=true and params={"escalationMessage": "I am transferring you to an agent", "telephonyTransferCall": {"phoneNumber": "+19496855555", "useOriginatingTrunk": true}, "liveAgentHandoff":{"xHeaders": {x-headers}, "uuiHeaders": [{uui-headers[0]}] }}.

원격 통화 연결 해제 핸들러 만들기

고객이 전화를 끊으면 CX Agent Studio 내에서 도구 호출을 트리거하는 데 사용할 수 있는 특정 이벤트 sys.remote-call-disconnected가 트리거됩니다. 다음 예에서는 고객이 전화를 끊을 때 도구 sum이 호출됩니다.

도구 sum은 Python 코드 도구로 정의되며 다음 코드를 포함합니다.

def sum(x: int, y: int) -> int:
  """
  Computes the sum of two numbers.

  Args:
    x: The first number.
    y: The second number.

  Returns:
    The sum of the two numbers.
  """
  return x+y

루트 에이전트에서 통화 연결 해제 이벤트를 감시하는 로직으로 Before LLM 콜백을 만듭니다. LlmResponse에서 sum 도구 호출을 실행한 다음 end_session 도구를 호출합니다.

def before_model_callback(callback_context: CallbackContext, llm_request: LlmRequest) -> Optional[LlmResponse]:

  for part in callback_context.get_last_user_input():
    if part.text == "<event>sys.remote-call-disconnected</event>":
      return LlmResponse.from_parts(
        [Part.from_function_call('sum', {'x': 1, 'y': 2}),
         Part.from_end_session(reason='sum tool called after caller disconnected')]
      )
  return None