关于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:转接完成后,新的通话链路会再次触发这个事件,用来确认转接后的通话已接通。- 操作逻辑:
- 提前绑定
CallEvents.Transfer事件,标记通话进入转接状态; - 在
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(); }); } });
完整流程算法
- 用
VoxEngine.callPSTN()发起外呼,绑定CallEvents.Connected事件; - 首次
Connected触发后,等待语音菜单播放完成,调用call.sendDigits()发送分机号; - 绑定
CallEvents.Transfer事件监听转接动作,标记转接状态; - 转接后的
Connected事件触发时,调用call.say()播放预设语音; - 语音播放完成后,根据业务需求执行挂断或其他操作。
内容的提问来源于stack exchange,提问作者Николай Глобин
相关产品推荐
相关产品推荐

