1

我一直在尝试 aws lex 上的 lambda codehook,这就是我将返回的响应的样子

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]

我还是亚马逊网络服务的新手,在编程方面没有太多的知识,但我无法追溯这个错误,因为在我的任何代码或亚马逊中都找不到“源”键文档。也感谢您花时间阅读本文。

4

2 回答 2

3

我遇到了同样的错误。所以,我的问题是我使用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 响应

于 2021-08-08T11:10:13.167 回答
1

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

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

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

于 2019-07-17T07:52:12.180 回答