You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Twilio Autopilot通话控制问题:设置时限无效,需实现重试次数功能

解决Twilio Autopilot无响应等待问题:重试n次挂断或通话时长限制

方案一:重试3次后自动挂断(推荐)

由于Twilio Autopilot没有原生的循环重试配置,可通过Memory变量跟踪重试次数结合on_no_input事件实现:

  1. 初始化重试计数
    在引导用户选择的任务开头,添加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"
              }
            ]
          }
        }
      ]
    }
    
  2. 创建重试提示任务
    新建名为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替换为你实际的初始引导任务名称。

  3. 关键说明

    • 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 01:15:11