【问题标题】:Getting response from AWS Lambda function to AWS Lex bot is giving error?从 AWS Lambda 函数获取对 AWS Lex 机器人的响应给出错误?
【发布时间】:2017-11-25 13:51:29
【问题描述】:
我创建了一个AWS Lex 机器人,我正在从该机器人调用一个lambda 函数。在测试lambda 函数时,我得到了正确的响应,但在机器人上我得到了以下错误:
发生错误:收到来自 Lambda 的无效响应:不能
构造 IntentResponse 实例:无字符串参数
从字符串值反序列化的构造函数/工厂方法
('2017-06-22 10:23:55.0')在 [来源:“2017-06-22 10:23:55.0”;线:
1、栏目:1]
不确定,出了什么问题以及我在哪里失踪。谁能帮帮我?
【问题讨论】:
标签:
amazon-web-services
aws-lambda
amazon-lex
【解决方案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
【解决方案2】:
没有从字符串值反序列化的字符串参数构造函数/工厂方法
您收到此错误因为您必须在 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' 也是如此。