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

关于VoxEngine.callPSTN外呼后处理语音菜单与分机的技术咨询

企业外呼脚本后续流程实现方案

1. 语音菜单监听与分机选择:用call.sendDigits()完全可行

没错,call.sendDigits()就是VoxEngine里发送DTMF按键(对应分机号选择)的标准方法,完美适配语音菜单场景。

  • 操作逻辑:在CallEvents.Connected触发后,先给语音菜单留2-3秒的播放缓冲时间(用VoxEngine.wait()实现),避免按键发送过早被系统忽略;之后直接传入分机号字符串调用方法即可。
  • 代码片段:
call.addEventListener(CallEvents.Connected, () => {
  // 等待语音菜单加载播放
  VoxEngine.wait(2500, () => {
    // 发送目标分机号,示例为转108分机
    call.sendDigits("108");
  });
});

2. 分机转接事件处理

需要监听两个核心事件来覆盖转接流程:

  • CallEvents.Transfer:捕获通话被发起转接的动作,可以在这里记录转接目标、打印日志;
  • CallEvents.Connected:转接完成后,新的通话链路会再次触发这个事件,用来确认转接后的通话已接通。
  • 操作逻辑:
    1. 提前绑定CallEvents.Transfer事件,标记通话进入转接状态;
    2. 在CallEvents.Connected的回调里,通过状态判断区分首次接通和转接后接通,执行对应逻辑。
  • 代码片段:
let isTransferred = false;

call.addEventListener(CallEvents.Transfer, (event) => {
  console.log(`通话已转接到: ${event.target}`);
  isTransferred = true;
});

call.addEventListener(CallEvents.Connected, () => {
  if (isTransferred) {
    // 转接完成后执行后续操作
    console.log("转接后的通话已接通");
  }
});

3. call.say()的正确使用

  • 触发时机:必须在通话处于Connected状态时调用——要么是首次接通后(无需转接的场景),要么是转接后的Connected事件触发时。
  • 进阶用法:可以指定语言、语速等参数,还能通过回调函数在语音播放完成后执行后续动作(比如挂断)。
  • 代码片段:
// 转接完成后播放语音示例
call.addEventListener(CallEvents.Connected, () => {
  if (isTransferred) {
    call.say("您好,这里是自动外呼系统,本次来电是告知您最新的业务通知...", {
      language: "zh-CN",
      rate: 1.1
    }, () => {
      // 语音播放完毕后挂断通话
      call.hangup();
    });
  }
});

完整流程算法

  1. 用VoxEngine.callPSTN()发起外呼,绑定CallEvents.Connected事件;
  2. 首次Connected触发后,等待语音菜单播放完成,调用call.sendDigits()发送分机号;
  3. 绑定CallEvents.Transfer事件监听转接动作,标记转接状态;
  4. 转接后的Connected事件触发时,调用call.say()播放预设语音;
  5. 语音播放完成后,根据业务需求执行挂断或其他操作。

内容的提问来源于stack exchange,提问作者Николай Глобин

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 20:03:18