使用Twiml发起Twilio外呼:如何等待语音信箱应答?
解决Twilio呼叫转语音信箱时消息开头被截断的问题
你遇到的问题是因为语音信箱会先播放一段提示音(比如“请在哔声后留言”),默认的短暂停不足以等提示音结束,导致消息提前播放被截断。以下是两种可行的解决方法:
方法一:延长初始暂停时长
直接调整TwiML里的<Pause>标签时长,给语音信箱足够的时间完成提示音播放。建议设置为6-8秒(不同运营商的语音信箱提示音长度有差异,可根据实际测试调整):
<?xml version="1.0" encoding="UTF-8"?> <Response> <Pause length="7"/> <Say voice="Polly.Salli-Neural">Hello world</Say> <Pause length="2"/> </Response>
同时注意移除<Say>标签内容里多余的引号(原代码里的"),避免播放时出现不必要的标点。
方法二:启用Twilio机器检测功能
利用Twilio内置的机器检测能力,自动识别语音信箱并等待其准备就绪后再播放消息。只需在发起呼叫的API请求中添加两个参数:
MachineDetection=Enable:开启机器应答检测MachineDetectionTimeout=5:设置检测超时时间(单位:秒,可按需调整)
修改后的curl命令如下:
curl --location --request POST 'https://api.twilio.com/2010-04-01/Accounts/AC05917c014691f7d218d20XXXXXXX/Calls' \ --header 'Authorization: Basic XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXZjExZDIwM2IzOTYwMjUzYQ==' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'To=1484xxxxxxx' \ --data-urlencode 'From=1610xxxxxxx' \ --data-urlencode 'MachineDetection=Enable' \ --data-urlencode 'MachineDetectionTimeout=5' \ --data-urlencode 'Twiml=<?xml version="1.0" encoding="UTF-8"?> <Response> <Say voice="Polly.Salli-Neural">Hello world</Say> <Pause length="2"/> </Response>'
启用该功能后,Twilio会自动判断呼叫是否被语音信箱接收,等语音信箱的提示音结束后再执行你的TwiML内容,从根源上避免消息开头被截断。
内容的提问来源于stack exchange,提问作者Kevin Rehak
相关产品推荐
相关产品推荐

