使用amazon lex时出现错误“无效的Lambda响应:从Lambda收到无效响应”

时间:2017-09-19 12:24:32

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

我正在尝试使用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]

3 个答案:

答案 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);