Список типов слотов Amazon AWS Lex

Это довольно простой вопрос, но я не могу найти никаких доказательств для ответа. Я хочу настроить для меня тип слота в виде списка - это означает, что Лексу придется продолжать запрашивать дополнительные элементы в этом списке.

Например, вот как должно выглядеть движение вперед-назад:

Lex: What flowers would you like to order?
Me: roses
Lex: Any other types?
Me: yes, I also want lillies
Lex: Anything else?
Me: that is all

Пример полезной нагрузки, отправляемой в Lambda, выглядит так:

{
  "currentIntent": {
    "slots": {
      "PickupDate": "2030-11-08",
      "PickupTime": "10:00",
      "FlowerType": "lilies"
    },
    "name": "OrderFlowers",
    "confirmationStatus": "None"
  },
  "bot": {
    "alias": "$LATEST",
    "version": "$LATEST",
    "name": "OrderFlowers"
  },
  "userId": "John",
  "invocationSource": "DialogCodeHook",
  "outputDialogMode": "Text",
  "messageVersion": "1.0",
  "sessionAttributes": {}
}

Этот ^^^ был взят непосредственно из примеров тестовых конфигураций в консоли AWS Lambda.

Я хочу, чтобы это выглядело так:

{
  "currentIntent": {
    "slots": {
      "PickupDate": "2030-11-08",
      "PickupTime": "10:00",
      "FlowerTypes": [
             "roses",     
             "lilies"
       ]    
},
    "name": "OrderFlowers",
    "confirmationStatus": "None"
  },
  "bot": {
    "alias": "$LATEST",
    "version": "$LATEST",
    "name": "OrderFlowers"
  },
  "userId": "John",
  "invocationSource": "DialogCodeHook",
  "outputDialogMode": "Text",
  "messageVersion": "1.0",
  "sessionAttributes": {}
}

person Kendall Weihe    schedule 03.06.2017    source источник
comment
Согласно docs.aws.amazon.com/lex/latest/dg/ API_Slot.html выглядит так, как будто slot всегда является строкой. Могли бы вы добиться того, чего пытаетесь достичь, добавив дополнительные слоты? например FlowerType01, FlowerType02, ... FlowerType99?   -  person Justin Heath    schedule 03.06.2017
comment
Я мог бы, но я надеюсь, что есть способ получше   -  person Kendall Weihe    schedule 03.06.2017
comment
Вы можете создать ловушку проверки и использовать вызов слота elicit для заполнения вашего собственного массива цветов, который можно сохранить как sessionAttribute. Это беспорядочно, и вам, вероятно, лучше использовать несколько слотов, как упоминалось выше.   -  person Milk    schedule 23.06.2017


Ответы (1)


Слоты Lex всегда представляют собой строки, поэтому вам придется придумать более сложное решение. Я бы посоветовал:

  1. Создайте намерение спрашивать, какие цветы заказать. У вас должен появиться слот под названием «цветок».
  2. Когда вы запускаете свой код, возьмите ввод из слота и добавьте его в атрибут сеанса. Теперь задайте следующий вопрос: «Введите еще цветы, которые вы хотите заказать, или« готово », если вы закончили».
  3. Снова вызовите слот.
  4. Каждый раз, когда вы проверяете слот (перед добавлением его в сеанс), смотрите, соответствует ли он «готово». Если это так, вы можете выполнить заказ, а затем мероприятие.

Тупой, я знаю, но у Лекса сейчас очень ограниченные возможности для слотов!

person Dave Kerr    schedule 13.07.2017
comment
Это довольно крутая работа. Обратите внимание, что вам придется обнулять слот перед каждым ElicitSlot. И, наверное, лучше принимать по одному цветку за раз с ConfirmIntent между ними, как это все? для ответа да / нет. - person Jay A. Little; 16.02.2018