개념 및 문제 해결

이 페이지에서는 통합에 필요한 특정 구성과 일반적인 문제 해결 방법을 자세히 설명합니다.

전화 통신 네트워크 요구사항

네트워크에서 아웃바운드 트래픽을 필터링하는 경우 SIP 신호 및 미디어 스트리밍을 위한 아웃바운드 트래픽을 허용해야 합니다.

SIP 신호의 경우 포트 5672를 통해 전체 IP 범위 74.125.88.128/25 (TCP)가 허용되어야 합니다. 더 제한적인 방화벽 규칙 집합의 경우 SIP 신호를 하나 이상의 지역화된 GTP SIP 서버로만 제한할 수 있습니다.

  • 미국 지역: us.telephony.goog (74.125.88.132)
  • EU 지역: eu.telephony.goog (74.125.88.133)
  • 아시아 태평양 지역: ap.telephony.goog (74.125.88.134)
  • 남미 지역: sa.telephony.goog (74.125.88.135)

RTP 미디어의 경우 CIDR IP 범위 74.125.39.0/24로 향하는 트래픽을 허용하도록 방화벽 규칙을 구성해야 합니다. 일반적으로 미디어에 필요한 포트는 16384~32767 (TCP+UDP)이지만 이 포트 범위는 향후 확장될 수 있습니다.

지원되는 SBC 공급업체 또는 모델

다음 표에는 지원되는 SBC 공급업체 또는 모델과 펌웨어 버전이 나와 있습니다. 각 공급업체의 자세한 통합 안내는 펌웨어 버전에 연결되어 있습니다.

공급업체 및 모델 펌웨어 버전
AudioCodes VE SBC v7.40A.500.786
Avaya Session Border Controller for Enterprise v8.1.3.2-38-22279, v10.2.0.0-86-24077
Oracle E-SBC Acme Packet 3900 SCZ9.3.0 GA (빌드 46)
Ribbon Swe Core SBC v11.01.01R005
Cisco Unified Border Element (CUBE) v17.15.03a

지원되는 SBC 신호 및 미디어 프로토콜

신호 프로토콜 TLS를 통한 SIP
미디어 SRTP : 보안 실시간 전송 프로토콜
미디어 암호화 SDES
미디어 암호화 스위트 지원 AES_CM_128_HMAC_SHA1_80
지원되는 미디어 코덱 G.711 µ-law (PCMU), G.711 A-law (PCMA)

SIP 헤더

대화 프로필과 전화번호를 설정할 때 sipConfig.createConversationOnTheFlytrue로 설정된 CCAI 대화 프로필을 만들었습니다. 대화 ID는 Call-Info 또는 UUI의 SIP 헤더 값을 사용하여 SIP INVITE 중에 동적으로 생성해야 합니다.

SIP 헤더 값은Google Cloud 프로젝트 ID와 대화 ID를 정의하여 Dialogflow 엔드포인트를 가리킵니다.

  1. Google Cloud 프로젝트 ID는 Google Cloud 프로젝트를 설정할 때 사용한 프로젝트입니다.
  2. 대화 ID는 SBC에 의해 동적으로 생성되어야 합니다. 대화 ID는 정규 표현식 공식 [a-zA-Z][a-zA-Z0-9_-]*을 준수해야 하며 문자 길이는 [3,64] 범위에 있어야 합니다. 대화 ID를 동적으로 생성하려면 SIP INVITE에서 Call-ID 값을 사용하고 이전에 지정된 정규 표현식을 준수하도록 문자를 접두사로 추가하는 것이 일반적인 패턴입니다. 예를 들어 Call-ID 값이 297363723_79131759_799783510이면 Call-ID 값에 "CID-"을 접두사로 추가하면 정규 표현식 [a-zA-Z][a-zA-Z0-9_-]*을 준수하게 됩니다.

Call-Info SIP 헤더

SIP INVITE에 Call-Info라는 맞춤 SIP 헤더를 삽입하여 대화 ID를 고유하게 설정합니다.

Call-Info: <http://dialogflow.googleapis.com/v2beta1/projects/$PROJECT_ID/conversations/$CONVERSATION_ID>;purpose=Goog-ContactCenter-Conversation

예를 들면 다음과 같습니다. none Call-Info: <http://dialogflow.googleapis.com/v2beta1/projects/gcp-project-id-12345/conversations/CID-297363723_79131759_799783510>;purpose=Goog-ContactCenter-Conversation

UUI SIP 헤더

맞춤 SIP 헤더 Call-Info 설정이 지원되지 않는 경우 SIP INVITE에서 UUI (User-to-User) SIP 헤더를 구성하여 대화 ID를 전달할 수 있습니다.

Call-Info에서 요청된 동일한 데이터를 사용하고 URL은 16진수로 인코딩되며 목적은 Goog-ContactCenter-Conversation로 설정됩니다. 다음은 디코딩된 16진수 문자열이 http://dialogflow.googleapis.com/v2beta1/projects/gcp-project-id-12345/conversations/CID-297363723_79131759_799783510인 헤더의 예입니다.

User-to-User: 687474703a2f2f6469616c6f67666c6f772e676f6f676c65617069732e636f6d2f763262657461312f70726f6a656374732f6763702d70726f6a6563742d69642d31323334352f636f6e766572736174696f6e732f4349442d3239373336333732335f37393133313735395f373939373833353130;encoding=hex;purpose=Goog-ContactCenter-Conversation

'목적' 값이 다른 별도의 UUI 헤더를 사용하여 추가 데이터를 전송할 수 있습니다. 이러한 값은 Conversation.telephonyConnectionInfo 객체에 추가됩니다. 이 데이터는 런타임에 대화형 에이전트 (Dialogflow CX) 에이전트에서 사용할 수 없습니다.

상담사 정보 전달

상담사에게 특정 정보를 전달해야 하는 경우 상담사의 실시간 전송 프로토콜 (RTP) 스트림에 대해 세션 설명 프로토콜 (SDP) 미디어 라벨 속성을 필요한 데이터 값으로 설정하면 됩니다. 예: none a=label:7382373482 이 데이터는 sip_recording_media_label 필드에 채워지고 스크립트가 포함된 New message notification Pub/Sub 주제에서 사용할 수 있습니다. pubsub Message.attributes 메시지에서 sip_recording_media_label 필드를 찾습니다.

참여자 역할 및 미디어 스트림 순서 구성

기본적으로 첫 번째 미디어 스트림은 END_USER 참여자 역할과 연결되고 후속 미디어 스트림은 HUMAN_AGENT 참여자 역할과 연결됩니다.

다른 동작이 필요한 경우 (예: 아웃바운드 통화 시스템) 헤더에 전달된 URL에 roles 매개변수가 추가되어야 합니다.

예를 들면 다음과 같습니다. none http://dialogflow.googleapis.com/v2beta1/projects/gcp-project-id-12345/conversations/CID-297363723_79131759_799783510?roles=HUMAN_AGENT,END_USER

URL은 첫 번째 미디어 스트림이 HUMAN_AGENT 역할을 가져야 하고 두 번째 미디어 스트림이 END_USER 역할을 가져야 한다고 지정합니다. Call-Info 또는 UUI SIP 헤더와 함께 roles 매개변수를 적용할 수 있습니다.

특정 대화에 추가 매개변수 설정

특정 대화에 추가 매개변수를 설정하려면 MatchIntentRequest RPC 호출을 사용하세요. query_params.parameters을 필수 키-값 쌍으로 설정하고 query_input.text을 '매개변수 설정'과 같은 값으로 설정할 수 있습니다.

대화가 생성된 시점인 초기 SIP INVITE에 대한 200 OK 응답 후에 API 호출을 실행합니다. MatchIntentRequest의 세션 ID는 INVITE의 Call-Info 헤더에 제공된 것과 동일한 대화 ID입니다.

SIP REFER을 사용하여 SIP 엔드포인트로 통화 전송

가상 상담사에서 SIP 엔드포인트로 통화를 트랜스퍼하려면 SIP REFER 메서드를 사용하세요. Live agent handoff 필드에 페이로드를 포함하고 Telephony transfer call 필드를 아웃바운드 SIP REFER Refer-To 필드에 설정된 숫자로 설정합니다. 페이로드는 다음 코드 샘플과 비슷해야 합니다.

{
    "sip-refer": true
}

문제 해결

Google팀에서 SIP OPTIONS 핑 및 실행된 테스트 통화의 문제 해결을 지원하기 위해 다음 아티팩트를 제공해 달라고 요청할 수 있습니다.

  1. 네트워크 패킷 캡처
  2. 전체 헤더와 SIP SDP를 보여주는 SIP 디버그 추적:
    • Call-ID 값
    • Call-Info 값 (있는 경우)

네트워크 패킷 캡처

네트워크 패킷 캡처에는 다음이 표시되어야 합니다.

  1. SBC와 GTP SIP 서버 간의 완전한 3방향 TCP 핸드셰이크 (SYN, SYN-ACK, ACK)가 TCP 포트 5672를 통해 통신됩니다. TCP 연결을 설정하지 못한 경우 발생할 수 있는 문제는 다음과 같습니다.

    • 네트워크에서 아웃바운드 트래픽을 차단하고 있습니다.
    • 통신이 지역화된 GTP SIP 서버 중 하나로 전송되지 않습니다. 전화 통신 연결 네트워크 요구사항을 참고하세요.
    • 통신이 TCP 포트 5672를 통해 전송되지 않습니다.
  2. 다음과 같은 완전한 TLS 연결 핸드셰이크

    • SBC에서 시작된 TLS v1.2 이상
    • SBC가 'Client Hello'를 시작하고 GTP가 'Server Hello'로 응답합니다.
    • 상호 TLS 인증 프로세스
      • GTP는 SBC에서 인증한 자체 서버 TLS 인증서로 응답합니다.
      • SBC는 GTP에 의해 인증된 자체 클라이언트 TLS 인증서를 전송합니다.
    • '암호화된 핸드셰이크 메시지'에서 알 수 있듯이 암호화된 채널이 설정되었습니다.
    • TLS 채널을 통해 전송되는 '애플리케이션 데이터'의 증거

    TLS 연결을 설정하지 못한 경우 발생할 수 있는 문제는 다음과 같습니다.

    • GTP 측에서 SIP 트렁크가 생성되지 않았습니다.
    • 구성된 SIP 트렁크 FQDN이 SBC의 TLS 인증서 (CN 또는 SAN 속성)에 표시된 FQDN과 일치하지 않습니다.
    • TLS 버전이 지원되지 않습니다. TLS 버전 1.2 이상만 지원됩니다.
    • 요청된 암호화 스위트가 지원되지 않습니다. SBC의 TLS 구성을 참고하세요.
    • 신뢰할 수 없는 TLS 인증서 제공업체는 SBC의 TLS 구성을 참고하세요.
  3. SIP 디버그 트레이스에는 다음이 표시되어야 합니다.

    • 고객 Call-Info SIP 헤더가 none Call-Info: <http://dialogflow.googleapis.com/v2beta1/projects/$PROJECT_ID/conversations/$CONVERSATION_ID>;purpose=Goog-ContactCenter-Conversation 형식으로 삽입됩니다.

      예를 들면 다음과 같습니다. none Call-Info: <http://dialogflow.googleapis.com/v2beta1/projects/gcp-project-id-12345/conversations/CID-297363723_79131759_799783510>;purpose=Goog-ContactCenter-Conversation

    • SIP 헤더에 전화번호가 E.164 형식 (+16501234567)으로 표시됩니다.

    • SIP 헤더에는 요청 URI 및 기타 SIP 헤더 필드 (예: To, From, Via)에서 사용되는 공개 IP 주소가 표시됩니다. 비공개 IP 주소는 거부됩니다.

    • SIP SDP 연결 정보 (c= ... )가 공개 IP 주소로 지정됩니다. 비공개 IP 주소는 거부됩니다.

    • 미디어 우선순위가 최종 사용자 스트림을 먼저 전송하고 상담사의 미디어 스트림을 두 번째로 전송하는지 확인합니다. GTP는 기본적으로 첫 번째 미디어 스트림을 최종 사용자로 취급하기 때문입니다.

    SIP 오류 응답 코드가 수신되는 경우:

    • SIP 400 오류 (예: 488 Not Acceptable Here) 응답 코드는 GTP가 SIP 헤더 또는 SIP 미디어 SDP 구성을 거부했음을 나타낼 수 있습니다.
    • SIP 600 오류 (SIP 603 거부됨 오류) 응답 코드는 할당량 관련 문제일 수 있습니다. 증가 요청 방법에 대한 자세한 내용은 할당량 및 한도 페이지를 참고하세요.

원격 호출자가 전화를 끊을 때 작업을 트리거합니다.

새로운 BiDi API (ConversationProfile의 use_bidi_streaming=True)는 원격 호출자가 전화를 끊을 때 플레이북 내에서 도구 호출을 트리거하거나 흐름 내에서 웹훅 호출을 트리거하는 것을 지원합니다.

원격 호출자가 전화를 끊고 대화형 에이전트 (Dialogflow CX)가 SIP BYE 메시지를 수신하면 맞춤 이벤트 sys.remote-call-disconnected가 트리거됩니다. 이 특정 이벤트 이름으로 핸들러를 만들면 이를 사용하여 흐름 내에서 플레이북 또는 웹훅 호출로 도구 호출을 트리거할 수 있습니다.