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

如何在Voximplant中实现接收客户的DTMF信号(如分机号输入场景)

在Voximplant平台接收并处理DTMF信号的实现方法

核心逻辑

Voximplant通过Call对象的dtmfReceived事件捕获用户发送的DTMF信号,基于这个事件就能实现分机号输入、按键选择这类交互场景。

步骤1:绑定DTMF事件监听

通话建立完成后,给当前Call实例绑定dtmfReceived事件监听器,用户每按下一个按键,事件会返回对应的按键值(如"1"、"#"、"*")。

步骤2:分机号输入场景的具体处理

针对分机号输入需求,你需要做这些操作:

  • 维护变量存储用户输入的按键序列
  • 设置输入超时(比如5秒),用户超过时限未继续输入则判定输入完成
  • 限制分机号最大长度(比如4位),达到长度后直接触发后续逻辑
  • 输入完成后,根据收集到的分机号执行转接、提示等操作

完整代码示例

// 初始化变量
let extInput = '';
let inputTimer = null;
const MAX_EXT_LENGTH = 4;
const INPUT_TIMEOUT = 5000; // 5秒超时

// 通话振铃阶段触发
VoxEngine.addEventListener(AppEvents.CallAlerting, (e) => {
  const call = e.call;
  call.answer();

  // 播放引导提示
  call.say('请输入分机号,按井号结束');

  // 监听DTMF信号
  call.addEventListener(CallEvents.DTMFReceived, (dtmfEvent) => {
    const digit = dtmfEvent.digit;

    // 按#号直接结束输入
    if (digit === '#') {
      clearTimeout(inputTimer);
      processExtension(extInput);
      return;
    }

    // 收集数字按键
    if (!isNaN(parseInt(digit))) {
      extInput += digit;
      // 重置超时定时器
      clearTimeout(inputTimer);
      inputTimer = setTimeout(() => {
        processExtension(extInput);
      }, INPUT_TIMEOUT);

      // 达到最大长度直接处理
      if (extInput.length === MAX_EXT_LENGTH) {
        clearTimeout(inputTimer);
        processExtension(extInput);
      }
    }
  });
});

// 分机号处理逻辑
function processExtension(extension) {
  if (!extension) {
    // 空输入提示重试
    VoxEngine.getCurrentCall().say('分机号不能为空,请重新输入');
    extInput = '';
    return;
  }

  // 根据分机号执行对应操作
  switch (extension) {
    case '1001':
      VoxEngine.getCurrentCall().say('正在转接技术支持');
      VoxEngine.callUser('tech_support', VoxEngine.getCurrentCall());
      break;
    case '1002':
      VoxEngine.getCurrentCall().say('正在转接客服中心');
      VoxEngine.callUser('customer_service', VoxEngine.getCurrentCall());
      break;
    default:
      VoxEngine.getCurrentCall().say('您输入的分机号不存在,请重新输入');
      extInput = '';
      break;
  }
}

额外注意点

  • 可根据业务需求调整超时时间、分机号长度和转接逻辑
  • 若需支持取消输入(比如按*号),可在DTMF事件中添加对应分支处理
  • 处理完输入后记得重置变量和定时器,避免影响后续交互

内容的提问来源于stack exchange,提问作者Ksenia Cherkasova

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:06:32