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 });
});