首页 > 解决方案 > 启用机器检测的调用 url 和 statusCallback 的 Twilio Voice api 顺序

问题描述

在进行 twilio 调用时,我们有一个url和一个statusCallback像这样的参数:

client.calls
  .create({
     method: 'GET',
     statusCallback: 'https://www.myapp.com/events',
     statusCallbackMethod: 'POST',
     statusCallbackEvent: ['completed', 'answered'],
     url: 'http://demo.twilio.com/docs/voice.xml',
     to: '+14155551212',
     from: '+18668675310'
   })
  .then(call => console.log(call.sid))
  .done();

(从这里

我很难弄清楚是否在 theurl之前调用了statusCallback,反之亦然?

我看到 whenmachineDetection在调用中启用(如此给出)如果Answered_bymachine_start,则在(提供 twiml)之前statusCallback调用。url

在一种情况下,我发现如果machineDetection启用并且Answered_by已启用human(即它检测到有人接听电话),我url首先看到了被叫。

那么调用urland的预期顺序是statusCallback什么?(假设我已经设置statusCallback为正在进行的通话)

标签: twiliotwilio-api

解决方案


Twilio 开发人员布道者在这里。

关于调用的文档中,这里有一些关于的其他细节statusCallback

Twilio 将在 StatusCallbackEvent 参数中指定的每个调用事件上向其发送异步 Webhook 请求的 URL。如果未指定事件,Twilio 将默认发送完成

StatusCallbackEvent参数可以设置为启动、振铃、应答和完成中的任何一个或多个。

由于您没有事件设置,因此您使用的是默认completed事件。通话结束后应触发此事件。如果您在调用 URL 之前看到它触发,您是否使用其他事件?

另一件事是这些事件与调用异步触发。即使ringing事件被触发,当您的 Web 服务器响应它时,调用可能已经结束。所以我会为通话的状态进行防御性编程,而不是假设通话肯定在进行中。

更清楚的是:事件是异步触发的,因此您不能保证answered回调将在url获取参数之前或之后触发。


推荐阅读