如何通过TwiML Bin实现Twilio多号码振铃并接入会议?
解决Twilio号码同时呼叫多号码并接入会议的问题
你的问题出在当前TwiML的调用逻辑上:<Dial>标签下连续放置多个<Number>是串行呼叫——Twilio会优先拨打第一个号码,一旦对方接听,就会停止拨打第二个号码,自然无法让两个号码都接入会议。
要实现两个号码持续振铃直至接听、并全部接入会议的需求,需要改用主动发起双呼叫+会议转接的方案,具体步骤如下:
1. 核心逻辑说明
当主叫拨打你的Twilio号码时:
- 先让主叫进入预设的会议房间(可搭配等待音)
- 通过Twilio API同时发起对两个目标号码的呼出请求
- 每个目标号码接听后,自动转接至同一个会议房间
2. 具体实现代码
步骤1:创建转接会议的TwiML Bin
新建一个TwiML Bin,内容为将接听方接入会议:
<?xml version="1.0" encoding="UTF-8"?> <Response> <Dial> <Conference>MyTeamConference</Conference> </Dial> </Response>
记下这个TwiML Bin的SID,后续会用到。
步骤2:创建Twilio Function触发双呼叫
新建一个Twilio Function(Node.js环境),用来处理来电并发起两个呼出呼叫:
exports.handler = function(context, event, callback) { const client = context.getTwilioClient(); // 配置参数 const conferenceName = 'MyTeamConference'; const targetNumbers = ['XXX-XXX-XXXX', 'YYY-YYYYYY']; // 替换为你的两个目标号码 const twilioNumber = context.TWILIO_PHONE_NUMBER; // 在Function环境变量中配置你的Twilio号码 const redirectTwimlUrl = `https://handler.twilio.com/twiml/${context.CONFERENCE_TWIML_SID}`; // 替换为步骤1的TwiML Bin SID // 批量发起呼叫 Promise.all( targetNumbers.map(number => { return client.calls.create({ to: number, from: twilioNumber, url: redirectTwimlUrl }); }) ) .then(() => { // 让主叫进入会议 const twiml = new Twilio.twiml.VoiceResponse(); // 可选:添加等待音,主叫在等待对方接听时会听到 twiml.dial().conference({ waitUrl: 'https://api.twilio.com/cowbell.mp3' }, conferenceName); callback(null, twiml); }) .catch(err => { console.error('发起呼叫失败:', err); callback(err); }); };
在Function的环境变量中添加:
TWILIO_PHONE_NUMBER:你的Twilio号码CONFERENCE_TWIML_SID:步骤1中TwiML Bin的SID
步骤3:关联Twilio号码与Function
将你的Twilio号码的"A Call Comes In"配置为"Function",选择刚才创建的Function即可。
3. 验证效果
当有来电拨打你的Twilio号码时:
- 主叫会进入会议并听到等待音
- 两个目标号码同时开始振铃
- 任意一个号码接听后,直接进入会议;另一个号码继续振铃,接听后也会接入会议
- 最终三方(主叫+两个被叫)在会议中连通
内容的提问来源于stack exchange,提问作者T. Reese
相关产品推荐
相关产品推荐

