如何结束与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"
});
});
}
});
});
});
如果有帮助请告诉我!
一个会议已开始,有两名参与者。如果有人挂断电话,会议仍在进行中,如果与会者人数低于 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"
});
});
}
});
});
});
如果有帮助请告诉我!