收集后根据多个 Twilio 类型和自定义字段类型检查 Twilio 自动驾驶仪用户输入

Check Twilio autopilot user input against multiple Twilio Types and custom Field Types after collect

希望你身体健康。我正在尝试检查 Twilio 函数中的用户输入,以针对多个字段类型(其中一些是自定义的)自动驾驶仪中的特定“收集”。

例如,我先询问用户的姓名,然后再询问他们的 phone 号码。这些收集问题的集合类型是 Twilio.FIRST_NAME 和 Twilio.PHONE_NUMBER。但是,用户可能会在这两个问题中的任何一个问题上说“将我连接到某人”,这将导致失败,因为“将我连接到某人”不是姓名或 phone 号码。我希望能够以某种方式处理这样的情况,让我能够控制对话的流程,但也能够检测到特定的短语并正确处理它。在这种情况下,将他们与某人联系起来。

这是我在启动任务后执行的 Twilio 函数:

exports.handler = function (context, event, callback) {
    var responseObject;

        responseObject ={
            "actions": [
                {
                    "collect": {
                        "name": "details",
                        "questions": [
                            {
                                "question": "May I get your first name?",
                                "name": "name",
                                "type": "Twilio.FIRST_NAME",
                                "validate": {
                                    "on_failure": {
                                        "messages": [
                                            {
                                                "say": "Sorry, that doesn't seem to be right, can you please try again?"
                                            }
                                        ],
                                        "repeat_question": true
                                    },
                                    "max_attempts": {
                                        "redirect":{
                                            "method": "POST",
                                            "uri": "https://quartz-salamander-1024.twil.io/call-forwarding"
                                        },
                                        "num_attempts": 2
                                    }
                                }
                            },
                            {
                                "question": "Can I get your contact number?",
                                "name": "phoneNumber",
                                "type": "Twilio.PHONE_NUMBER",
                                "validate": {
                                    "on_failure": {
                                        "messages": [
                                            {
                                                "say": "Sorry, that doesn't seem to be right, can you please try again?"
                                            }
                                        ],
                                        "repeat_question": true
                                    },
                                    "max_attempts": {
                                        "redirect":{
                                            "method": "POST",
                                            "uri": "https://quartz-salamander-1024.twil.io/call-forwarding"
                                        },
                                        "num_attempts": 2
                                    }
                                }
                            },
                        ],
                        "on_complete": {
                            "redirect": {
                                "method": "POST",
                                "uri": "https://quartz-salamander-1024.twil.io/confirmation"
                            }
                        }
                    }
                }
            ]
        }
    callback(null, responseObject);
}

我想为每个问题创建多个任务,但我打算添加更多问题,我必须收集他们的答案并以某种方式验证,通过引入多个任务,我失去了对对话流程的控制。

谢谢

我也遇到了类似的问题,我需要同时监听 yes/no 值和我们公司员工的姓名。我提出了一种解决方法,希望也能解决您的问题:

  1. 已找到您的 Autopilot 字段类型(https://www.twilio.com/console/autopilot/your_bot/field-types)。
  2. 创建自定义字段类型并将其命名为 Get_First_Name(或您喜欢的任何名称)。
  3. 对于您的值字段,您需要两个值:First_NameConnect_To_Someone
  4. 在您的 First_Name 值字段中,添加一些类似于内置 Twilio.FIRST_NAME 字段类型的同义词(例如“John”、“Dave”、“My name is鲍勃”、“我是乔”等)。
  5. 对于您的 Connect_To_Someone 值字段,添加您想要触发事件的同义词(例如“我想和某人交谈”、“你能帮我联系一个人吗”、等)。
  6. 在您使用 Twilio.FIRST_NAME 的地方,改用 Get_First_Name。您的 Get_First_Name 字段现在将返回两个有效值之一:First_NameConnect_To_Someone.

这样做的缺点是您必须拆分“收集”问题并将任务重定向到另一个函数,该函数将处理逻辑“如果答案是 Connect_To_Someone,则将它们连接起来给某人”或“如果用户给出了名字,则要求提供 phone 号码”。然后,为phone个号码做同样的歌舞。

从本质上讲,您现在将拥有 5 个功能:

  1. 询问名字
  2. 读取用户是否输入了名字或要求连接
  3. 将用户与某人联系起来
  4. 求phone个数
  5. 读取用户是否输入了 phone 号码或要求连接