本页详细介绍了集成所需的特定配置,以及常见问题的排查方法。
电话网络要求
如果您的网络会过滤出站流量,则必须允许 SIP 信令的出站流量和媒体流的出站流量。
对于 SIP 信令,应允许通过端口 5672 (TCP) 的整个 IP 范围 74.125.88.128/25。如需设置限制性更高的防火墙规则集,您可以将 SIP 信令限制为仅发送给一个或多个区域化 GTP SIP 服务器:
- 美国区域:
us.telephony.goog
(74.125.88.132) - 欧盟区域:
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 正式版(Build 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 标头
当您设置对话配置文件和手机号码时,您创建了一个 CCAI 对话配置文件,并将 sipConfig.createConversationOnTheFly
设置为 true
。对话 ID 应在 SIP INVITE 期间使用 Call-Info
或 UUI
的 SIP 标头值动态生成。
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
中请求的相同数据,但网址以十六进制编码,并将用途设置为 Goog-ContactCenter-Conversation
。以下是一个示例标头,其中十六进制字符串在解码后为 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
可以使用具有不同“purpose”值的单独 UUI
标头发送其他数据。这些值会添加到 Conversation.telephonyConnectionInfo
对象。请注意,Conversational Agents (Dialogflow CX) 代理在运行时无法访问此数据。
传入人工客服信息
如果您需要传递特定于人工客服的信息,可以将人工客服的会话描述协议 (SDP) 媒体标签属性、实时传输协议 (RTP) 流设置为所需的数据值。
示例:
none
a=label:7382373482
此数据将填充到 sip_recording_media_label
字段中,并可在包含转写的 New message notification
Pub/Sub 主题中使用。在 Pub/Sub Message.attributes
消息中查找 sip_recording_media_label
字段。
配置参与者角色和媒体流顺序
默认情况下,第一个媒体流与 END_USER
参与者角色相关联,后续媒体流与 HUMAN_AGENT
参与者角色相关联。
如果您需要其他行为(例如在出站呼叫系统中),则标头中传递的网址应附加 roles 参数。
例如:none
http://dialogflow.googleapis.com/v2beta1/projects/gcp-project-id-12345/conversations/CID-297363723_79131759_799783510?roles=HUMAN_AGENT,END_USER
该网址指定第一个媒体流应具有 HUMAN_AGENT
角色,第二个媒体流应具有 END_USER
角色。您可以将 roles 参数与 Call-Info
或 UUI
SIP 标头搭配使用。
为指定对话设置其他参数
如需为指定对话设置其他参数,请使用 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 ping 和进行的测试通话的问题:
- 网络数据包捕获
- 显示完整标头和 SIP SDP 的 SIP 调试轨迹:
- Call-ID 值
Call-Info
值(如果存在)
网络数据包捕获
网络数据包捕获应显示以下内容:
您的 SBC 与 GTP SIP 服务器之间通过 TCP 端口 5672 进行通信,并完成完整的 3 向 TCP 握手(SYN、SYN-ACK、ACK)。如果 TCP 连接无法建立,可能存在以下问题:
- 您的网络正在阻止出站流量。
- 通信未发送到区域化 GTP SIP 服务器之一。 请参阅电话连接网络要求。
- 通信不是通过 TCP 端口 5672 发送的。
完整的 TLS 连接握手,包含以下内容:
- 由 SBC 发起的 TLS v1.2 或更高版本。
- 您的 SBC 发起“Client Hello”,而 GTP 以“Server Hello”响应。
- 双向 TLS 身份验证流程。
- GTP 会使用自己的服务器 TLS 证书进行响应,该证书由您的 SBC 进行身份验证。
- SBC 会发送自己的客户端 TLS 证书,该证书由 GTP 进行身份验证。
- 已建立加密通道,如“加密握手消息”所示。
- 通过 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
)支持在远程调用方挂断电话时,触发 playbook 中的工具调用或流程中的 webhook 调用。
当远程通话方挂断电话,并且 Conversational Agents (Dialogflow CX) 收到 SIP BYE 消息时,系统会触发自定义事件 sys.remote-call-disconnected
。如果您创建具有此特定事件名称的处理程序,则可以使用它在流程中通过 playbook 或 webhook 调用来触发工具调用。