与电话和 Twilio Flex 集成
您可以使用电话集成功能通过电话为客户提供帮助,并将他们转给 Twilio Flex 内的即时代理。 如果客户在与您的助理对话过程中要求与某人通话,您可以直接将对话转给 Twilio Flex 代理。
准备工作
要使用这种集成模式,您需要
AI 助手构建器 (手机集成必备)
拥有以下产品的 Twilio 账户:
Twilio Flex
带有可编程语音 API 的 Twilio Voice
Twilio 工作室
添加 AI 助手手机集成
如果您已经在助手中添加了手机集成,则可以跳过本节。
如果需要添加电话集成,请按照以下步骤操作。
在助手主页 Integrations 部分的 Essential Channels 下,您将看到 Phone 的磁贴。
在 Phone 磁贴上,单击 Add 。
在弹出窗口中,再次单击 添加。
选择 使用外部提供商的现有电话号码。
完成电话集成设置过程。 有关更多信息,请参阅 与电话集成。
目前,您只需这样做。 有关配置电话集成的更多信息,请参阅 与电话集成。
添加 Twilio Flex 项目
需要一个新的或现有的 Twilio Flex 项目。
如果您需要 Twilio Flex 项目,可以通过以下步骤创建一个。
从项目下拉菜单中,单击 创建新项目。 指定项目名称,并验证账户信息。
在欢迎页面上,选择 Flex 作为新项目的 Twilio 产品。 填写问卷,然后单击 开始使用 Twilio 。
Flex 项目配置完成后,请返回 Twilio 控制台。 确保从下拉列表中选择了正确的项目。
在导航菜单中,单击 All Products & Services 图标。
单击 Twilio 可编程语音 > 设置 > 常规。
在 Enhanced Programmable SIP Features 下,将开关切换到 Enabled 。
创建呼叫流程
电话集成和 Twilio Flex 项目配置完成后,您必须使用 Twilio Studio 创建呼叫流,并提供(或移植)您希望助理使用的电话号码。
创建呼叫流程:
在导航菜单中,单击 All Products & Services 图标。
单击 工作室。
单击 + 创建新流程。
命名新流程,然后单击 Next 。
选择 从头开始,然后单击 下一步。 Trigger widget 会出现在流程画布中。
单击 Trigger widget。
URL中的值。 您需要在后续步骤中使用该值。
配置电话号码
在导航菜单中,单击 All Products & Services 图标。
单击 电话号码。
在 Manage Numbers 下,配置您希望助手使用的电话号码。 选择 Buy a Number 购买新号码,或 Port & Host 移植现有电话号码。
在 Active Numbers 列表中,单击新电话号码。
在语音和传真下,配置这些设置。
在 CONFIGURE WITH 字段中,选择 Webhook, TwiML Bins, Functions, Studio 或 Proxy。
对于 A CALL COMES IN,选择 Studio Flow。 从下拉列表中选择您的流程。
对于 PRIMARY HANDLER FAILS,选择 Studio Flow。 从下拉列表中选择您的流程。
进入 AI 助手用户界面,打开助手的手机集成设置。
在 Phone number 字段中,键入您在 Flex Studio 中配置的电话号码。
单击保存并退出。
测试您的电话号码
现在,您可以通过触发 Twilio Flex Flow 编辑器中的 Say/Play widget 来测试电话号码是否已连接到您的流程。
将 Say/Play widget 拖到流程画布上。
使用类似
I'm alive.这样的简单短语配置 Say/Play widget。将 Incoming call 节点从 Trigger widget 连接到 Say/Play widget。
拨打您的电话号码。 您应该能听到 Twilio 流量响应您的测试短语。
删除 Say/Play widget 并继续下一步。
如果测试没有达到预期效果,请仔细检查您的电话号码配置,确保它已连接到流量。
创建一个 Twilio 函数来处理来电
现在,您需要配置呼叫流,以便使用 Twilio 功能将呼入电话引导至助手。 遵循这些步骤进行操作:
在导航菜单中,单击 All Products & Services 图标。
单击服务。
单击 创建服务。 指定服务名称,然后单击 下一步。
单击 Add > Add Function 为您的服务添加新功能。 将新函数命名为
/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 不支持SIPSURI,但通过在 SIP URI 中附加;secure=true支持安全 SIP 中继。
单击保存。
单击 Deploy All。
重定向到来电处理程序
在 Studio Flow 编辑器中使用 TwiML Redirect widget 调用上一节创建的 /receive-call 函数。
在 Studio Flow 画布中添加 TwiML 重定向 widget。
将来电触发器连接到 TwiML 重定向 widget。
使用您在上一部分创建的
/receive-call功能URL 配置 TwiML小部件。现在,当接收到来电时,您的流程应自动转接至 AI 助手。
如果重定向失败,请确保部署了
/receive-call功能。
创建 Twilio 功能,处理来自助手的转账
您还需要配置呼叫流,以处理从助理转回 Twilio Flex 的呼叫,以应对客户要求与座席通话的情况。 在“ TwiML ”重定向小部件之后使用 “Say/Play ”小部件,以显示通话已从 AI 助手转回流程。 此时可以有很多选择,例如将呼叫排队等待在线客服人员接听,本节将对此进行讨论。
在画布上添加一个 Say/Play widget,并配置一个短语,如
Transfer from Watsom complete。将 Return 节点从 TwiML 重定向 widget 连接到您的 Say/Play widget。
单击 Trigger widget。
复制 URL中的值。 您需要在后续步骤中使用该值。
在 Twilio 功能页面,单击 Add > Add Function 为您的服务添加另一个新功能。 将此新函数命名为
/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。
单击保存。
单击 Deploy All。
创建此引用处理程序后,将URL 复制回
/receive-call处理程序的 referUrl 字段。
配置助手将呼叫转移到 Twilio Flex
现在,我们需要对助手进行配置,以便在客户要求与座席通话时将呼叫转移到 Twilio Flex。 遵循这些步骤进行操作:
在 AI 助手用户界面中,打开助手的对话技能。
添加一个节点,其中包含触发助理将客户转给代理的条件。
在节点上添加文本回复,并指定您希望助理在将客户转给代理之前说的话。
打开响应的 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": ""
}
}
]
}
此示例未展示如何使用从 AI 助手传递给 Twilio Flex 的上下文。 您可以在 Twilio Flex 流程中引用用户对用户信息:
{
"context": {
"widgets": {
"redirect_1": {
"User-to-User": "value",
}
}
}
}
其中 redirect_1 是重定向 widget 的名称。 例如,如果您设置了多个队列,您可能希望使用 Twilio Split widget 根据返回的上下文选择队列。
测试您的助手
您的助理现在应该可以接听拨打您电话号码的电话,并将电话转回您的 Twilio Flex 流程。 测试你的助手
拨打您的电话号码。 当助理回复时,请询问代理人。
您应该听到 Say/Play widget 中配置的短语(例如,"从 Watson 传输完成")。
如果转接失败,请通过控制台日志跟踪呼叫流程,观察其如何从流程流向
/receive-call处理程序,再到 AI 助手 ,接着转至转接处理程序,最后返回您的 Twilio Flex 流程。