Alexa Skill Loop: на основе пользовательского ввода, Alexa скажет что-то - PullRequest
0 голосов
/ 03 мая 2018

Мой навык: Создание предложения сока, когда, когда пользователь говорит состояние, Алекса предложит предложение сока, основываясь на этом состоянии. Пара состояний и соков хранится в массиве.

Испытание: В настоящее время мое умение будет выполнено только один раз. Есть ли способ, при котором у меня может быть цикл, когда после того, как Алекса предложит предложение, Алекса снова задаст вопрос и будет ждать ответа пользователя? Прикреплен код, который у меня есть с моим навыком. Спасибо.

var Alexa = require('alexa-sdk');

const APP_ID = undefined;

const skillData = [
    {
        state: "FLORIDA",
        suggestion: "My suggestion for Florida is organic orange juice by Naked"
    },
    {
        state: "CALIFORNIA",
        suggestion: "My suggestion for California is pomegrante by POM!!"
    },
    {
        state: "NEW JERSEY",
        suggestion: "My suggestion for Jersey is blueberry by Jersey Fresh"
    }
];

var number = 0;
while(number<3){
var handlers = {
  'LaunchRequest': function () {

    this.emit(':ask', 'I can suggest a juice from any state in the United States. What state would you like a juice suggestion for?', 'Tell me a state name and I will suggest a local juice from there.');
  
      
    },
  'MakeSuggestion': function() {
      var stateSlot = this.event.request.intent.slots.state.value;

      this.emit(':tell', getSuggestion(skillData, 'state', stateSlot.toUpperCase()).suggestion);

  },
  'Unhandled': function () {
    this.emit(':tell', 'Sorry, I don\'t know what to do');
  },
  'AMAZON.HelpIntent': function () {
      this.emit(':ask', "What can I help you with?", "How can I help?");
  },
  'AMAZON.CancelIntent': function () {
      this.emit(':tell', "Okay!");
  },
  'AMAZON.StopIntent': function () {
      this.emit(':tell', "Goodbye!");
  },
}
number = number+1;
};

exports.handler = function(event, context){
  var alexa = Alexa.handler(event, context);
  alexa.registerHandlers(handlers);
  alexa.execute();
};

function getSuggestion(arr, propName, stateName) {
  for (var i=0; i < arr.length; i++) {
    if (arr[i][propName] == stateName) {
      return arr[i];
    }
  }
}

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

В вашей функции MakeSuggestion используйте ask вместо tell и снова добавьте вопрос:

this.emit(':ask', getSuggestion(skillData, 'state', stateSlot.toUpperCase()).suggestion + '. Tell me another state and I give you another suggestion!');
0 голосов
/ 04 мая 2018

Да, вы можете сделать это, используя состояние и вместо ": tell" вы можете ответить ": ask", чтобы alexa mic оставался открытым для взаимодействия с пользователем.

...