AWS Lex:发生错误:无效的 Lambda 响应:针对无效的插槽名称引发的 Lambda 响应

AWS Lex: An error has occurred: Invalid Lambda Response: Lambda response elicited for an invalid slot name ​

使用 AWS lex 的验证挂钩。如果我尝试引出插槽,lex 会失败:

An error has occurred: Invalid Lambda Response: Lambda response elicited for an invalid slot name ​

下面是我的 lex 事件和来自我的 lambda 函数的响应。我有 2 个插槽,顶部和地壳。浇头是客户已经给出的第一个插槽。地壳是缺失的插槽。

我已经查看了大部分 AWS 文档、Whosebug 和其他教程,但我似乎无法突破这一点……有人知道吗?

莱克斯事件:

{
    "messageVersion": "1.0",
    "invocationSource": "DialogCodeHook",
    "userId": "cbzn2ql6dl59dro",
    "sessionAttributes": {},
    "outputDialogMode": "Text",
    "currentIntent": {
        "name": "Pizza",
        "slots": {
            "topping": "Chicken"
        },
        "confirmationStatus": "None"
    },
    "bot": {
        "name": "PizzaMaker",
        "alias": "$LATEST",
        "version": "$LATEST"
    }
}

Lambda 的回应

{
    "sessionAttributes": {},
    "dialogAction": {
        "type": "ElicitSlot",
        "message": {
            "contentType": "PlainText",
            "content": "What type of crust do you want?"
        },
        "intentName": "Pizza",
        "slotToElicit": "​Curst",
        "slots": {
            "topping": "Chicken"
        }
    }
}

错误 "Lambda response elicited for an invalid slot name" 明确表示您尝试使用 "slotToElicit" 引出的插槽与您的机器人中配置的插槽不匹配。

可能是这个错字导致了问题:"slotToElicit": "​Curst",

尝试 "slotToElicit": "​Crust", 或小写 "slotToElicit": "​crust",

我尝试使用 JSONLint 验证您的 Lambda 响应结构,并注意到 slotToElicit 键的值中包含一个额外的符号,否则该符号是不可见的。这将指出 Lex 无法找到插槽名称的原因。