能否为Twilio的dial.number添加自动语音检测(AMD)?
在Twilio通话中添加自动语音检测(AMD)
当然可以给你的Twilio通话添加自动语音检测(AMD),Twilio原生支持该功能,你只需修改现有TwiML配置,结合回调端点即可实现。
实现方式:修改<Dial>组件配置
直接在dial实例的参数中添加AMD相关配置,Twilio会自动完成检测,并将结果发送到你指定的回调端点。
修改后的代码示例
const VoiceResponse = require("twilio").twiml.VoiceResponse; // 省略其他代码... try { const response = new VoiceResponse(); const dial = response.dial({ callerId: twilioPhoneNumber, // 启用AMD检测 amd: 'true', // 指定AMD结果回调的服务器端点 amdStatusCallback: 'https://your-server-domain/amd-status', // 回调请求的HTTP方法 amdStatusCallbackMethod: 'POST' }); dial.number(toNumber); console.log('TwiML: ', response.toString()); res.type('text/xml'); res.send(response.toString()); } catch (error) { console.log('/make-call endpoint: ', error); res.status(400); }
处理AMD回调结果
你需要在服务器上创建/amd-status端点,接收Twilio发送的检测结果,示例代码如下:
// 示例:Express框架下的AMD回调处理 app.post('/amd-status', (req, res) => { const amdResult = req.body.AnsweredBy; const callSid = req.body.CallSid; // 根据检测结果执行不同逻辑 switch(amdResult) { case 'human': console.log(`通话 ${callSid} 被真人接听`); // 可在此添加真人接听后的逻辑,比如转接、播放语音等 break; case 'machine_start': console.log(`通话 ${callSid} 检测到答录机`); // 可在此添加答录机处理逻辑,比如播放预录留言 break; case 'not_answered': console.log(`通话 ${callSid} 无人应答`); break; } res.sendStatus(200); });
关键参数说明
amd: 'true':开启Twilio的自动语音检测功能amdStatusCallback:Twilio发送AMD结果的目标端点,必须能被公网访问amdStatusCallbackMethod:回调请求使用的HTTP方法,支持POST或GET
注意事项
- AMD检测结果存在一定延迟,取决于通话应答后的语音内容
- 若需更精细的控制(比如自定义检测阈值),可使用Twilio的Answering Machine Detection API进行手动处理
内容的提问来源于stack exchange,提问作者VikR
相关产品推荐
相关产品推荐

