我创建了一个AWS Lex
机器人,我正在lambda
从该机器人调用一个功能。在测试lambda
功能时,我得到了正确的响应,但在机器人上我得到了以下错误:
发生错误:收到来自 Lambda 的无效响应:无法构造 IntentResponse 的实例:没有字符串参数构造函数/工厂方法从字符串值('2017-06-22 10:23:55.0')反序列化 [来源:“ 2017-06-22 10:23:55.0"; 行:1,列:1]
不知道,出了什么问题,我在哪里失踪。有人可以帮助我吗?
我创建了一个AWS Lex
机器人,我正在lambda
从该机器人调用一个功能。在测试lambda
功能时,我得到了正确的响应,但在机器人上我得到了以下错误:
发生错误:收到来自 Lambda 的无效响应:无法构造 IntentResponse 的实例:没有字符串参数构造函数/工厂方法从字符串值('2017-06-22 10:23:55.0')反序列化 [来源:“ 2017-06-22 10:23:55.0"; 行:1,列:1]
不知道,出了什么问题,我在哪里失踪。有人可以帮助我吗?
没有从字符串值反序列化的字符串参数构造函数/工厂方法
您收到此错误是因为您必须在 lambda function 的响应中传递字符串值。您必须在响应中传递预定义的 json 对象蓝图。
因为 Lex 和 Lambda 之间的通信不是像普通函数那样简单的值传递。Amazon Lex 期望 Lambda 以特定 JSON 格式输出,数据以特定 JSON 格式发送到 Lambda。示例在此处:Lambda 函数输入事件和响应格式。
仅仅复制和粘贴蓝图是行不通的,因为在某些字段中,您可以在某些预定义值之间进行选择,而在某些字段中,您必须输入有效的输入。
例如在,
"dialogAction": {
"type": "Close",
"fulfillmentState": "Fulfilled or Failed",
"message": {
"contentType": "PlainText or SSML",
"content": "Thanks, your pizza has been ordered."
}
}
您已为字段“fulfillmentState”分配了一个值“已完成”或“失败”。'contentType' 也是如此。
上述问题的解决方案是,我们需要确保 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