Как добавить несколько ответов в AWS Lex - PullRequest
0 голосов
/ 25 сентября 2018

Я пытался добавить несколько ответов для AWS Lex, используя лямбда-функции AWS, но я сталкиваюсь с этой ошибкой.

Я пытался
fig 1

Но я застрял в сообщении

Произошла ошибка: неверный лямбда-ответ: получен неверный ответ от лямбды: невозможно создать экземпляр сообщения, проблема: 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 ": null}}};строка: 1, столбец: 252]

В лямбда-функции мы используем следующий код для печати нескольких ответов

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

, но мы все еще сталкиваемсявопрос.Любая помощь?

Ответы [ 3 ]

0 голосов
/ 26 сентября 2018

Вы можете сделать следующие вещи, чтобы добавить множественный ответ из лямбда-амазонки в свой amazon lex.

Вы можете добавить атрибут сеанса в ответе из своей лямбда-функции.

{
  "dialogState": "Fulfilled",
  "intentName": "myIntent",
  "message": "Hi",
  "messageFormat": "PlainText",
  "responseCard": null,
  "sessionAttributes": {
    "sessionAttribute1": "FirstAttribute",
    "SessionAttribute2": "secondAttribute"
  },
  "slotToElicit": null,
  "slots": {
    "customerId": "1419"
  }
}

Эти атрибуты SessionAttributes могут быть возвращены из вашей лямбда-функции в lex и могут быть настроены в соответствии с вашими потребностями.

Надеюсь, это поможет!

0 голосов
/ 29 июля 2019

У меня была такая же проблема, Документы ничего не предлагают.Но при проверке сетевого ответа от lex мы видим, что в случае нескольких сообщений массив сообщений передается в виде строки, а не объекта.

Ответ от лямбды должен быть в следующем формате.

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
    }
}
0 голосов
/ 25 сентября 2018

Несколько вещей, которые я предлагаю попробовать:

  1. Включить contentType в объект message из-за получаемой вами ошибки.
  2. Документы показывают messagesкак экранированный объект JSON, поэтому избегайте кавычек и оберните все messages в { }.
  3. Для базовых message нужны contentType и content, поэтому попробуйте установить экранированный объект JSON (messages) в content
  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
        }
    }
}
...