启用机器检测的 Twilio 语音 api 调用顺序 url 和 statusCallback

Twilio Voice api order of calling url and statusCallback with machine detection enabled

在进行 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();

(来自 here

我很难弄清楚 url 是在 statusCallback 之前调用还是相反?

我看到当 machineDetection 在调用中启用时(给定 here)如果 Answered_bymachine_start 那么 statusCallback 被调用 before url(提供 twiml)。

虽然在一个案例中我发现如果 machineDetection 启用并且 Answered_byhuman(即它检测到有人接听电话),我看到 url 首先调用。

那么调用 urlstatusCallback 的预期顺序是什么? (假设我已设置 statusCallback 被呼叫进行中的呼叫)

此处为 Twilio 开发人员布道师。

来自 documentation on calls,这里有一些关于 statusCallback 的其他细节:

A URL that Twilio will send asynchronous webhook requests to on every call event specified in the StatusCallbackEvent parameter. If no event is specified, Twilio will send completed by default.

StatusCallbackEvent参数可以设置为发起、响铃、接听、完成中的任意一个或多个。

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

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

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