Twilio Flex - 拒绝后向 IVR 发送呼叫
Twilio Flex - Send Call To IVR After Reject
使用 this plugin 作为参考,我将 Flex 配置为能够在代理接受呼叫后向 Twilio Studio IVR 发送呼叫。
我希望能够在座席拒绝呼叫时(即他们一单击拒绝按钮)将来电发送回 Studio。我试图通过向插件的 init
方法添加一个侦听器来做到这一点:
flex.Actions.addListener("afterRejectTask", async (payload, abortFunction) => {
let url: string = payload.task.attributes.transferToIvrUrl;
let menu: string = 'hangup';
await request(url, { CallSid: payload.sid, menu });
});
请参阅 here 了解完整的上下文——我几乎使用了那个确切的代码,并添加了这个侦听器。
我收到此错误消息,并且呼叫未转移到任何地方。
twilio-flex.unbundled-react.min.js:1574 Error on afterRejectTask: SyntaxError: Unexpected token < in JSON at position 0
如果有帮助,这里是来自控制台的附加上下文:
附加信息:
被请求的 url 是一个 Twilio 函数,它成功地 returns 像这样的响应:
<Response>
<Enqueue workflowSid="WWcc1a650e4175089538d754a6c2e15a98">
<Task>{"transferToIvrUrl": "https://my-twilio-function-service.twil.io/studio-flex-transfer-helper"}</Task>
</Enqueue>
</Response>
如有任何建议,我们将不胜感激。
啊,好的,所以在查看那个插件时我发现了 the example Twilio Function that works with it。据我所知,此函数旨在用于两个地方,要么在 Studio 中将呼叫转移到 Flex(尽管我不确定是否需要这样做),要么从 Flex 将呼叫转移回 Studio。触发不同响应的是您是否在请求中传递了一个名为 transferToIVRMenu
的参数。
您当前的请求未传递该参数,您目前有:
await request(url, { CallSid: payload.sid, menu });
这看起来与原始插件的请求相似:
await request(transferToIvrUrl, { CallSid: call_sid, transferToIVRMenu });
区别在于对象中的第二个 属性。当您只是在对象中传递变量的名称时,它会扩展为调用与变量同名的 属性 并将值设置为变量内的值。所以原始请求扩展为:
await request(transferToIvrUrl, { CallSid: call_sid, transferToIVRMenu: transferToIVRMenu });
但您的请求仅扩展为:
await request(url, { CallSid: payload.sid, menu: menu });
所以您传递的参数是 menu
而不是 transferToIVRMenu
,它会在后端触发函数到 return TwiML 而不是更新调用。
要解决此问题,您可以更新插件代码以发送 transferToIVRMenu
参数,例如:
flex.Actions.addListener("afterRejectTask", async (payload, abortFunction) => {
let url: string = payload.task.attributes.transferToIvrUrl;
let menu: string = 'hangup';
await request(url, { CallSid: payload.sid, transferToIVRMenu: menu });
});
使用 this plugin 作为参考,我将 Flex 配置为能够在代理接受呼叫后向 Twilio Studio IVR 发送呼叫。
我希望能够在座席拒绝呼叫时(即他们一单击拒绝按钮)将来电发送回 Studio。我试图通过向插件的 init
方法添加一个侦听器来做到这一点:
flex.Actions.addListener("afterRejectTask", async (payload, abortFunction) => {
let url: string = payload.task.attributes.transferToIvrUrl;
let menu: string = 'hangup';
await request(url, { CallSid: payload.sid, menu });
});
请参阅 here 了解完整的上下文——我几乎使用了那个确切的代码,并添加了这个侦听器。
我收到此错误消息,并且呼叫未转移到任何地方。
twilio-flex.unbundled-react.min.js:1574 Error on afterRejectTask: SyntaxError: Unexpected token < in JSON at position 0
如果有帮助,这里是来自控制台的附加上下文:
附加信息:
被请求的 url 是一个 Twilio 函数,它成功地 returns 像这样的响应:
<Response>
<Enqueue workflowSid="WWcc1a650e4175089538d754a6c2e15a98">
<Task>{"transferToIvrUrl": "https://my-twilio-function-service.twil.io/studio-flex-transfer-helper"}</Task>
</Enqueue>
</Response>
如有任何建议,我们将不胜感激。
啊,好的,所以在查看那个插件时我发现了 the example Twilio Function that works with it。据我所知,此函数旨在用于两个地方,要么在 Studio 中将呼叫转移到 Flex(尽管我不确定是否需要这样做),要么从 Flex 将呼叫转移回 Studio。触发不同响应的是您是否在请求中传递了一个名为 transferToIVRMenu
的参数。
您当前的请求未传递该参数,您目前有:
await request(url, { CallSid: payload.sid, menu });
这看起来与原始插件的请求相似:
await request(transferToIvrUrl, { CallSid: call_sid, transferToIVRMenu });
区别在于对象中的第二个 属性。当您只是在对象中传递变量的名称时,它会扩展为调用与变量同名的 属性 并将值设置为变量内的值。所以原始请求扩展为:
await request(transferToIvrUrl, { CallSid: call_sid, transferToIVRMenu: transferToIVRMenu });
但您的请求仅扩展为:
await request(url, { CallSid: payload.sid, menu: menu });
所以您传递的参数是 menu
而不是 transferToIVRMenu
,它会在后端触发函数到 return TwiML 而不是更新调用。
要解决此问题,您可以更新插件代码以发送 transferToIVRMenu
参数,例如:
flex.Actions.addListener("afterRejectTask", async (payload, abortFunction) => {
let url: string = payload.task.attributes.transferToIvrUrl;
let menu: string = 'hangup';
await request(url, { CallSid: payload.sid, transferToIVRMenu: menu });
});