Alexa, точно совпадающая с образцом высказывания, не может передать значение слота.

У меня есть навык Alexa с целью под названием «rollDice». В намерении есть два высказывания:

roll a {sides} sided dice
roll a {sides} sided die

sides определяется ниже с помощью типа слота AMAZON.NUMBER.

Навык развивается успешно, я открываю его и запускаю «бросьте 20-гранный кубик», и он запускает правильный обработчик запроса намерения, но когда я пытаюсь использовать значение слота sides, оно становится undefined. Я проверил панель ввода JSON и вижу, что он не передается:

"intent": {
    "name": "rollDice",
    "confirmationStatus": "NONE",
    "slots": {
        "sides": {
            "name": "sides",
            "confirmationStatus": "NONE"
        }
    }
}

Вот мой код, который обрабатывает намерение rollDice:

module.exports = ({ store, slot }) => {
  const sideCount = +slot('sides', 6);
  const roll = 1 + Math.floor(Math.random() * sideCount);
  store.state.rolls.push({sideCount, roll});
  return `Rolled a ${sideCount} sided dice and got ${roll}. ${slot('sides')}`;
};

И ответ, который я получаю от Алексы:

Rolled a 6 sided dice and got 4. undefined

Я без проблем использую функцию slot в нескольких других обработчиках намерений, поэтому я не думаю, что это проблема, но здесь это на всякий случай:

slot(name, defaultValue) {
  const { intent } = this;
  const slot = intent && intent.slots && intent.slots[name];
  return slot && slot.value || defaultValue;
}

РЕДАКТИРОВАТЬ:

Это значение event.request.intent в моей лямбда-функции после запуска с roll a 20 sided dice:

{
  "name": "rollDice",
  "confirmationStatus": "NONE",
  "slots": {
    "sides": {
      "name": "sides",
      "confirmationStatus": "NONE"
    }
  }
}

person SimpleJ    schedule 17.04.2018    source источник
comment
@mplungjan Похоже, что большинство этих сообщений связано с людьми, пытающимися получить доступ к значениям слотов в неправильном месте в объекте события. Я использую ту же логику, чтобы без проблем получить значение слота для нескольких обработчиков намерений, и это значение не отображается на панели Input JSON тестовой страницы консоли alexa dev.   -  person SimpleJ    schedule 17.04.2018


Ответы (1)


Когда вы тестируете с alexa, вы должны учитывать, что вы тестируете VOICE-сервис и имитируете РЕЧЬ вместо текста. Вы не можете сказать «бросьте 20-гранный кубик» физически. Итак, если вы имеете в виду бросить 20-гранный кубик, вы должны сказать «бросьте 20-гранный кубик», потому что именно так вы произносите число 20.

person Leandro    schedule 19.04.2018
comment
Спасибо. Если ввести номер по буквам, проблема будет решена. - person SimpleJ; 19.04.2018