我试图使用AWS Lambda函数为AWS Lex添加多个响应,但是我遇到了这个错误。
但是我被消息困住了
发生错误:无效的Lambda响应:从Lambda接收到无效的响应:无法构造Message实例,问题:contentType在[Source:{“ dialogAction”:{“ type”:“ ConfirmIntent”, “ message”:{“ messages”:[{“ contentType”:“ PlainText”,“ group”:1,“ content”:“ Hello”},{“ contentType”:“ PlainText”,“ group”:2,“ content“:” My“},{” contentType“:” PlainText“,” group“:3,” content“:” Friend“}]},” intentName“:” CardsI“,” slots“:{” CardsB“ : 空值}}};行:1,列:252]
在Lambda函数中,我们使用以下代码来打印多个响应
return {
"dialogAction": {
"type": "ConfirmIntent",
"message": {
"messages": [{
"contentType": "PlainText",
"group": 1,
"content": "Hello"
},
{
"contentType": "PlainText",
"group": 2,
"content": "My"
},
{
"contentType": "PlainText",
"group": 3,
"content": "Friend"
}
]
},
"intentName": "CardsI",
"slots": {
"CardsB": ""
}
}
}
我们甚至浏览了
之类的文档。https://docs.aws.amazon.com/lex/latest/dg/howitworks-manage-prompts.html#message-groups
https://docs.aws.amazon.com/lex/latest/dg/context-mgmt.html#special-response
但我们仍然面临问题。有帮助吗?
答案 0 :(得分:1)
我遇到了同样的问题,文档没有任何建议。但是,检查来自lex的网络响应时,我们可以看到,在有多个消息的情况下,消息数组是作为字符串而不是作为对象传递的。
lambda的响应应采用以下格式。
return {
"dialogAction": {
"type": "ConfirmIntent",
"message": {
"contentType": "CustomPayload",
"content": "{\"messages\":[{\"type\":\"PlainText\",\"group\":1,\"value\":\"Hello\"},{\"type\":\"PlainText\",\"group\":2,\"value\":\"Hey\"}]}"
},
"intentName": "CardsI",
"slots": {
"CardsB": null
}
}
答案 1 :(得分:0)
我建议尝试一些操作:
contentType
对象中包含message
。messages
显示为转义的JSON对象,因此请转义引号并将所有messages
包裹在{ }
中。 message
需要contentType
和content
,因此请尝试在messages
中设置转义的JSON对象(content
)messages
内,使用value
代替content
将所有文档放在一起时,文档的确切格式有些含糊。我已经在下面的建议中完成了上述所有操作,但可能只需要一两个即可。因此,请尝试一些组合。
return {
"dialogAction": {
"type": "ConfirmIntent",
"message": {
"contentType": "PlainText",
"content":{
\"messages\": [{
\"contentType\": \"PlainText\",
\"group\": 1,
\"value\": \"Hello\"
},
{
\"contentType\": \"PlainText\",
\"group\": 2,
\"value\": \"My\"
},
{
\"contentType\": \"PlainText\",
\"group\": 3,
\"value\": \"Friend\"
}
]}
},
"intentName": "CardsI",
"slots": {
"CardsB": null
}
}
}
答案 2 :(得分:0)
您可以执行以下操作以将Amazon lambda的多个响应添加到您的Amazon lex。
您可以在lambda函数的响应中添加会话属性。
{
"dialogState": "Fulfilled",
"intentName": "myIntent",
"message": "Hi",
"messageFormat": "PlainText",
"responseCard": null,
"sessionAttributes": {
"sessionAttribute1": "FirstAttribute",
"SessionAttribute2": "secondAttribute"
},
"slotToElicit": null,
"slots": {
"customerId": "1419"
}
}
这些SessionAttributes可以从lambda函数返回给lex,并且可以根据需要进行自定义。
希望有帮助!