如何在Twilio中区分已应答和未应答的来电?

时间:2016-05-12 14:07:19

标签: node.js twilio

我正在开发一个Node.js网络应用程序,该应用程序使用Twilio向用户发出呼叫。这一切都很顺利,但我正在努力弄清楚如何区分已接听电话和未接电话。进行调用的代码如下所示:

client.makeCall({
  to: to,
  from: config.sendingNumber,
  url: config.baseUrl + '/call-answered?' + queryString,
  method: 'GET',
  statusCallback: config.baseUrl + '/call-status?' + queryString,
  statusCallbackMethod: 'GET',
  statusCallbackEvent: 'answered',
});

(对于它的价值,queryString只是让我为用户传递一个标识符,以便我可以做适当的事情。)

目前似乎工作的方式是url仅在用户应答呼叫时被调用(并且它为呼叫提供标记),而statusCallback似乎被调用,无论呼叫是否在没有回答的情况下被回答或被解雇(无论哪种方式,req.query.CallStatus被设置为in-progress)。因此,我现在可以肯定地检测到接听电话,但无法确定何时未接听电话(除了等待和观看,这是非理想的)。

理想情况下,我想 a)只有在未接听电话时才会触发回拨,或者 b)会收到一些让我们接听的电话状态信息我区分了接听电话和未接电话。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

您可以通过提供多个Workflow来指定多个事件。

// Download the Node helper library from twilio.com/docs/node/install
// These vars are your accountSid and authToken from twilio.com/user/account
var accountSid = 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
var authToken = "AUTH_TOKEN";
var client = require('twilio')(accountSid, authToken);

client.calls.create({
    url: "http://demo.twilio.com/docs/voice.xml",
    to: "+14155551212",
    from: "+18668675309",
    statusCallback: "https://www.myapp.com/events",
    statusCallbackMethod: "POST",
    statusCallbackEvent: ["answered", "completed"],
    method: "GET"
}, function(err, call) {
    process.stdout.write(call.sid);
});

现在,无论给出以下completed值,都会触发CallStatus事件:(busycanceledcompletedfailed ,或no-answer)。

然而,真正的诀窍是,如果呼叫到达应答机,它将被视为answered。我已经写了StatusCallbackEvent values来讨论使用blog post检测人是否接听电话的方法。

答案 1 :(得分:1)

最后,我设法通过completed事件得到了这项工作,正如Megan Speir所建议的那样(谢谢!),但路线略有不同。

出于某种原因,无论我是回答还是挂机,我似乎都会获得in-progress电话状态(我永远不会得到,例如。canceled)。但是,因为主URL仅在成功应答呼叫时被呼叫,所以我能够通过在应答呼叫时将呼叫状态变量设置为call-answered来区分已应答和未应答呼叫,然后检查此completed事件回调中的值 - 即。如果它被设置为call-answered,则这是成功应答呼叫的结束;否则就是未接来电的结束。这似乎适用于被解雇的电话和转发电话的电话(至少我正在测试的电话)。