2016-05-12 8 views
1

Ich arbeite an einer Node.js-Webanwendung, die Twilio verwendet, um einen Anruf an einen Benutzer zu richten. Es funktioniert alles gut, aber ich habe Mühe herauszufinden, wie man einen beantworteten Anruf von einem unbeantworteten Anruf unterscheidet. Der Code, der den Anruf tätigt sieht wie folgt aus:Wie kann man in Twilio zwischen einem beantworteten und einem unbeantworteten Anruf unterscheiden?

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

(Für das, was es wert ist, queryString lässt mich nur eine Kennung für den Benutzer übergehen, damit ich entsprechende Dinge tun).

So wie die Dinge derzeit zu funktionieren scheint, ist, dass url nur aufgerufen wird, wenn der Benutzer den Anruf entgegennimmt (und es bietet das Markup für den Anruf), während statusCallback genannt zu werden scheint, ob der Anruf entgegengenommen wird oder es ist entlassen, ohne antworten (und in jedem Fall wird req.query.CallStatus als in-progress festgelegt). So kann ich derzeit einen beantworteten Anruf zwar positiv erkennen, habe aber keine Möglichkeit sicher zu wissen, wenn ein Anruf nicht beantwortet wird (anders als nur warten und sehen, was nicht ideal ist).

Im Idealfall würde Ich mag entweder a) hat einen Rückruf, der nur dann, wenn der Anruf ausgelöst wird, nicht beantwortet wird, oder b) einige Anrufstatus Info erhalten, die ich unterscheide zwischen einem beantworteter Anruf und läßt man, dass wurde nicht beantwortet. Jede Hilfe würde sehr geschätzt werden!

Antwort

1

Am Ende gelang es mir, dies funktioniert über die completed Veranstaltung, wie von Megan Speir vorgeschlagen (danke!), Aber auf einem etwas anderen Weg.

Aus irgendeinem Grund scheint ich einen in-progress Status für Anrufe zu bekommen, ob ich sie beantworte oder auflege (ich bekomme nie, zB. canceled). Da jedoch die Haupt-URL nur auf einem erfolgreichen beantworteter Anruf genannt wird, konnte ich zwischen einen antwortete und unbeantworteten Anruf unterscheiden, indem ein Anruf-Statusvariablen zu call-answered Einstellung, wenn ein Anruf beantwortet wurde, und dann für diesen Wert in der Callback-Überprüfung für das completed Ereignis - dh. Wenn es auf call-answered eingestellt ist, ist dies das Ende eines erfolgreich beantworteten Anrufs; andernfalls ist es das Ende eines unbeantworteten Anrufs. Dies scheint sowohl für abgewiesene Anrufe als auch für solche zu funktionieren, die auf einen Anrufbeantworter gehen (zumindest mit dem Telefon, mit dem ich gerade teste).

2

können Sie mehrere Ereignisse angeben, indem StatusCallbackEvent values mehr bereitstellt.

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

Nun, das completed Ereignis unabhängig abgefeuert wird die folgende CallStatus Werte gegeben: (busy, canceled, completed, failed oder no-answer). jedoch

Der eigentliche Trick ist, dass, wenn der Anruf über einen Anrufbeantworter erreicht wird answered in Betracht gezogen werden. Ich habe dieses blog post geschrieben, um über eine Möglichkeit zu sprechen, die Sie umgehen können, die <Gather> verb verwendend, um festzustellen, ob ein Mensch das Telefon beantwortet.

+0

Danke für die Antwort! Das sieht definitiv vielversprechend aus, scheint aber das Problem nicht auszuräumen, dass selbst wenn ich den Anruf ablehne, der Anrufstatus immer noch "in Bearbeitung" ist. Ich habe es mit beiden Ereignissen versucht, wie Sie vorschlagen, aber ob ich den Anruf antworte oder verwerfe, bekomme ich immer noch die gleichen Status ("in-progress", gefolgt von "complete"). Also, wenn ich etwas nicht verpasse, kann ich immer noch nicht unterscheiden zwischen beantworteten und unbeantworteten Anrufen ... –

+0

(Obwohl ich das gesagt habe, könnte der "abgeschlossene" Status für mich ausreichen, um das zu tun, was ich tun muss .. Werde das testen, wahrscheinlich aber am Montag!Danke nochmal) –

+0

Lass mich wissen wie es geht Nick! –

Verwandte Themen