2016-03-16 2 views
-2

Открыта конференция с двумя участниками. Если кто-то повесил трубку, конференция все еще открыта, и я хочу, чтобы эта конференция зависала, если количество участников ниже 2.Как завершить конференцию с помощью node.js?

Любые идеи, как реализовать это в node.js?

Это код конференции:

resp.say({voice:'woman'}, 'You get to the conference.') 
    .dial({},function(err){ 
     if(err){ 
      console.log(err); 
     } 
     this.conference('example'); 
    }); 
+0

Вау, почему это проголосовали? – nova

ответ

1

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

Сообщите мне, если это поможет!

+0

Но у него не должно быть мод, и было бы проблемой, если вызов закрыт только одним человеком, покидающим конференцию. – nova

+0

Эй @ Изабелл, я обновил свой ответ с другой возможностью. Взгляните и дайте мне знать. – philnash

+0

Ответ на следующий ответ - отличный. Я использую тот же самый код в производстве прямо сейчас, чтобы убедиться, что на конференции собрано не более двух человек. – StevenDStanton

0

В ES6:

let participants = 0; 

conference.on('connect',() => { 
    participants++; 
}) 

conference.on('disconnect',() => { 
    participants--; 
    if (participants < 2) conference.end(); 
}) 
+0

Конференция не определена, если я использую ее следующим образом:/ – nova

+0

Это был просто пример, демонстрирующий логику. –

Смежные вопросы