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

Node环境下能否通过Gather同时采集语音与按键数字?

如何用Node配置Twilio Gather同时接收按键和语音输入

完全可以实现,Twilio的Gather组件支持同时监听DTMF按键数字和语音输入,只需简单配置参数就能搞定。下面是具体实现方案和代码示例:

核心配置要点

要让Gather同时接收两种输入,只需将Gather的input参数设置为"dtmf voice"。这个参数指定了Gather需要监听的输入类型,同时包含dtmf(按键)和voice(语音)即可。

Node代码实现示例

这里用Express框架实现(Twilio语音开发的常规选型),步骤如下:

  1. 先安装依赖:
npm install express twilio
  1. 编写业务代码:
const express = require('express');
const twilio = require('twilio');
const VoiceResponse = twilio.twiml.VoiceResponse;

const app = express();
app.use(express.urlencoded({ extended: true }));

// 处理来电的初始路由,返回带Gather的TwiML
app.post('/incoming-call', (req, res) => {
  const twiml = new VoiceResponse();
  
  const gather = twiml.gather({
    input: 'dtmf voice', // 同时监听按键和语音输入
    finishOnKey: '#', // 可选:用户按#键直接结束输入
    timeout: 5, // 5秒无输入自动提交
    action: '/handle-input', // 处理输入结果的路由
    method: 'POST'
  });
  gather.say('欢迎来电,请按数字转接对应部门,或直接说出您的需求');

  // 超时无输入时,重新提示用户
  twiml.redirect('/incoming-call');

  res.type('text/xml');
  res.send(twiml.toString());
});

// 处理用户输入结果的路由
app.post('/handle-input', (req, res) => {
  const twiml = new VoiceResponse();
  const { Digits, SpeechResult } = req.body;

  if (Digits) {
    // 用户输入了按键数字,根据数字转接对应部门
    switch (Digits) {
      case '1':
        twiml.dial('+1234567890'); // 替换为部门1的实际号码
        break;
      case '2':
        twiml.dial('+0987654321'); // 替换为部门2的实际号码
        break;
      default:
        twiml.say('输入的数字无效,请重新输入');
        twiml.redirect('/incoming-call');
    }
  } else if (SpeechResult) {
    // 用户输入了语音,采集并处理(示例中打印到控制台,实际可存数据库或调用AI分析)
    console.log('采集到的语音内容:', SpeechResult);
    twiml.say(`您说的是${SpeechResult},我们会尽快为您处理`);
    twiml.hangup();
  } else {
    // 未检测到有效输入,重新引导用户
    twiml.say('未检测到有效输入,请重新操作');
    twiml.redirect('/incoming-call');
  }

  res.type('text/xml');
  res.send(twiml.toString());
});

app.listen(3000, () => {
  console.log('服务器运行在端口3000');
});

关键逻辑说明

  • input: 'dtmf voice':这是实现双输入支持的核心配置,缺一不可
  • 在/handle-input路由中,通过req.body.Digits判断是否为按键输入,req.body.SpeechResult判断是否为语音输入,分别处理转接和语音采集逻辑
  • finishOnKey和timeout参数可以根据业务需求调整,优化用户体验

内容的提问来源于stack exchange,提问作者Ruchir Baronia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 10:11:01