从AWS Lambda函数获得AWS Lex机器人的响应是错误的?

时间:2017-06-22 10:26:54

标签: amazon-web-services aws-lambda amazon-lex

我创建了一个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]

不确定,出了什么问题以及我遗失的地方。有人可以帮我吗?

2 个答案:

答案 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'。