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

How to end conference with node.js?

一个会议已开始,有两名参与者。如果有人挂断电话,会议仍在进行中,如果与会者人数低于 2,我希望会议挂断。

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

这是会议代码:

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

在 ES6 中:

let participants = 0;

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

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

这里是 Twilio 开发人员布道者。

如果参与者离开,您可以使用 <Conference> attribute 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>动词的回调,检查有人挂断时,会议是否只剩下一个人,少于两个就挂断。

你可以这样做:

当您使用 <Dial><Conference> 设置初始会议 TwiML 时,您需要传递一个 action attribute to <Dial> with a 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. We can then check the participants in the conference and end 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"
          });
        });
      }
    });
  });
});

如果有帮助请告诉我!