Twilio会议通话中按键触发交互并收集用户输入的实现咨询
当然可行啦!这在Twilio的可编程语音体系里是完全能实现的,我给你一步步拆解具体怎么做,还有代码示例参考:
核心实现思路
其实就是利用Twilio对会议参与者DTMF按键的监听能力,当被叫方按下*键时,触发一个Webhook事件,在事件处理逻辑里播放提示音并收集用户输入,最后再把用户拉回会议。
具体实现步骤&代码示例
我用Twilio Functions来演示(不用自己搭服务器,Twilio自带的运行环境,很方便):
1. 配置会议加入逻辑
先创建一个处理用户加入会议的函数,这里要开启DTMF事件的监听,指定回调地址:
exports.handler = function(context, event, callback) { const twiml = new Twilio.twiml.VoiceResponse(); // 创建会议 const conference = twiml.conference('我的会议'); // 监听参与者的DTMF按键,按下后把事件发送到/handle-dtmf这个函数 conference.on('dtmf', { method: 'POST', url: '/handle-dtmf' }); callback(null, twiml); };
2. 处理*键触发的事件
创建handle-dtmf函数,专门处理DTMF按键事件,判断是否是*键,是的话播放提示音并收集输入:
exports.handler = function(context, event, callback) { const twiml = new Twilio.twiml.VoiceResponse(); // 检查用户按下的是不是*键 if (event.Digits === '*') { // 用文字转语音播放提示,也可以用<Play>播放自定义音频文件 twiml.say('请按下您的选项,1 对应选项一,2 对应选项二'); // 收集1位数字输入,收集完成后发送到/handle-input处理 const gather = twiml.gather({ numDigits: 1, method: 'POST', action: '/handle-input', timeout: 10 // 10秒没输入就超时返回会议 }); // 超时或者用户没输入的话,重新拉回会议 twiml.redirect('/join-conference'); } else { // 如果不是*键,直接返回会议 twiml.redirect('/join-conference'); } callback(null, twiml); };
3. 处理用户输入的选项
最后创建handle-input函数,根据用户输入的数字做对应处理,之后再把用户拉回会议:
exports.handler = function(context, event, callback) { const twiml = new Twilio.twiml.VoiceResponse(); const userChoice = event.Digits; // 根据用户选择给出反馈 switch(userChoice) { case '1': twiml.say('您选择了选项一,即将返回会议'); break; case '2': twiml.say('您选择了选项二,即将返回会议'); break; default: twiml.say('无效的输入,即将返回会议'); } // 跳转回会议逻辑,让用户继续参会 twiml.redirect('/join-conference'); callback(null, twiml); };
一些注意事项
- 如果你不用Twilio Functions,自己搭服务器的话,要确保Webhook URL是公开可访问的,并且能处理Twilio的POST请求
- 提示音可以换成自定义音频,把
<Say>换成<Play>就行,比如twiml.play('https://你的域名/提示音.mp3') - 默认情况下,提示音只会播放给按下*键的被叫方,不会打扰其他参会者;如果需要广播给所有人,可以调整会议的动作参数
- 可以根据需求修改
<Gather>的参数,比如numDigits设置收集多位输入,timeout调整超时时间
内容的提问来源于stack exchange,提问作者Dipali Jawale
相关产品推荐
相关产品推荐

