从 AWS Lambda 函数获取对 AWS Lex 机器人的响应时出错?

Getting response from AWS Lambda function to AWS Lex bot is giving error?

我创建了一个 AWS Lex 机器人,我正在从该机器人调用一个 lambda 函数。在测试 lambda 函数时,我得到了正确的响应,但在机器人中我得到了以下错误:

An error has occurred: Received invalid response from Lambda: Can not construct instance of IntentResponse: no String-argument constructor/factory method to deserialize from String value ('2017-06-22 10:23:55.0') at [Source: "2017-06-22 10:23:55.0"; line: 1, column: 1]

不确定,哪里出了问题,哪里遗漏了。有人可以帮助我吗?

上述问题的解决方案是我们需要确保 lambda 函数返回的响应,用于 AWS lex 聊天机器人的格式应为以下格式:

{
"sessionAttributes": {
"key1": "value1",
"key2": "value2"
...
 },
  "dialogAction": {
"type": "ElicitIntent, ElicitSlot, ConfirmIntent, Delegate, or Close",
Full structure based on the type field. See below for details.
}
}

由此,聊天机器人需要 DialogAction 和相应的元素来处理消息,即 IntentResponse。

参考:http://docs.aws.amazon.com/lex/latest/dg/lambda-input-response-format.html

no String-argument constructor/factory method to deserialize from String value

您收到此错误因为您必须在 lambda 函数的响应中传递字符串值。您必须在响应中传递预定义的 json 对象蓝图。

因为 Lex 和 Lambda 之间的通信不是像普通函数那样简单的值传递。 Amazon Lex 期望 Lambda 以特定 JSON 格式输出,并且数据以特定 JSON 格式发送到 Lambda。例子在这里:Lambda Function Input Event and Response Format.

并且仅复制和粘贴蓝图是行不通的,因为在某些字段中您必须在一些预定义值之间进行选择,而在某些字段中您必须输入有效的输入。

例如,

"dialogAction": { "type": "Close", "fulfillmentState": "Fulfilled or Failed", "message": { "contentType": "PlainText or SSML", "content": "Thanks, your pizza has been ordered." } }

您已将值“Fulfilled”或“Failed”分配给字段 'fulfillmentState'。 'contentType'.

也是如此