2017-06-22 77 views
0

我创建了一个AWS Lex机器人,我从该机器人调用一个lambda函数。当测试lambda功能我得到应有的反应,但在BOT我得到以下错误:从AWS Lambda函数获取响应到AWS Lex bot是否发生错误?

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]

不知道,什么是错的,我在哪里丢失。任何人都可以帮助我吗?

回答

1

解决上述问题是,我们需要确保响应由拉姆达函数返回,在AWS法聊天机器人使用应在以下格式:

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

这样,聊天机器人expectd DialogAction和相应的元素,以处理消息即IntentResponse。

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

1

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

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

因为Lex和Lambda之间的通信不像通常的函数那样简单。 Amazon Lex期望以特定的JSON格式从Lambda输出,并以特定的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." } }

你分配一个值 “达到” 或 “失败” 到现场 'fulfillmentState'。 'contentType'也一样。