Twilio来电Webhook问题:发送DTMF后无法录制后续通话
问题分析与修复方案
你的代码逻辑顺序搞反了,这才导致DTMF音没起作用,也录不到发送后的通话内容:
核心问题:Twilio是按指令顺序依次执行的,
vr.record()是会阻塞流程的操作——一旦启动录制,它会持续到达到设置的maxLength或触发停止条件,之后才会执行后续的vr.play()和挂断操作。这意味着你发送DTMF音的时候,录制早就结束了,自然不会被转录,更录不到发完DTMF后的通话内容。调整逻辑顺序:得先完成问候语播放和DTMF音发送,再启动录制操作,确保录制覆盖发送DTMF之后的通话内容。
修改后的代码示例:
const vr = new VoiceResponse(); // 先播放问候语 vr.say('Hello'); // 先发送DTMF音:wwww是等待4秒后发送1,可根据对方IVR响应速度调整等待时长 vr.play({ digits: 'wwww1', }); // 启动录制,此时录制的是发送DTMF后的通话内容 vr.record({ maxLength: 60, transcribe: true, transcribeCallback: '/voice/text', }); // 录制结束后挂断通话 vr.hangup(); res.setHeader('Content-Type', 'text/xml'); return res.status(200).send(vr.toString());
- 额外注意事项:
- 如果对方IVR响应较慢,可以增加
play参数中的w数量(每个w代表1秒等待),确保DTMF音在IVR提示完成后发送,避免被忽略。 - 确认你的Twilio号码的来电Webhook配置正确,请求方式(GET/POST)与后端接收逻辑匹配。
内容的提问来源于stack exchange,提问作者amdilley
相关产品推荐
相关产品推荐

