이 페이지에서는 통합에 필요한 특정 구성과 일반적인 문제 해결 방법을 자세히 설명합니다.
전화 통신 네트워크 요구사항
네트워크에서 아웃바운드 트래픽을 필터링하는 경우 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.createConversationOnTheFly
이 true
로 설정된 CCAI 대화 프로필을 만들었습니다. 대화 ID는 Call-Info
또는 UUI
의 SIP 헤더 값을 사용하여 SIP INVITE 중에 동적으로 생성해야 합니다.
SIP 헤더 값은Google Cloud 프로젝트 ID와 대화 ID를 정의하여 Dialogflow 엔드포인트를 가리킵니다.
- Google Cloud 프로젝트 ID는 Google Cloud 프로젝트를 설정할 때 사용한 프로젝트입니다.
- 대화 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 핑 및 실행된 테스트 통화의 문제 해결을 지원하기 위해 다음 아티팩트를 제공해 달라고 요청할 수 있습니다.
- 네트워크 패킷 캡처
- 전체 헤더와 SIP SDP를 보여주는 SIP 디버그 추적:
- Call-ID 값
Call-Info
값 (있는 경우)
네트워크 패킷 캡처
네트워크 패킷 캡처에는 다음이 표시되어야 합니다.
SBC와 GTP SIP 서버 간의 완전한 3방향 TCP 핸드셰이크 (SYN, SYN-ACK, ACK)가 TCP 포트 5672를 통해 통신됩니다. TCP 연결을 설정하지 못한 경우 발생할 수 있는 문제는 다음과 같습니다.
- 네트워크에서 아웃바운드 트래픽을 차단하고 있습니다.
- 통신이 지역화된 GTP SIP 서버 중 하나로 전송되지 않습니다. 전화 통신 연결 네트워크 요구사항을 참고하세요.
- 통신이 TCP 포트 5672를 통해 전송되지 않습니다.
다음과 같은 완전한 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 구성을 참고하세요.
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
가 트리거됩니다.
이 특정 이벤트 이름으로 핸들러를 만들면 이를 사용하여 흐름 내에서 플레이북 또는 웹훅 호출로 도구 호출을 트리거할 수 있습니다.