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

如何重置Twilio Autopilot流程?收集响应时取消流程问询

解决Twilio Autopilot Collect环节输入CANCEL直接跳转主任务的问题

我明白你遇到的痛点:本来想让用户输入CANCEL直接跳回主任务,但用onCollectAttempt的Webhook函数没生效,流程还是死磕收集操作。核心原因是Twilio Autopilot的Collect组件会优先执行输入验证逻辑,只有验证通过的输入才会触发on_collect_attempt——如果你的CANCEL不在允许的输入列表里,验证阶段就会直接拦截,根本轮不到你的函数执行。

下面给你两个可行的解决方案,按步骤来就能搞定:

方案1:调整Collect配置+优化Webhook函数

先把CANCEL加入Collect的允许输入列表,让它能通过验证触发Webhook,再在函数里判断并跳转:

第一步:修改Collect的JSON配置

在你的Collect组件里,给目标问题的validation添加allowed_inputs,把CANCEL包含进去:

{
  "actions": [
    {
      "collect": {
        "name": "your_collect_name",
        "questions": [
          {
            "question": "请选择你的选项(1/2/3),输入CANCEL可取消操作",
            "name": "selected_option",
            "type": "Twilio.NUMBER",
            "validation": {
              "allowed_inputs": {
                "values": ["1", "2", "3", "CANCEL"] // 把CANCEL加入合法输入
              },
              "on_failure": {
                "messages": [
                  {
                    "say": "抱歉,我没听懂,请输入1、2、3或者输入CANCEL取消操作"
                  }
                ],
                "max_attempts": 3,
                "redirect": "task://greetings"
              }
            }
          }
        ],
        "on_complete": {
          "redirect": "task://next_task"
        },
        "on_collect_attempt": {
          "webhook": {
            "url": "你的函数部署URL",
            "method": "POST"
          }
        }
      }
    }
  ]
}

第二步:优化你的Webhook函数

把原来的if(true)改成判断输入是否为CANCEL,同时处理大小写问题:

exports.handler = function(context, event, callback) { 
  // 统一转大写,避免大小写不匹配
  const userInput = event.CurrentInput.trim().toUpperCase();
  if (userInput === "CANCEL") { 
    const responseObject = { 
      "actions": [ 
        { "redirect": "task://greetings" }
      ] 
    }; 
    callback(null, responseObject); 
  } else {
    // 非CANCEL输入,让流程继续执行原有逻辑
    callback(null, {});
  }
};

方案2:用自定义验证函数直接控制流程

如果想更灵活,直接把验证逻辑全放到自定义函数里,跳过Collect自带的验证规则,完全自定义输入处理:

第一步:修改Collect的validation为Webhook

{
  "actions": [
    {
      "collect": {
        "name": "your_collect_name",
        "questions": [
          {
            "question": "请选择你的选项(1/2/3),输入CANCEL可取消操作",
            "name": "selected_option",
            "type": "Twilio.NUMBER",
            "validation": {
              "webhook": {
                "url": "你的验证函数URL",
                "method": "POST"
              },
              "on_failure": {
                "messages": [
                  {
                    "say": "抱歉,我没听懂,请输入1、2、3或者输入CANCEL取消操作"
                  }
                ],
                "max_attempts": 3,
                "redirect": "task://greetings"
              }
            }
          }
        ],
        "on_complete": {
          "redirect": "task://next_task"
        }
      }
    }
  ]
}

第二步:编写验证函数

这个函数可以直接判断输入,要么跳转主任务,要么验证正常选项:

exports.handler = function(context, event, callback) { 
  const userInput = event.CurrentInput.trim().toUpperCase();
  const questionName = event.QuestionName;

  // 优先判断CANCEL,直接跳转
  if (userInput === "CANCEL") {
    callback(null, {
      "actions": [
        { "redirect": "task://greetings" }
      ]
    });
    return;
  }

  // 处理正常选项的验证
  const validOptions = ["1", "2", "3"];
  if (validOptions.includes(userInput)) {
    // 输入有效,返回验证成功
    callback(null, {
      "valid": true,
      "value": userInput,
      "key": questionName
    });
  } else {
    // 输入无效,返回验证失败提示
    callback(null, {
      "valid": false,
      "message": "抱歉,我没听懂,请输入1、2、3或者输入CANCEL取消操作"
    });
  }
};

关键提醒

  • 一定要注意验证顺序:Autopilot先执行Collect的validation,再触发on_collect_attempt,所以CANCEL必须能通过验证,你的Webhook才有机会执行。
  • 处理输入时统一转成大写/小写,避免用户输入cancel或Cancel导致识别失败。

内容的提问来源于stack exchange,提问作者adventure_galley

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 18:32:46