我创建了一个AWS Lex
僵尸程序,我正在从该僵尸程序中调用一个lambda
函数。在测试lambda
函数时,我得到了正确的响应,但在机器人中我得到了以下错误:
发生错误:从Lambda收到无效响应:不能 构造IntentResponse的实例:no String-argument 从String值反序列化的构造函数/工厂方法 ('2017-06-22 10:23:55.0')来源:“2017-06-22 10:23:55.0”;线: 1,栏目:1]
不确定,出了什么问题以及我遗失的地方。有人可以帮我吗?
答案 0 :(得分:1)
上述问题的解决方案是我们需要确保lambda函数返回的响应,以便在AWS lex chat bot中使用,应采用以下格式:
{
"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
答案 1 :(得分:1)
没有从String值反序列化的String-argument构造函数/工厂方法
您收到此错误因为您必须在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."
}
}
您已指定一个值" 已实现"或" 失败" to field' fulfillmentState'。同样适用于' contentType'。