You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:16:43