Twilio Autopilot通话控制问题:设置时限无效,需实现重试次数功能
解决Twilio Autopilot无响应等待问题:重试n次挂断或通话时长限制
方案一:重试3次后自动挂断(推荐)
由于Twilio Autopilot没有原生的循环重试配置,可通过Memory变量跟踪重试次数结合on_no_input事件实现:
初始化重试计数
在引导用户选择的任务开头,添加set_memory动作初始化重试次数:{ "actions": [ { "set_memory": { "retry_count": 0 } }, { "collect": { "name": "user_selection", "questions": [ { "question": "欢迎致电,请选择1. 业务咨询 2. 售后服务", "name": "selection", "type": "Twilio.Number" } ], "on_no_input": [ { "redirect": "task://retry_prompt" } ] } } ] }创建重试提示任务
新建名为retry_prompt的任务,用于更新重试计数并判断是否继续:{ "actions": [ { "set_memory": { "retry_count": "{{retry_count}} + 1" } }, { "conditional": { "condition": "{{retry_count}} < 3", "actions": [ { "say": "抱歉,我没听清,请再次选择1或2" }, { "redirect": "task://initial_selection" } ], "else": [ { "say": "多次未收到您的回复,通话即将结束,感谢来电" }, { "hangup": {} } ] } } ] }注:将
initial_selection替换为你实际的初始引导任务名称。关键说明
on_no_input事件会在用户未输入任何内容(超时)时触发;- 通过Autopilot的Memory变量
retry_count累计重试次数,达到3次后执行hangup动作挂断通话; - 可根据需求调整重试次数和提示语内容。
方案二:设置5分钟通话时长限制
针对你之前调用API未生效的问题,可从以下几点排查修复:
1. 排查API调用问题
你的代码中可能存在参数传递方式的问题,建议调整为标准的表单参数传递(Twilio API要求x-www-form-urlencoded格式),修改后的代码示例(以RestSharp为例):
var twilioRestClient = new RestClient("https://api.twilio.com/"); var requestUrl = $"2010-04-01/Accounts/{TWILIO_ACC_SID}/Calls/{callSid}.json"; var request = new RestRequest(requestUrl, Method.Post); // 无需手动构建Auth头,RestSharp可自动处理Basic Auth request.Authenticator = new HttpBasicAuthenticator(TWILIO_ACC_SID, TWILIO_AUTH_TOKEN); // 直接添加表单参数 request.AddParameter("TimeLimit", "300"); var response = twilioRestClient.Execute(request);
- 注意:
TimeLimit参数是剩余通话时长(秒),而非总时长。如果通话已进行超过5分钟,设置300秒不会立即挂断,需确保在通话初期调用此API; - 避免手动构建Authorization头,使用RestSharp自带的HttpBasicAuthenticator更可靠。
2. 更可靠的初始设置方式
建议在发起通话时直接指定时长限制,无需后续API更新:
- 如果是通过Twilio号码Webhook触发通话,返回的TwiML中添加
timeLimit属性:<Response> <Connect action="/handle-call-end" timeLimit="300"> <Autopilot>SID_OF_YOUR_AUTOPILOT_BOT</Autopilot> </Connect> </Response> - 如果是通过API创建通话,在请求中添加
TimeLimit=300参数:var request = new RestRequest("2010-04-01/Accounts/{AccountSid}/Calls.json", Method.Post); request.AddParameter("To", "+1234567890"); request.AddParameter("From", "+0987654321"); request.AddParameter("Url", "https://your-server.com/autopilot-webhook"); request.AddParameter("TimeLimit", "300"); // 其他认证参数...
3. 系统设置排查
确保Twilio控制台的24-Hour Maximum Call Duration功能不会冲突:
- 进入Twilio控制台 > 语音 > 设置 > 通话时长限制;
- 若启用该功能,其设置的时长会作为最大上限,你的自定义
TimeLimit不能超过此值。
内容的提问来源于stack exchange,提问作者avayer
相关产品推荐
相关产品推荐

