配置呼叫转接

呼叫转接行为通过 APIVoice Gateway 配置高级 JSON 配置属性进行定义。

发起呼叫转接

在 V1.0.0.2 和更高版本中,通过在 JSON 节点定义中定义 vgwActTransfer 操作标记来在 Watson Assistant 服务中发起呼叫转接。

{
  "output": {
    "vgwAction": {
      "command": "vgwActTransfer",
      "parameters": {
        "transferHeader": "User-to-User",
        "transferHeaderVal": "12a345b6c7d8901234e5;encoding=hex;purpose=foo;content=bar",
        "transferTarget": "tel:+18883334444"
      }
    }
  }
}

如果将 SIP URI 定义为转接目标,请确保对 URI 中的 @ 字符进行转义,以便 Watson Assistant 不会处理该值。

  ...
  {
    "transferHeader": "User-to-User",
    "transferHeaderVal": "12a345b6c7d8901234e5;encoding=hex;purpose=foo;content=bar",
    "transferTarget": "sip:12345556789\\@myhost.com"
  }
...

先前的 Voice Gateway 版本使用 vgwTransfer 状态变量发起呼叫转接。虽然此状态变量继续可用,但是现在不推荐使用以支持 vgwActTransfer 操作标记。有关更多信息,请参阅不推荐使用的状态变量

确定转接成功还是失败

当转接过程成功时,Watson Assistant 接收到包含文字 "vgwCallTransferred"vgwCallTransferred 状态变量设置为 Yes 的文本更新。

当转接失败并且 vgwDisconnectCallOnTransferFailure 状态变量设置为 No 时,Watson Assistant 从 Voice Gateway 接收包含字符串 "vgwCallTransferFailed" 的文本更新。此字符串指示转接失败。请参阅故障时转接以配置 Watson Assistant 服务实例和 Voice Gateway 部署,从而对转接失败作出响应。

挂断后转接

缺省情况下,Voice Gateway 使用 SIP REFER 请求来执行转接呼叫。根据 IVR 服务提供程序,可能需要将呼叫转接配置为改用 SIP BYE 方法。请参阅将 Voice Gateway 与 IVR 和联系中心集成以查找有关 IVR 服务提供者的更多信息。

vgwActTransfer 操作中,使用 transferMethod 属性指定转接呼叫的方式(REFERHANGUP)。当设置为 HANGUP 时,转接操作的行为发生更改。Voice Gateway 回放任何关联文本,然后通过发送 SIP BYE 请求来挂断呼叫,而不是发送 SIP REFER 请求。

挂断后,Voice Gateway 通过 BYE 消息将 transferTarget 属性中指定的转接目标传递到呼叫锚点。包含转接目标的头字段由 transferTargetHeader 属性确定。如果未指定 transferTargetHeader 属性,那么 Voice Gateway 使用 Transfer-Target。如果在配置呼叫转接操作时未包含 transferMethod 属性,那么缺省情况下 vgwActTransfer 使用 REFER 方法。

{
  "output": {
    "vgwAction": {
      "command": "vgwActTransfer",
      "parameters": {
        "transferTarget": "tel:18883334444",
        "transferTargetHeader": "Transfer-Target",
        "transferMethod": "HANGUP"
      }
    }
  }
}

故障时转接

可将 Voice Gateway 配置为在发生故障时自动将呼叫转接到静态端点。例如,如果 Voice Gateway 失去与已配置的某个 Watson 服务的连接,可能发生故障。

以下状态变量可在首轮对话时设置,并在呼叫期间发送故障时使用。请参阅定义操作和状态

表 1. 用于在故障时转接的状态变量
状态变量名称 期望值 缺省值 描述
vgwTransferFailedMessage 文本字符串 - 如果 vgwDisconnectCallOnTransferFailure 设置为 Yes,那么是指在呼叫转接失败时以流式方法传送到呼叫者的消息。应在第一个轮次由 Watson Assistant 设置。
vgwConversationFailedMessage 文本字符串 - 在 Watson Assistant 失败时以流式方法传送到呼叫者的消息。应在第一个轮次由 Watson Assistant 设置。

例如,以下状态变量告知 Voice Gateway,从该节点响应开始,如果呼叫转接失败,那么在结束呼叫之前,vgwTransferFailedMessage 会以流式方法传送到呼叫者。

{
  "context": {
      "vgwDisconnectCallOnTransferFailure": "Yes",
    "vgwTransferFailedMessage": "Call transfer to an agent failed. 请稍后再试。Good bye."
  }
}

如果 Voice Gateway 无法访问 Watson Assistant,那么可以使用以下配置环境变量来强制转接到静态电话号码。

表 2. 用于转接到静态电话号码的环境变量
环境变量 缺省值 描述
CONVERSATION_FAILED_REPLY_MESSAGE 因技术问题被转接到代理程序的呼叫。再见。 在 Watson Assistant 失败时以流式方法传送到呼叫者的消息
TRANSFER_DEFAULT_TARGET 标识要转接到的目标端点。必须是有效的 SIP 或 tel URI(例如 sip:10.10.10.10)。这是缺省转接目标。仅当发生故障并且无法从 Watson Assistant API 获取呼叫转接目标时使用
TRANSFER_FAILED_REPLY_MESSAGE 呼叫转接到代理程序失败。请稍后再试。再见。 如果 DISCONNECT_CALL_ON_TRANSFER_FAILURE 设置为 True,那么在呼叫转接失败时,该消息会以流式方法传送到呼叫者。

配置 Voice Gateway 以将错误代码作为成功响应处理

当 Voice Gateway 在呼叫转接期间处理 SIP NOTIFY 请求时,如果 NOTIFY 请求中指定的响应代码不在 [200-299] 范围内,那么转接过程将失败。某些 IVR 系统可能会在 NOTIFY 请求中发送错误代码,即使转接成功也如此。可以使用 ACCEPT_TRANSFER_REJECT_CODES 配置属性或 vgwActTransfer 属性 acceptTransferRejectCodes 来配置 Voice Gateway 作为成功响应处理的错误代码的列表。

在以下配置属性示例中,如果 NOTIFY 请求包含 410 或 500 错误代码,那么 Voice Gateway 将 NOTIFY 请求作为成功请求处理,并且继续执行转接过程。

ACCEPT_TRANSFER_REJECT_CODES=410,500

可以使用 vgwActTransfer 操作中的 acceptTransferRejectCodes 属性来指定在处理 NOTIFY 请求期间作为成功响应处理的错误代码的列表。以下示例显示如何使用 vgwActTransfer 操作来配置 Voice Gateway,以将包含 410 或 500 错误代码的 NOTIFY 请求作为成功请求处理。

{
"command": "vgwActTransfer",
"parameters": {
"transferTarget": "tel:999",
"acceptTransferRejectCodes": "410,500"
}
}

在呼叫转接中发送用户到用户信息 (UUI) 数据

Voice Gateway 可以在 SIP REFER 消息、SIP BYE 请求或 SIP INFO 请求中发送用户到用户信息 (UUI) 数据。

当 Voice Gateway 转接呼叫时,它可以在 SIP REFER 消息中发送 UUI 数据。在 V1.0.0.4c 和更高版本中,Voice Gateway 支持使用以下头字段以用于在 REFER 请求中发送 UUI 数据:

如果使用 SIP BYE 请求来转接呼叫,在 V1.0.0.7 和更高版本中,将在 User-to-User 头字段内发送 UUI 数据。

在 SIP BYE 或 SIP REFER 请求中发送 UUI 数据

您可以通过针对 SIP BYE 或 SIP REFER 请求在 vgwActTransfer 操作上使用 uuiDatauuiSendMethod 属性来定制 Voice Gateway 用于发送 UUI 数据的头。要配置头字段,请将 uuiSendMethod 属性设置为 uuiHeadercontactHeaderreferToURL。如果不提供 uuiSendMethod 属性的值,那么缺省情况下在 User-to-User 头字段中发送数据。请参阅操作标记

{
  "output": {
    "vgwAction": {
      "command": "vgwActTransfer",
      "parameters": {
        "transferTarget": "sip:+18883334444@example.com",
        "uuiData": "59a390f3d2b7310023a2;encoding=hex;purpose=abc;content=123",
        "uuiSendMethod": "contactHeader"
      }
    }
  }
}

在 SIP INFO 请求中发送 UUI 数据

当转接呼叫时,Voice Gateway 可以在 SIP REFER 或 BYE 请求中发送 UUI 数据。某些会话边界控制器不支持这些选项,并且期望在 SIP INFO 请求中提供 UUI 数据。在转接或断开连接呼叫之前,可以使用 vgwActSendSIPInfo 来发送包含 UUI 数据和定制内容的 SIP INFO 请求。V1.0.0.8 和更高版本。

使用要添加到 SIP INFO 请求中的 SIP 头名称/值对来配置 sipHeaders 属性。请勿在列表中包含系统头字段,如 From、To、Contact 等。请提供正确格式的熟知头字段以避免解析问题。不能将格式不正确的头添加到消息中。

您可以选择性地配置 messageBody 属性以包含任何其他信息。messageBody 是附加到 SIP INFO 请求的主体。要包含 messageBody,请在 sipHeaders 列表中包含强制头 Content-Type。如果不添加 Content-Type,那么将插入缺省值 application/text

{
  "output": {
    "command": "vgwActSendSIPInfo",
    "parameters": {
            "sipHeaders": {
              "Content-Type": "multipart/mixed;boundary=unique-boundary-1"
            },
            "messageBody": "--unique-boundary-1\r\nContent-Type: application/dtmf-relay\r\nSignal=999#\r\nDuration=250\r\n--unique-boundary-1--"
          }
        }
}

发送 SIP INFO 请求后,Voice Gateway 将等待远程方对 SIP INFO 请求作出响应,然后再处理列表中的其余操作。如果在 Voice Gateway 发送 SIP INFO 请求时出现失败,那么 Voice Gateway 将立即使用 vgwSIPInfoFailed 文本向 SOE 发起轮次。vgwSIPFailureReason 状态变量包含失败原因。

以下示例显示远程方未对 SIP INFO 请求作出响应后 vgwSIPFailureReason 状态变量的格式,包括请求失败的原因。

{
  "vgwSIPFailureReason": {
    "sipMessage": "INFO",
    "failureReason": "A 400 Bad Request error response message was received"
  }
}

使用状态变量发送用户到用户信息数据

您还可以在 Watson Assistant 对话中设置以下状态变量。如果定义这些状态变量,然后在转接操作属性上定义不同值,那么操作中的值优先。

表 3. 用于在出局 REFER 消息中发送 UUI 数据的状态变量
状态变量名称 期望值 缺省值 描述
vgwUUIData 用户定义的 - 定义转接期间要在传出 SIP REFER 消息中发送的用户到用户信息 (UUI) 数据。V1.0.0.4c 和更高版本。
vgwUUISendMethod uuiHeader/contactHeader/referToURL - 发送用户到用户信息 (UUI) 数据所使用的方法。缺省情况下,在 User-to-User 头字段中发送 UUI 数据。V1.0.0.4c 和更高版本。

Voice Gateway 根据发送的值和方法对 UUI 数据进行编码。如果在 ContactRefer-To 头字段中发送 UUI 数据,那么数据将编码为 URI 头。如果 Refer-To 头值为 tel URL,那么 UUI 数据作为 URL 参数进行发送。例如,先前示例中的 UUI 数据在 Contact 头上发送并按如下所示进行编码:

Contact: <sip:+18883334444@example.com?User-to-User=59a390f3d2b7310023a2%3Bencoding%3Dhex%3Bpurpose%3Dabc%3Bcontent%3D123>

已知问题:无法在 tel URL 中对 UUI 数据进行编码。作为变通方法,请为 UUI 数据提供已编码的值。

在 1.0.0.4c 之前的版本中,可以在 Watson Assistant 对话中设置以下状态变量,以通知 Voice Gateway 要在传出 REFER 消息中设置的定制头。请注意,使用这些变量时,在 vgwTransferHeaderVal 属性上指定的 UUI 数据未编码。

表 4. 传出 REFER 消息中定制头的状态变量
状态变量名称 期望值 缺省值 描述
vgwTransferHeader 用户定义的 - 定义转接期间传出 SIP REFER 消息中的定制头字段。定制头值由 vgwSIPTransferHeaderVal 状态变量定义。
vgwTransferHeaderVal 用户定义的 - 转接期间在传出 SIP REFER 消息中定义定制头的值。定制头字段由 vgwTransferHeader 状态变量定义。

通过传递 GUID 来跟踪呼叫

企业电话系统可以配置为将全局唯一标识 (GUID) 作为 User-to-User 头添加到入局 SIP 呼叫。GUID 用于在企业网络中跟踪呼叫的整个生命周期。Voice Gateway 可配置为从初始 SIP 邀请抽取 GUID,并将相同 GUID 作为后续 REFER 消息中的头进行传递。传递 GUID 将确保在呼叫传播到联系中心代理的过程中可正确地跟踪呼叫。

CUSTOM_SIP_INVITE_HEADER 配置环境变量标识从建立呼叫的初始 SIP INVITE 消息中提取的定制头。指定此环境变量时,指定的 SIP 头将传递到 vgwSIPCustomInviteHeader 状态变量中的 Watson Assistant。

要在传出 REFER 消息中设置定制头,可以使用 UUI 数据的操作标记和状态变量或使用定制转接头状态变量,如上一部分中所述。