从Lambda收到无效的响应:无法构造IntentResponse的实例

时间:2019-07-10 11:18:04

标签: amazon-web-services aws-lambda aws-lex

我一直在尝试aws lex上的lambda代码钩,这将是我将要返回的响应

response = {
            "dialogAction" : {
                "type": "ElicitSlot",
                "message": {    
                    "contentType": "PlainText",
                    "content": "Please make enter value of slot1 first before proceeding."
                },
              "intentName": "AWSLexIntentName",
              "slots": {
                    "slot1" : null,
                    "slot2" : null,
                    "slot3" : null,
                    "slot4" : null,
                    "slot5" : null
              },
              "slotToElicit" : "slot1"
            }
        }

我已经尝试使用lambda测试事件对其进行测试,但是在Lex上进行尝试时,我不断收到错误消息

An error has occurred: Invalid Lambda Response: Received invalid response from Lambda: Can not construct instance of IntentResponse, problem: The validated object is null at [Source: {}; line: 1, column: 2]

我仍然对Amazon Web Services还是陌生的,对所有编程知识也不多,但是我无法追溯此错误,因为在我的任何代码中都找不到“ Source”键或亚马逊文档。也感谢您抽出宝贵的时间阅读本文。

2 个答案:

答案 0 :(得分:1)

好的,所以我弄清楚了为什么Lex机器人没有获得任何价值。在我的lambda处理程序中,我从一个函数中收到了一个诺言,该函数可以解决我所需的响应。在处理程序内部,我通过使用promise.then(data,function(){// do stuff})接收此解析,然后在then函数内部,返回包含响应的数据值。

这导致处理程序返回一个未定义的值,所以我所做的是,不是返回而是使用了lambda的回调功能。

很抱歉,如果解释令人困惑,因为我也很困惑为什么以及如何使用它。

答案 1 :(得分:1)

我遇到了同样的错误。所以,我的问题是我使用了 lex v2 但使用了 lex v1 响应格式。 lex v2 具有不同的响应格式,即

{
  "sessionState": {
    "dialogAction": {
      "type": "Close | ConfirmIntent | Delegate | ElicitIntent | ElicitSlot"
    },
    "intent": {
      "confirmationState": "Confirmed",
      "name": "IntentName",
      "state": "Failed | Fulfilled | InProgress | ReadyForFulfillment",
      
    },
    
  },
  "messages": [
    {
      "contentType": "PlainText",
      "content": "Select from the list",
      
    }
  ]
}

了解更多详情aws lex v2 response