【问题标题】:How to ADD Multiple Responses in AWS Lex如何在 AWS Lex 中添加多个响应
【发布时间】:2019-07-29 18:09:09
【问题描述】:

我尝试使用 AWS Lambda 函数为 AWS Lex 添加多个响应,但我遇到了这个错误。

我正在尝试

但我被消息卡住了

发生错误:无效的 Lambda 响应:收到来自 Lambda 的无效响应:无法构造消息实例,问题: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": ""
        }
    }
}

我们甚至浏览了诸如

之类的文档
  1. https://docs.aws.amazon.com/lex/latest/dg/lambda-input-response-format.html#using-lambda-response-format

  2. https://docs.aws.amazon.com/lex/latest/dg/howitworks-manage-prompts.html#message-groups

  3. https://docs.aws.amazon.com/lex/latest/dg/context-mgmt.html#special-response

但我们仍然面临问题。有什么帮助吗?

【问题讨论】:

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


    【解决方案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
        }
    }
    

    【讨论】:

      【解决方案2】:

      我建议尝试一些事情:

      1. message 对象中包含 contentType,因为您收到了错误。
      2. 文档将messages 显示为转义的JSON 对象,因此请转义引号并将所有messages 包装在{ } 中。
      3. 基本的message需要contentTypecontent所以尝试在content中设置转义的JSON对象(messages
      4. 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
              }
          }
      }
      

      【讨论】:

      • 我们尝试添加但我们仍然面临如下问题“发生错误:无效的 Lambda 响应:从 Lambda 接收到无效的响应:无法反序列化 java.lang.String 的实例出 START_OBJECT 令牌在 [来源:{“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": ""}}};行:1,列:95]"。
      • 可能是因为槽值需要为空或真字符串,所以将 CardsB 设为空。
      • 我尝试过,但仍然收到此错误“发生错误:无效的 Lambda 响应:从 Lambda 接收到无效的响应:无法反序列化 java.lang.String 的实例出 START_OBJECT 令牌在 [来源:{“dialogAction”:{“type”:“ConfirmIntent”,“message”:{“contentType”:“PlainText”,“content”:{“messages”:[{“contentType”:“PlainText”,“group ": 1, "value": "Hello"}, {"contentType": "PlainText", "group": 2, "value": "My"}, {"contentType": "PlainText", "group": 3、“值”:“朋友”}]}}、“intentName”:“CardsI”、“slots”:{“CardsB”:“Hello”}}};行:1,列:95]"
      • 好吧,这不是一个很有帮助的错误。您是否尝试过我的建议的不同组合? #1 和#3 可能不是必要的格式。不过,文档对#2 和#4 非常清楚。 @sid8491 是另一位经验丰富的 Lex 机器人开发人员,或许可以提供帮助。
      【解决方案3】:

      您可以执行以下操作将来自 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,并且可以根据您的需要进行自定义。

      希望对你有帮助!

      【讨论】:

      • 我们试图打印多个响应而不是存储多个响应。我们知道 session 属性仅用于存储值而不是显示或 UI 目的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-16
      • 1970-01-01
      • 2018-06-13
      • 2015-09-11
      • 1970-01-01
      相关资源
      最近更新 更多