如何在Dialogflow CX与Voximplant机器人中播放打字音效替代拨号音?
在Dialogflow CX + Voximplant机器人中实现等待时的打字音效播放
准备工作
- 制作或下载一段短时长的循环打字音效文件(推荐WAV/MP3格式),上传到Voximplant控制台的媒体库中,记录好文件名称(例如
typing-loop.wav)。
1. Voximplant端核心逻辑实现
在Voximplant的应用场景脚本中,通过以下步骤控制音效播放:
- 关闭默认拨号音:用户接入通话时,禁用系统默认拨号音,避免和打字音效冲突
VoxEngine.addEventListener(AppEvents.CallAlerting, (e) => { // 启动早媒体,关闭默认拨号音 e.call.startEarlyMedia(); });
- 触发打字音效:当需要向Dialogflow CX发送请求(比如用户说完话后),立即启动循环播放打字音效
let typingPlayer; // 保存音效播放器实例,方便后续停止 // 监听用户语音输入结束事件 userCall.addEventListener(CallEvents.SpeechRecognitionResult, (e) => { // 启动打字音效循环播放 typingPlayer = userCall.startPlayback('typing-loop.wav', { loop: true }); // 将识别结果发送给Dialogflow CX处理 dialogflowCX.query(e.text); });
- 停止音效并播放回复:收到Dialogflow CX的回复后,立即停止打字音效,转而播放机器人回复
dialogflowCX.addEventListener(DialogflowCXEvents.Response, (e) => { // 停止打字音效 if (typingPlayer) { typingPlayer.stop(); typingPlayer = null; } // 播放Dialogflow CX返回的回复内容 userCall.say(e.responseText, { language: 'zh-CN' }); });
2. Dialogflow CX侧的配合优化
如果你的机器人使用Webhook处理复杂业务逻辑(比如调用外部接口),可以在Webhook的不同阶段给Voximplant发送信号:
- Webhook开始执行时,通知Voximplant启动打字音效;
- Webhook处理完成返回结果时,通知Voximplant停止音效并播放回复。
3. 异常场景处理
避免因Dialogflow CX超时或错误导致音效一直播放,添加异常监听:
dialogflowCX.addEventListener(DialogflowCXEvents.Error, (e) => { if (typingPlayer) { typingPlayer.stop(); } userCall.say('抱歉,当前系统暂时无法响应,请稍后再试'); }); // 监听Dialogflow CX超时事件 dialogflowCX.addEventListener(DialogflowCXEvents.Timeout, () => { if (typingPlayer) { typingPlayer.stop(); } userCall.say('请求超时,请您再重复一遍问题'); });
内容的提问来源于stack exchange,提问作者user19933337
相关产品推荐
相关产品推荐

