如何结束与node.js的会议?

时间:2016-03-16 12:42:56

标签: node.js twilio twiml

会议开放,有两名与会者。如果有人挂机,会议仍然开放,如果参加人数低于2,我希望会议挂断。

任何想法如何在node.js中实现这一点?

这是会议代码:

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

2 个答案:

答案 0 :(得分:2)

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"而其他参与者有假(或者没有属性) ,因为它默认是假的)。这样,当您结束通话时,整个会议将结束,但如果其中一个参与者结束通话,则不会为所有人结束。

听起来怎么样?

修改

好的,不是解决方案。在这种情况下,您需要为每个要检查的呼叫设置<Dial>动词的回调,当有人挂断时,会议中是否只剩下一个人,如果少于两个人则挂断。< / p>

你可以这样做:

当您使用<Dial>然后<Conference>设置初始会议TwiML时,您需要将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"
          });
        });
      }
    });
  });
});

如果有帮助,请告诉我!

答案 1 :(得分:0)

在ES6中:

let participants = 0;

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

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