我正在尝试使用AWS Lex开发聊天机器人。但不幸的是,我在Lex上建立聊天时遇到了错误。我正在使用一个意图和两个插槽。出于某种原因,当lambda函数连接到聊天时,插槽的第二个值保存为null
。但是当我在lambda中运行它作为测试用例时,它是成功的。
现在,我想要做的就是在输入插槽的详细信息后显示响应消息。
这是我的代码
public class LexBot implements RequestHandler<Map<String, Object>, Object> {
@Override
public Object handleRequest(Map<String, Object> input, Context context) {
// LexRequest lexRequest = LexRequestFactory.createLexRequest(input);
String content = "Request came from the bot: ";
Message message = new Message("PlainText", content);
DialogAction dialogAction = new DialogAction("Close", "Fullfiled", message);
return new LexRespond(dialogAction);
}
}
这是我在AWS Lex中遇到的错误:
发生错误:无效的Lambda响应:收到无效 来自Lambda的响应:无法构造Message的实例,问题: 内容不得为[来源: { “dialogAction”:{ “类型”: “关闭”, “消息”:{ “的contentType”: “纯文本”, “some_respond_message”:“请求 来自机器人:“}}};行:1,列:122]
答案 0 :(得分:1)
如果您使用的是 amazon lexv2,那么与 lexv1 相比,amazon lex 需要不同的 JSON 响应。
lex 接受的 lambda 响应示例:
{
"sessionState": {
"dialogAction": {
"type": "Close"
},
"intent": {
"confirmationState": "Confirmed",
"name": "SearchProducts",
"state": "Fulfilled",
},
},
"messages": [
{
"contentType": "PlainText",
"content": "Select from the list",
}
]
}
在此处查看完整的响应结构 https://docs.aws.amazon.com/lexv2/latest/dg/lambda.html
答案 1 :(得分:0)
根据docs,以下是构建最终答案的正确格式:
{
"sessionAttributes": session_attributes,
"dialogAction":{
"type":"Close",
"fulfillmentState":"Fulfilled",
"message":{
"contentType":"PlainText",
"content":message
}
}
}
使用此格式构建响应以避免错误。
答案 2 :(得分:0)
您拼错了“已完成” - 您输入了如下粘贴的“已完成”: DialogAction dialogAction = new DialogAction("Close", "Fullfiled", message);