处理电话互动
如果您的助手使用电话集成,您可以使用各种响应类型自定义集成的行为,或管理助手通过电话与客户进行对话的流程。
您可以使用响应类型执行以下特定于电话的操作:
结束通话。
在某些情况下,您可能需要组合响应类型来执行多个操作。 例如,您可能希望通过要求在同一操作步骤中输入电话键盘和发送短信来实施双因素身份验证。 有关更多信息,请参阅 定义电话命令序列。
您还可以执行以下特定于手机的操作:
更多信息,请参阅回复类型参考。 有关特定手机上下文变量的参考信息,请参阅 “手机上下文变量 ”。
为助手添加特定于手机的回复
要从操作步骤启动特定语音交互,请在 generic 数组中添加相应响应类型的响应。 有关使用 JSON 编辑器添加响应的更多信息,请参阅 《使用 JSON 编辑器定义响应》。
将高级设置应用于 Speech to Text 服务
使用该 speech_to_text 响应类型向电话集成所使用的 Speech to Text 服务实例发送配置命令。 通过从操作步骤发送响应 speech_to_text ,您可以在对话过程中动态更改 Speech to Text 的配置。
默认情况下,您对 Speech to Text 所做的任何配置更改将在本次会话剩余时间内保持有效,或者直到您再次更新它们为止。 您可以通过设置 对象 parameters 的 属性 update_strategy 来更改此行为。
speech_to_text 响应类型的格式如下:
{
"generic": [
{
"response_type": "speech_to_text",
"command_info": {
"type": "<command type>",
"parameters": {
"parameter name1": "parameter value",
"parameter name2": "parameter value"
}
}
}
]
}
下文将介绍每种命令类型及其相关参数。
command_info.type : configure
通过应用一组配置参数(这些参数可基于对话流程)来动态重构 Speech to Text 服务。 例如,您可能希望在对话的某个特定时间点选择特定的自定义 ID 或语法。
参数 | 描述 | 必需 | 缺省值 |
|---|---|---|---|
| 用于窄带编解码器(例如 PCMU 和 PCMA,采样率为 8 kHz )的 Speech to Text 服务配置。 连接到 Speech to Text 服务以发送语音识别请求时,将使用此对象的参数。 有关这些参数的更多信息,请参阅 Speech to Text API 文档。 | False | 当前的 Speech to Text 配置 |
| 用于宽带编解码器(例如采样率为 8 kHz 的 G722 )的 Speech to Text 服务配置。 连接到 Speech to Text 服务以发送语音识别请求时,将使用此对象的参数。 有关这些参数的更多信息,请参阅 Speech to Text API 文档。 | False | 当前的 Speech to Text 配置 |
| 为会话协商音频编解码器时,指定首选哪个音频频段( | False |
|
| 指定设置语音配置时使用的更新策略。 可能的值包括:\n - | False |
|
您可以为 narrowband_recognize 和 设置 broadband_recognize 的参数,反映了 Speech to Text WebSocket 接口所提供的参数。 WebSocket API 发送两种类型的参数:查询参数(在手机集成连接到服务时发送)和消息参数(作为请求正文中 JSON 数据的一部分发送)。 例如, model 是一个查询参数,而 smart_formatting 是一个 WebSocket 消息参数。 如需查看完整的参数列表,请参阅 Speech to Text API 文档。
您可以为手机集成与 Speech to Text 服务的连接定义以下查询参数。 您为 narrowband 或 定义的任何 broadband 其他参数都会作为 WebSocket 消息请求的一部分被传递过去。
modelacoustic_customization_idversionx-watson-learning-opt-outbase_model_versionlanguage_customization_id
以下来自 Speech to Text 服务的参数无法修改,因为它们具有固定值,且被手机集成所使用。
actioncontent-typeinterim_resultscontinuousinactivity_timeout
在使用 AI 助手通过 命令 configure 进行动态配置时,仅会更新根级字段,例如 narrowband 或 broadband。 如果命令中省略了这些字段,原始配置设置将继续保留。 您可以使用 values mergeupdate_strategy 和 merge_once 将配置参数与现有配置合并。
使用定制语言模型
设置电话集成后,可以将该集成配置为始终使用定制语言模型。
但是,您可能希望绝大部分时间使用标准语言模型,而指定的定制语言模型仅用于助手设计为帮助客户的特定主题。 例如,您可能希望使用一个专门针对医疗术语的自定义模型,用于仅帮助处理医疗账单的操作。 您可以为对话的特定分支应用自定义语言模型。
如需了解更多信息,请参阅“创建自定义语言模型”。
要在操作步骤中应用自定义语言模型,请使用 speech_to_text 响应类型。
{
"generic": [
{
"response_type": "speech_to_text",
"command_info": {
"type": "configure",
"parameters": {
"narrowband_recognize": {
"x-watson-learning-opt-out": true,
"model": "en-US_NarrowbandModel",
"profanity_filter": true,
"smart_formatting": true,
"language_customization_id": "81d3630-ba58-11e7-aa4b-41bcd3f6f24d",
"acoustic_customization_id": "e4766090-ba51-11e7-be33-99bd3ac8fa93"
}
}
}
}
]
}
您还可以应用声学模型,您可以训练该模型来处理背景噪音、重音或其他与信号质量或噪音相关的问题。
使用自定义语法
Speech to Text 服务支持语法功能。 您可以使用语法来配置音频,使其仅符合特定特性。
定制语言模型用于扩展服务的基本词汇表。
语法用于限制服务可以从该词汇表中识别的词。
将语法与定制语言模型一起用于语音识别时,服务可以仅识别语法识别到的词、短语和字符串。 例如,您可能只想接受 yes 或 no 响应。 为此,可以定义仅允许这些选项的语法。
如需了解更多信息,请参阅 《在自定义语言模型中使用语法》。
本例展示了如何在对话中指定自定义语法:
{
"generic": [
{
"response_type": "speech_to_text",
"command_info": {
"type": "configure",
"parameters": {
"update_strategy": "merge_once",
"narrowband_recognize": {
"x-watson-learning-opt-out": true,
"grammar_name": "names-abnf",
"language_customization_id": "81d3630-ba58-11e7-aa4b-41bcd3f6f24d"
}
}
}
}
]
}
示例
以下示例演示了如何使用 response speech_to_text 类型向 Speech to Text 服务发送配置命令。
示例:设置语言模型
在本例中,语言模型切换为西班牙语 (es-ES_NarrowbandModel),并启用了智能格式化。
{
"generic": [
{
"response_type": "speech_to_text",
"command_info": {
"type": "configure",
"parameters": {
"narrowband_recognize": {
"model": "es-ES_NarrowbandModel",
"smart_formatting": true
}
}
}
}
]
}
示例:更新某次对话轮次的 recognizeBody 属性
下面的示例展示了如何为对话的单个回合指定使用自定义语言模型。 将 update_strategy 设置为 merge_once 并在配置参数中指定自定义语言模型的 ID。
{
"generic": [
{
"response_type": "speech_to_text",
"command_info": {
"type": "configure",
"parameters": {
"update_strategy": "merge_once",
"narrowband_recognize": {
"language_customization_id": "ao45vohgFuxyOQRgztu-02I10ut7aJcM-AdInT-VWgj3V"
}
}
}
}
]
}
将高级设置应用于 Text to Speech 服务
使用该 text_to_speech 响应类型向电话集成所使用的 Text to Speech 服务实例发送配置命令。 通过从操作步骤发送响应 text_to_speech ,您可以在对话过程中动态更改 Text to Speech 的配置。
默认情况下,您对 Text to Speech 所做的任何配置更改将在本次会话剩余时间内保持有效,或者直到您再次更新它们为止。 您可以通过设置 对象 parameters 的 属性 update_strategy 来更改此行为。
speech_to_text 响应类型的格式如下:
{
"generic": [
{
"response_type": "text_to_speech",
"command_info": {
"type": "<command type>",
"parameters": {
"parameter name": "parameter value",
"parameter name": "parameter value"
}
}
}
]
}
下文将介绍每种命令类型及其相关参数。
command_info.type : configure
通过应用一组配置参数(这些参数可基于对话流程)来动态重构 Text to Speech 服务。 例如,您可能希望在对话的某个特定时刻选择某个特定的语音。
参数 | 描述 | 必需 | 缺省值 |
|---|---|---|---|
| 在合成音频时使用的 Text to Speech 服务配置。 连接到 Text to Speech 服务以发送语音合成请求时,将使用该对象定义的参数。 有关这些参数的更多信息,请参阅 Text to Speech API 文档。 | 是 | 当前的 Text to Speech 配置 |
| 指定设置语音配置时使用的更新策略。 可能的值包括:\n - | False |
|
您可以为 设置的参数 synthesize 反映了 Text to Speech WebSocket 接口提供的参数。 WebSocket API 发送两种类型的参数:查询参数(在手机集成连接到服务时发送)和消息参数(作为请求正文中 JSON 数据的一部分发送)。 如需查看完整的参数列表,请参阅 Text to Speech API 文档。
command_info.type : disable_barge_in
禁用语音闯入,这样在播放音频时,如果来电者说话,播放就不会中断。
无参数。
command_info.type : enable_barge_in
启用语音闯入功能,这样来电者就可以通过说话来中断播放。
无参数。
更改语音助手的语音
当对话中涉及到某些有必要的话题时,您可以改变助理的语音。 例如,您可能希望在仅适用于英国客户的对话分支中使用带有英国口音的声音。
本例演示了如何在对话中指定语音:
{
"generic": [
{
"response_type": "text_to_speech",
"command_info": {
"type": "configure",
"parameters": {
"synthesize": {
"voice": "en-GB_KateV3Voice"
}
}
}
}
]
}
在 voice 参数中,指定要使用的语音模型。 有关语音模型选项的更多信息,请参阅 “支持的语言和语音 ”。
您指定的模型必须是该集成所配置的 Text to Speech 服务实例所支持的模型。
将呼叫转移给在线客服
在配置电话集成时,可以选择设置后备呼叫中心支持,这样助理就可以将呼叫转移给人工。 您可以在操作步骤中使用 连接到代理响应类型,在对话的特定时间点启动转接到即时代理。 当向电话集成发送 “连接到代理 ”响应时,将根据 RFC 5589 的定义,通过 SIP REFER 消息发起 SIP 转接。
有关在通话过程中向即时代理发起转接的更多信息,请参阅以下文档:
电话集成支持 连接到代理响应类型的更多参数。 您可以使用 JSON 编辑器将这些特定于手机的参数添加到 connect_to_agent 响应类型中。
connect_to_agent 响应类型支持在 transfer_info 参数下指定目标传输信息。
下面的示例显示了一个使用所有可配置参数的传输:
{
"generic": [
{
"response_type": "connect_to_agent",
"transfer_info": {
"target": {
"service_desk": {
"sip": {
"uri": "sip:user\\@domain.com",
"transfer_headers": [
{
"name": "Customer-Header1",
"value": "Some-Custom-Info"
},
{
"name": "User-to-User",
"value": "XXXXXX"
}
],
"transfer_headers_send_method": "refer_to_header"
}
}
}
},
"agent_available": {
"message": "I'll transfer you to an agent"
},
"agent_unavailable": {
"message": "Sorry, I could not find an agent."
},
"message_to_human_agent": "The caller needs help resetting their password"
}
]
}
connect_to_agent 响应类型支持以下特定于电话的属性。
参数 | 缺省值 | 描述 |
|---|---|---|
| 不适用 | 要转接呼叫的 SIP 或电话 URI,如 |
|
| 确定呼叫转接的方式:\n - |
|
| 当使用 |
| 不适用 | 要添加到传输请求中的自定义头信息字段名值对列表。 |
|
| 发送 SIP 传输头的方法。 \n - |
如果将 SIP URI 定义为转接目标,请通过在 URI 中的 @ 符号前面添加两个反斜杠 (\\) 以对此符号转义。 这将防止字符串被识别为实体速记语法的一部分。
"uri": "sip:12345556789\\@myhost.com"
挂断后转接
默认情况下,电话集成通过使用 SIP REFER 请求来转移呼叫。 根据 IVR 服务提供商的不同,您可能需要将呼叫转移配置为使用 SIP BYE 请求。 使用 transfer_method 属性指定呼叫转移的方式,可使用 refer 或 hangup。 当 transfer_method 设置为 hangup 而不是 refer 时,传输操作的行为会发生变化。 电话集成不是发送 SIP REFER 请求,而是播放任何相关文本,然后通过发送 SIP BYE 请求挂断通话。
挂断后,电话集成会将 url 属性中指定的转移目的地传递给 BYE 消息中的呼叫锚点。 包含传输目标的标头字段由 transfer_target_header 属性决定。 如果未指定 transfer_target_header 属性,电话集成将使用 Transfer-Target。
{
"generic": [
{
"response_type": "connect_to_agent",
"transfer_info": {
"target": {
"service_desk": {
"sip": {
"uri": "sip:user\\@domain.com",
"transfer_method": "hangup",
"transfer_target_header": "Transfer-Target"
}
}
}
},
"agent_available": {
"message": "Please hold on while I connect you with a live agent."
},
"agent_unavailable": {
"message": "Sorry, I could not find an agent."
},
"message_to_human_agent": "The caller needs help resetting their password"
}
]
}
在 SIP 信令中传递 AI 助手元数据
为了支持加载呼叫者与 AI 助手之间的对话记录,电话集成将 标头 User-to-User 指定为一个值,该值可作为与网页聊天集成配合使用的键。 如果在 列表 transfer_headersUser-to-User 中指定了 ,则会将会话历史记录键发送到 标头 X-Watson-Assistant-Session-History-Key 中。
SIP 标头的值限制为 1024 字节。
在 SIP REFER 消息中如何显示这些数据也取决于 transfer_headers_send_method 的值。
示例显示了作为标题包含的数据:
REFER sip:b@atlanta.example.com SIP/2.0
Via: SIP/2.0/UDP agenta.atlanta.example.com;branch=z9hG4bK2293940223
To: <sip:b@atlanta.example.com>
From: <sip:a@atlanta.example.com>;tag=193402342
Call-ID: 898234234@agenta.atlanta.example.com
CSeq: 23 REFER
Max-Forwards: 7
Refer-To: sip:user@domain.com
X-Watson-Assistant-Token: 8f817472-8c57-4117-850d-fdf4fd23ba7
User-to-User: 637573746f6d2d757365722d746f2d75736572;encoding=hex
Contact: sip:a@atlanta.example.com
Content-Length: 0
如果指定了自定义 User-to-User 标头,则会话历史记录密钥将设置在 X-Watson-Assistant-Session-History-Key 标头中:
REFER sip:b@atlanta.example.com SIP/2.0
Via: SIP/2.0/UDP agenta.atlanta.example.com;branch=z9hG4bK2293940223
To: <sip:b@atlanta.example.com>
From: <sip:a@atlanta.example.com>;tag=193402342
Call-ID: 898234234@agenta.atlanta.example.com
CSeq: 93809823 REFER
Max-Forwards: 70
Refer-To: sip:user@domain.com
User-to-User: 637573746f6d2d757365722d746f2d75736572;encoding=hex
X-Watson-Assistant-Session-History-Key: dev::latest::212033::0a64c30d-c558-4055-85ad-ef75ad6cc29d::978f1fd7-4e24-47d8-adb0-24a8a6eff69e::b5ffd6c2-902f-4658-b586-e3fc170a6cf3::7ad616a350cc48078f17e3ee3df551de
Contact: sip:a@atlanta.example.com
Content-Length: 0
此示例展示了作为查询参数传递给 Refer-To 标头的元数据(如 SIP RFC 3261 所定义)。
REFER sip:b@atlanta.example.com SIP/2.0
Via: SIP/2.0/UDP agenta.atlanta.example.com;branch=z9hG4bK2293940223
To: <sip:b@atlanta.example.com>
From: <sip:a@atlanta.example.com>;tag=193402342
Call-ID: 898234234@agenta.atlanta.example.com
CSeq: 23 REFER
Max-Forwards: 70
Refer-To: sip:user@domain.com?User-to-User=637573746f6d2d757365722d746f2d75736572%3Bencoding%3Dhex
Contact: sip:a@atlanta.example.com
Content-Length: 0
如果指定了自定义 User-to-User 标头,则会话历史记录密钥将设置在 X-Watson-Assistant-Session-History-Key 标头中。
REFER sip:b@atlanta.example.com SIP/2.0
Via: SIP/2.0/UDP agenta.atlanta.example.com;branch=z9hG4bK2293940223
To: <sip:b@atlanta.example.com>
From: <sip:a@atlanta.example.com>;tag=193402342
Call-ID: 898234234@agenta.atlanta.example.com
CSeq: 93809823 REFER
Max-Forwards: 70
Refer-To: sip:user@domain.com?User-to-User=637573746f6d2d757365722d746f2d75736572%3Bencoding%3Dhex&X-Watson-Assistant-Session-History-Key=dev::latest::893499::dff9c274-adc4-4f63-93de-781166760bf8::978f1fd7-4e24-47d8-adb0-24a8a6eff69e::b5ffd6c2-902f-4658-b586-e3fc170a6cf3::7ad616a350cc48078f17e3ee3df551de
Contact: sip:a@atlanta.example.com
Content-Length: 0
对于 Twilio Flex,User-to-User 标头使用 encoding=ascii。
播放等待音乐或录音
要播放保持音乐或录音信息,请使用 audio 响应类型。 有关响应类型的更多信息,请参阅“使用 JSON 编辑器定义响应 ”。
在呼叫转接期间无法播放等待音乐。 但是,如果助手需要时间执行某种处理,例如调用客户端操作或呼叫 webhook,则可能需要播放保持音乐。
电话集成支持 audio 响应类型的以下属性:
属性 | 描述 |
|---|---|
| 公开可访问的 |
| 是否在音频播放结束后重复重新启动。 缺省值为 |
如果将 channel_options.voice_telephony.loop 设置为 true,则可使用 vgwActForceNoInputTurn 命令添加用户定义的响应。 该命令指示电话集成在不等待呼叫方输入的情况下,使用 vgwNoInputTurn 文本启动转向。 在 vgwNoInputTurn 转中,您可以在来电保持通话时启动交易。 vgwNoInputTurn 转完后,循环音频就会停止。
下面的示例显示了使用 loop=true 的 audio 响应,以及使用 vgwActForceNoInputTurn 命令的 user_defined 响应。
{
"generic": [
{
"response_type": "user_defined",
"user_defined": {
"vgwAction": {
"command": "vgwActForceNoInputTurn"
}
}
},
{
"response_type": "audio",
"source": "https://raw.githubusercontent.com/WASdev/sample.voice.gateway/master/audio/musicOnHoldSample.wav",
"channel_options": {
"voice_telephony": {
"loop": true
}
}
}
]
}
启用小键盘输入
如果您希望客户能够通过在其电话小键盘上输入信息而不是通过讲话来发送信息,那么可以添加对电话小键盘输入的支持。 实现此类型支持的最佳方法是启用双音多频 (DTMF) 信号。 DTMF 是一种传输音调的协议,当用户按下按键电话上的按键时就会产生音调。 音调具有特定的频率和持续时间,可以通过电话网络进行解释。
要在用户按下电话键时开始监听音调,请在操作步骤中使用 dtmf 响应类型。 可使用 JSON 编辑器添加此响应类型。
{
"generic": [
{
"response_type": "dtmf",
"command_info": {
"type": "<command type>",
"parameters": {
"parameter name": "parameter value",
"parameter name": "parameter value"
}
},
"channels": [
{
"channel": "voice_telephony"
}
]
}
]
}
command_info 属性指定了电话集成的 DTMF 命令。 支持的命令及其相关参数如下。
command_info.type : collect
指示电话集成收集用户的双音多频信令 (DTMF) 输入。 该命令支持以下参数:
参数名 | 描述 | 必需 | 缺省值 |
|---|---|---|---|
| DTMF 终止键,表示 DTMF 输入结束(例如, | False | 不适用 |
| 要收集的 DTMF 位数,必须是不大于 100 的正整数。 | 如果未定义 | 不适用 |
| 要收集的最小 DTMF 位数。 该属性与 | 如果未定义 | 不适用 |
| 要收集的最大 DTMF 位数。 该属性与 | 如果未定义 | 不适用 |
| 收到 DTMF 数字后等待新 DTMF 数字的时间(毫秒)。 在活动 DTMF 收集期间,当接收到第一个 DTMF 收集时,将会激活此超时。 当数字间超时激活时,它将停用响应后超时定时器。 如果未指定 | False | 不适用 |
| 是否在采集 DTMF 数字时禁用语音识别功能,直到采集完成或出现超时。 如果此参数为 | False | 否 |
| 是否在 DTMF 采集完成后停止 DTMF 输入。 执行此命令后,所有 DTMF 输入将被忽略,直到使用 | False | 否 |
command_info.type : disable_barge_in
禁用 DTMF 干扰,这样当来电者按键时,电话集成的播放就不会中断。 如果启用 disable_barge_in,则播放过程中按下的按键将被忽略。
该命令没有参数。
command_info.type : enable_barge_in
启用 DTMF 打断,以便呼叫者可以通过按键中断电话集成中的回放。
该命令没有参数。
command_info.type : send
通过电话集成发送 DTMF 信号。
该命令支持以下参数:
参数 | 描述 | 必需 | 缺省值 |
|---|---|---|---|
| 一个 JSON 对象数组,其中每个元素代表一个要发送给呼叫者的 DTMF 音调。 | 是 | 不适用 |
| 要发送的事件代码。 除了数字 0 到 9 之外,您还可以指定以下代码:\n - 10: | 是 | 不适用 |
| 事件的持续时间(毫秒)。 | False | 200 |
| 音调的功率级别,单位为 dBm0 。 支持范围为 0 至 -63 dBm0 。 | False | 0 |
| 发送列表中下一个 DTMF 提示音之前的等待时间间隔(毫秒)。 | False | 200 |
示例
此示例显示了 dtmf 响应类型和 collect 命令,用于收集 DTMF 输入。
{
"generic": [
{
"response_type": "dtmf",
"command_info": {
"type": "collect",
"parameters": {
"termination_key": "#",
"count": 16,
"ignore_speech": true
}
},
"channels": [
{
"channel": "voice_telephony"
}
]
}
]
}
此示例显示了 dtmf 响应类型和 send 命令,用于发送 DTMF 信号。
{
"generic": [
{
"response_type": "dtmf",
"command_info": {
"type": "send",
"parameters": {
"digits": [
{
"code": "9",
"volume": -8
},
{
"code": "11"
}
],
"send_interval": 100
}
},
"channels": [
{
"channel": "voice_telephony"
}
]
}
]
}
将对话转移到网络聊天集成
您可以使用 响应 channel_transfer 类型,将当前电话通话中的来电者转接到网络聊天会话中。
助手向呼叫者发送一条短信,其中包含一个 URL ,呼叫者可以点击该 URL 在手机浏览器中加载网络聊天小部件。 网络聊天会话会显示电话通话记录,并开始收集完成交易所需的信息。
在客户以书面形式提供信息比以口头形式提供信息更方便的情况下(例如,更改地址),这种方法非常有用。
转接成功后,呼叫方可以挂断电话,并通过网络聊天继续通话。
channel_transfer 响应类型只有在同时为助手配置了 SMS with Twilio 集成的情况下,才能与电话集成一起使用。
{
"generic": [
{
"response_type": "text",
"values": [
{
"text": "I will send you a text message now with a link to our website."
}
],
"selection_policy": "sequential"
},
{
"response_type": "channel_transfer",
"message_to_user": "Click the link to connect with an agent using our website.",
"transfer_info": {
"target": {
"chat": {
"url": "https://example.com/webchat"
}
}
}
}
]
}
结束通话
如本例所示,您可以使用 end_session 响应类型指示助手结束通话。
{
"generic": [
{
"response_type": "end_session"
}
]
}
您可以选择在 SIP BYE 请求中包含自定义标头,该请求会在电话集成收到此响应类型时生成。
此示例显示了带有自定义 SIP 标头的 end_session 响应类型:
{
"generic": [
{
"response_type": "end_session",
"channel_options": {
"voice_telephony": {
"sip": {
"headers": [
{
"name": "Customer-Header1",
"value": "Some-Custom-Info"
},
{
"name": "User-to-User",
"value": "XXXXXX"
}
]
}
}
}
}
]
}
在电话交谈期间发送文本消息
在书面交流比转录语音输出更容易准确交流的情况下,您可以在正在进行的语音交流中发送文本信息。 例如,地址或路线。
当您在对话中与客户交换短信时,助理会启动短信交换。 向用户发送一条短信,要求用户回复。
要从操作步骤发送特定信息,请使用 user_defined 响应类型和 vgwActSendSMS 命令:
{
"generic": [
{
"response_type": "text",
"values": [
{
"text": "I will send you a text message now."
}
],
"selection_policy": "sequential"
},
{
"response_type": "user_defined",
"user_defined": {
"vgwAction": {
"command": "vgwActSendSMS",
"parameters": {
"message": "To send me your street address, respond to this text message with your address."
}
}
}
}
]
}
您可以在 parameters 对象中指定以下任何参数:
参数 | Type | 描述 |
|---|---|---|
消息 | string | 要发送的短信文本。 必需。 |
mediaURL | 列表 | 作为彩信附件随信息发送的媒体文件的 URL 列表。 可选。 |
tenantPhoneNumber | string | 与租户相关联的电话号码。 号码格式必须与 SMS 提供商要求的格式一致。 如果未提供 |
userPhoneNumber | string | 要发送短信的电话号码。 号码格式必须与 SMS 提供商要求的格式一致。 如果未提供 |
setAsInputText | boolean | 是否从 |
否则, |
如果您的 SMS 集成支持多个 SMS 电话号码,或者您使用的 SIP 中继与 SMS 提供商不同,请务必指定要用于发送短信的电话号码。 否则,短信将通过拨打的同一电话号码发送。
助手收到短信后,会通过文本输入 vgwSMSMessage 启动一个新的对话回合。 此输入表示已收到来电信息。 客户信息的文本将作为 vgwSMSMessage 上下文变量和 sms_message 整合变量的值包含在内。
如果助手无法向呼叫方发送短信,则会使用文本输入 vgwSMSFailed 启动新一轮呼叫。 此输入表示无法向呼叫方发送短信。 通过创建由输入文本 vgwSMSFailed 触发的操作,您可以设计助手来处理此类故障。
{
"input": {
"text": "vgwSMSMessage",
"integrations": {
"voice_telephony": {
"sms_message": "230 Leigh Farm rd"
}
}
},
"context": {
"skills": {
"main skill": {
"user_defined": {
"vgwSMSMessage": "1545 Lexington Ave."
}
}
}
}
}
下面是将 setAsInputText 设置为 true 时的转向请求示例:
{
"input": {
"text": "230 Leigh Farm rd",
"integrations": {
"voice_telephony": {
"sms_message": "230 Leigh Farm rd"
}
}
},
"context": {
"skills": {
"main skill": {
"user_defined": {
"vgwSMSMessage": "1545 Lexington Ave."
}
}
}
}
}
定义电话指令序列
如果要连续运行多个命令,可在 generic 数组中包含多个响应。 这些命令将按照数组中指定的顺序进行处理。
此示例显示了两种响应:第一种是文本响应;第二种是结束呼叫的 end_session 响应。
{
"generic": [
{
"response_type": "text",
"values": [
{
"text": "Goodbye."
}
],
"selection_policy": "sequential"
},
{
"response_type": "end_session"
}
]
}
在 CDR 日志事件中注入自定义值
如果使用日志 Webhook 记录呼叫详情记录 (CDR) 事件,则可以使用 cdr_custom_data 上下文变量为记录的事件添加自定义数据。 您可以使用这种方法在通话过程中记录数据(例如,指示特定任务的完成情况)。
要记录自定义 CDR 数据,请使用 JSON 编辑器编辑上下文。 将 cdr_custom_data 定义为 context.integrations.voice_telephony 对象的子对象,如本示例所示:
"context": {
"integrations": {
"voice_telephony": {
"cdr_custom_data": {
"key1": "value1",
"key2": "value2"
}
}
}
}
cdr_custom_data 对象可包含任何有效的 JSON 数据。
生成 CDR 报告时,自定义数据将包含在 injected_custom_data 字段中,如本示例所示:
{
"payload": {
...
"injected_custom_data": {
"key1": "value1",
"key2": "value2"
}
...
}
}
有关 CDR 日志事件有效负载结构的更多信息,请参阅 CDR 日志事件参考。
合并和删除自定义 CDR 数据
每次操作定义 cdr_custom_data 对象时,新数据都会与之前存在的数据合并。 为以前定义的属性指定的新值会覆盖以前的值,并添加任何新属性;否则,以前定义的数据将保持不变。
要删除先前定义的属性,必须显式地将其设置为空值,如本例所示:
"context": {
"integrations": {
"voice_telephony": {
"cdr_custom_data": {
"key1": ""
}
}
}
}
通过操作访问手机集成上下文变量
如果要访问手机集成上下文变量,请使用 JSON 编辑器编辑上下文。
下面的示例显示了如何访问用户电话号码(接收呼叫的电话号码):
"context": {
"variables": [
{
"value": {
"expression": "${system_integrations.voice_telephony.private.user_phone_number}.replace('+','')"
},
"skill_variable": "user_phone_number"
}
]
}
如需更多信息,请参阅 “电话集成上下文变量 ”。