与电话和 Twilio Flex 集成
IBM Cloud
您可以使用电话集成来帮助客户通过电话,并将其传输到 Twilio Flex 中的实时代理。 如果在与助理交谈的过程中,客户要求与某人通话,您可以直接将对话转接给Twilio Flex客服。
准备工作
要使用此集成模式,您需要:
- watsonx Assistant Plus 或 Enterprise Plan (电话集成所必需)
- 具有以下产品的 Twilio 帐户:
- Twilio Flex
- Twilio 具有可编程语音的语音 API
- Twilio Studio
添加 watsonx Assistant 电话集成
如果已将电话集成添加到助手,那么可以跳过此部分。
如果需要添加电话集成,请执行以下步骤。
-
在助手的主页上的“基本通道”下的 集成 部分中,您将看到 Phone 的磁贴。
-
在 电话 磁贴上,单击 添加。
-
在弹出窗口上,再次单击 添加。
-
选择 将现有电话号码与外部提供者配合使用。
-
完成电话集成设置过程。 (更多信息,请参阅 “与手机整合”。)
目前,这都是你需要做的。 有关配置电话集成的更多信息,请参阅 与电话集成。
添加 Twilio Flex 项目
需要新的或现有的 Twilio Flex 项目。
如果需要 Twilio Flex 项目,那么可以使用以下步骤创建一个项目。
-
从项目下拉菜单中,单击 创建新项目。 指定项目的名称,并验证您的帐户信息。
-
在欢迎页面上,选择 Flex 作为新项目的 Twilio 产品。 完成问卷,然后单击 开始使用 Twilio。
供应 Flex 项目后,返回到 Twilio 控制台。 确保从下拉列表中选择了正确的项目。
-
在导航菜单中,单击 所有产品和服务 图标。
-
单击 Twilio 可编程语音> 设置> 常规。
-
在 增强的可编程 SIP 功能下,切换到 已启用。
创建调用流
配置电话集成和 Twilio Flex 项目后,必须使用 Twilio Studio 创建呼叫流,并供应 (或端口) 您希望助手使用的电话号码。
要创建调用流,请执行以下操作:
-
在导航菜单中,单击 所有产品和服务 图标。
-
单击 Studio。
-
点击+ 创建新的流程。
-
为新流程命名,然后点击 “下一步”。
-
选择 从头开始,然后单击 下一步。 触发器 窗口小部件将显示在流画布中。
-
单击 触发器 窗口小部件。
-
URL 中的值。 在后续步骤中需要用到这个值。
配置电话号码
-
在导航菜单中,单击 所有产品和服务 图标。
-
单击 电话号码。
-
在 管理号码下,配置希望助手使用的电话号码。 选择 购买号码 以购买新号码,或者选择 端口和主机 以移植现有电话号码。
-
在 活动号码 列表中,单击新电话号码。
-
在 语音和传真下,配置这些设置。
-
对于 CONFIGURE WITH 字段,选择 Webhook,TwiML Bins,Functions,Studio 或 Proxy。
-
对于 调用输入,请选择 Studio 流。 从下拉列表中选择您的流程。
-
对于 主处理程序失败,请选择 Studio 流。 从下拉列表中选择您的流程。
-
-
转至 watsonx Assistant 用户界面,然后打开助手的电话集成设置。
-
在 电话号码 字段中,输入在 Flex Studio 中配置的电话号码。
-
单击保存并退出。
测试您的电话号码
现在,您可以通过在 Twilio Flex 流编辑器中触发 说/玩 窗口小部件来测试您的电话号码是否已连接到流。
-
将 说/玩 窗口小部件拖到流画布上。
-
使用类似于
I'm alive.
的简单短语配置“说/玩”窗口小部件。 -
将“触发器”窗口小部件上的 入局呼叫 节点连接到 说/玩 窗口小部件。
-
拨打您的电话号码。 您应该听到 Twilio 流使用测试短语进行响应。
-
删除 说/玩 窗口小部件,然后继续执行下一步。
-
如果此测试未按预期工作,请仔细检查电话号码配置以确保其连接到流。
创建 Twilio 函数以处理入局呼叫
现在,您需要配置调用流,以使用 Twilio 函数将入站调用定向到助手。 执行以下步骤:
-
在导航菜单中,单击 所有产品和服务 图标。
-
点击 “服务”。
-
单击创建服务。 指定服务名称,然后点击 “下一步”。
-
单击 添加 > 添加功能 以向服务添加新功能。 将新函数命名为
/receive-call
。 -
将
/receive-call
函数中的模板替换为以下代码:exports.handler = function(context, event, callback) { const VoiceResponse = require('twilio').twiml.VoiceResponse; const response = new VoiceResponse(); const dial = response.dial({ answerOnBridge: "true", referUrl: "/refer-handler" }); const calledPhoneNumber = event.Called; dial.sip(`sip:${calledPhoneNumber}@{sip_uri_hostname};secure=true`); return callback(null, response); }
- 将
{sip_uri_hostname}
替换为助手电话集成 SIP URI 的主机名部分 (sips:
之后的所有内容)。 注: Twilio 不支持SIPS
URI,但通过将;secure=true
附加到 SIP URI 来支持安全 SIP 中继。
- 将
-
单击保存。
-
单击 全部部署。
重定向到入局呼叫处理程序
使用 Studio 流编辑器中的 TwiML 重定向 窗口小部件来调用在上一部分中创建的 /receive-call
函数。
-
将 TwiML 重定向 窗口小部件添加到 Studio 流画布。
-
将“传入调用”触发器连接到 TwiML 重定向 窗口小部件。
-
使用您在上一部分创建的
/receive-call
功能URL 配置 TwiML小部件。 -
现在,在接收入站调用时,您的流应该重定向到 watsonx Assistant。
-
如果重定向失败,请确保已部署
/receive-call
函数。
创建 Twilio 函数以处理来自助手的传输
对于客户要求与代理交谈的情况,您还需要配置呼叫流以处理从助手传输回 Twilio Flex 的呼叫。 在“TwiML 重定向”窗口小部件之后使用 说/玩 来显示调用已从 watsonx Assistant传输回流。 此时可以使用许多选项,例如排队调用实时代理程序,并在本节中进行讨论。
-
将 说/玩 窗口小部件添加到画布,并使用诸如
Transfer from Watson complete
之类的短语对其进行配置。 -
将“TwiML 重定向”窗口小部件上的 返回 节点连接到 说/玩 窗口小部件。
-
单击 触发器 窗口小部件。
-
复制 URL 中的值。 在后续步骤中需要用到这个值。
-
在“Twilio 函数”页面上,单击 添加 > 添加函数 以向服务添加另一个新功能。 将此新功能命名为
/refer-handler
。 -
将
/refer-handler
函数中的模板替换为以下代码:exports.handler = function(context, event, callback) { // This function handler will handle the SIP REFER back from the Phone Integration. // Before handing the call back to Twilio, it will extract the session history key from the // User-to-User header that's part of the SIP REFER Refer-To header. This session history key // is a string that is used to load the agent application in order to share the transcripts of the caller // with the agent. // See https://github.com/watson-developer-cloud/assistant-web-chat-service-desk-starter/blob/main/docs/AGENT_APP.md const VoiceResponse = require('twilio').twiml.VoiceResponse; const STUDIO_WEBHOOK_URL = '{webhook_url}'; let studioWebhookReturnUrl = `${STUDIO_WEBHOOK_URL}?FlowEvent=return`; const response = new VoiceResponse(); console.log("ReferTransferTarget: " + event.ReferTransferTarget); const referToSipUriHeaders = event.ReferTransferTarget.split("?")[1]; console.log(referToSipUriHeaders); if (referToSipUriHeaders) { const sanitizedReferToSipUriHeaders = referToSipUriHeaders.replace(">", ""); console.log("Custom Headers: " + sanitizedReferToSipUriHeaders); const sipHeadersList = sanitizedReferToSipUriHeaders.split("&"); const sipHeaders = {}; for (const sipHeaderSet of sipHeadersList) { const [name, value] = sipHeaderSet.split('='); sipHeaders[name] = value; } const USER_TO_USER_HEADER = 'User-to-User'; // Extracts the User-to-User header value const uuiData = sipHeaders[USER_TO_USER_HEADER]; if (uuiData) { const decodedUUIData = decodeURIComponent(uuiData); const sessionHistoryKey = decodedUUIData.split(';')[0]; // Passes the session history key back to Twilio Studio through a query parameter. studioWebhookReturnUrl = `${studioWebhookReturnUrl}&SessionHistoryKey=${sessionHistoryKey}`; } } response.redirect( { method: 'POST' }, studioWebhookReturnUrl ); // This callback is what is returned in response to this function being invoked. // It's really important! E.g. you might respond with TWiML here for a voice or SMS response. // Or you might return JSON data to a studio flow. Don't forget it! return callback(null, response); }
将
{webhook_url}
替换为您从Studio Flow中的触发器小部件复制的 URL。 -
单击保存。
-
单击 全部部署。
-
创建此引用处理程序后,将URL 复制回
/receive-call
处理程序的 referUrl 字段。
配置助手以将调用传输到 Twilio Flex
现在,我们需要配置助手,以便在客户要求与代理交谈时将呼叫转接到 Twilio Flex。 执行以下步骤:
-
在 watsonx Assistant 用户界面中,打开助手的对话技能。
-
添加具有触发助手将客户转移到代理程序的条件的节点。
-
向节点添加文本响应,并指定您希望助手在将客户传输到代理之前说的文本。
-
打开响应的 JSON 编辑器。
-
在 JSON 编辑器中,添加
connect_to_agent
响应,将您的电话号码指定为sip.uri
(将{phone_number}
替换为 SIP 干线的电话号码):
{
"generic": [
{
"response_type": "connect_to_agent",
"transfer_info": {
"target": {
"service_desk": {
"sip": {
"uri": "sip:+{phone_number}@flex.twilio.com",
"transfer_headers_send_method": "refer_to_header"
}
}
}
},
"agent_available": {
"message": "Ok, I'm transferring you to an agent"
},
"agent_unavailable": {
"message": ""
}
}
]
}
此示例不显示如何使用从 watsonx Assistant 传递到 Twilio Flex 的上下文。 您可以从 Twilio Flex 流程中引用“用户到用户”信息:
{
"context": {
"widgets": {
"redirect_1": {
"User-to-User": "value",
}
}
}
}
其中 redirect_1
是重定向窗口小部件的名称。 例如,如果设置多个队列,那么可能要使用 Twilio 分割窗口小部件根据返回的上下文选取队列。
测试助手
现在,您的助手应该能够接听您的电话号码,并将呼叫转接回 Twilio Flex 流程。 要测试助手,请执行以下操作:
-
拨打您的电话号码。 当助手响应时,请求代理程序。
-
您应该听到在 “说/播放”小工具中配置的短语(例如,
Transfer from Watson complete
)。 -
如果传输失败,请使用控制台日志在调用从流移动到
/receive-call
处理程序,到 watsonx Assistant,到引用处理程序,然后返回到 Twilio Flex 流时遵循该流。