会议开放,有两名与会者。如果有人挂机,会议仍然开放,如果参加人数低于2,我希望会议挂断。
任何想法如何在node.js中实现这一点?
这是会议代码:
resp.say({voice:'woman'}, 'You get to the conference.')
.dial({},function(err){
if(err){
console.log(err);
}
this.conference('example');
});
答案 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();
})