Twilio разработчик евангелист здесь.
Вы можете использовать атрибут <Conference>
endConferenceOnExit="true"
, чтобы остановить вызов, если участник ушел. В своем коде, который будет выглядеть так:
resp.say({voice:'woman'}, 'You get to the conference.')
.dial({},function(err){
if(err){
console.log(err);
}
this.conference('example', { endConferenceOnExit: true });
});
В вашем случае с двумя людьми на конференции, которая будет работать, как и следовало ожидать, однако, если бы больше людей присоединиться к конференции с этим атрибутом, а затем, когда один из них оставляет конец будет завершен. В этом случае нормально иметь модератора (вы, скорее всего, задали другие вопросы, которые я видел, когда вы спрашиваете о SO в последнее время :) имеют атрибут endConferenceOnExit="true"
, а остальные участники имеют false (или не имеют атрибута, так как это false по умолчанию). Таким образом, когда вы закончите свой звонок, вся конференция будет завершена, но если один из участников завершит вызов, это не закончится для всех.
Как это звучит?
Редактировать
ОК, а не решение. В этом случае вам нужно настроить обратный вызов для глагола <Dial>
для каждого вызова для проверки, когда кто-то вешает трубку, остается ли один человек на конференции и вешать трубку, если ее меньше двух.
Вы можете сделать это следующим образом:
При настройке начальной конференции TwiML помощью <Dial>
и затем <Conference>
вам нужно пройти action
attribute к <Dial>
с URL в качестве аргумента, например так:
resp.say({voice:'woman'}, 'You get to the conference.')
.dial({ action: "/call_ended" },function(err){
if(err){
console.log(err);
}
this.conference('example');
});
Теперь, when a caller ends their call the action
URL will receive a webhook from Twilio. Затем мы можем проверить participants in the conference и завершить конференцию, by setting the call status to complete, если останется только один человек.
app.post("/call_ended", function(req, res, next) {
// Find the conference by its name. You may already have the Conference SID stored
client.conferences.list({ friendlyName: "example" }, function(err, data) {
var conferenceSid = data.conferences[0].sid;
// Find the participants left in the conference
client.conferences(conferenceSid).participants.list(function(err, data) {
if(data.participants.length < 2){
// Loop over the remaining participants (should only be 1)
data.participants.forEach(function(participant) {
// Update the call and set the status to "completed"
client.calls(participant.callSid).update({
status: "completed"
});
});
}
});
});
});
Сообщите мне, если это поможет!
Вау, почему это проголосовали? – nova