Alexa Skill не принимает намерения, когда не открывается с LaunchRequest - PullRequest
0 голосов
/ 25 мая 2018

Я работаю над навыком Alexa, который задает вам вопрос, а затем ждет вашего ответа.

Мне нужно, чтобы она сделала это, установив для завершения сеанса значение false.

//I'm using node.js 6.10 btw
this.handler.response.response.shouldEndSession = false;

И у меня есть намерение, которое настроено для ответов.Одно высказывание - просто слот, и у меня есть еще несколько префиксов, таких как «Мой ответ ...».До этого момента все работало нормально, но теперь я решил добавить интеграцию с DynamoDB, чтобы у меня были большие перерывы между вопросами.У меня есть намерение запросить следующий вопрос, который также инициализирует переменные из атрибутов сеанса.

Моя проблема в том, что если сессия заканчивается и пользователь снова открывает ее с этим намерением, Алекса, похоже, не принимает никаких намерений, не сообщив свое имя и имя навыка, даже если у нее открыт микрофон (светодиодывключены) ...

Например, я могу сказать свой ответ следующим образом: "Алекса, скажи MySkill, что ответом будет [ответ]" вместо того, чтобы просто сказать "[ответ]".

Она обрабатывает то, что я говорю, как если бы я отдавал ей приказы вне навыка.Я не знаю, достаточно ли это ясно, но, например, если бы ответ был «остановись» вместо того, чтобы сказать, что это правильно / неправильно, она сказала бы: «нет музыки» или что-то в этом роде, или если это было что-то, чего она не моглаобрабатывать как «кошка» вместо того, чтобы (снова) говорить «правильно» или «неправильно» или, по крайней мере, выполнить мои намерения в качестве запасного варианта, она говорит по умолчанию текст «Я не знаю».

Есть идеи?

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

Вот мой код для ответа на намерение получить следующий вопрос.

    //add event handler. we only read the question when users press 2 echo buttons. This is to ensure the buttons are awake and connected.
    //obj is 'this' in the event handler, this code is moved to a function
    var dir = wakeupDirective;
    //.. add gadget ids to directive..
    obj.response._addDirective(dir);
    obj.response.speak("Press your echo buttons when you are ready for the next one.");
    obj.emit(":responseReady");

Другая функция для обработки события при нажатии 2 кнопок

    var handleInput = function(){
      //.. other events
      this.attributes.status = -1;
      qind = this.attributes.qind;
      questionQueue = this.attributes.questions;
      tellNextQuestion(this,"");
    }

function tellNextQuestion(obj,text,emit = true){
    text += "The next question is..." + questionQueue[qind].question + "<audio src='https://s3.amazonaws.com/ask-soundlibrary/foley/amzn_sfx_rhythmic_ticking_30s_01.mp3'/>";
    //add input handler for 'buzz in'
    obj.response._addDirective(buttonPressDirective);
    delete obj.handler.response.response.shouldEndSession;
    obj.response.speak(text);
    if(emit)
        obj.emit(':responseReady');
}

А вот код, который запускается, когда кто-то гудит (это одно и то же, независимо от того, был «перерыв» или нет.

var g = events[i].inputEvents[0].gadgetId;
waitingAnswer = true;
teamBuzzedIn = t1color;

if(this.attributes.teams[t2color].gid == g){
    teamBuzzedIn = t2color;
}

this.response.speak("Go ahead "+ teamBuzzedIn + " team. I am waiting for your answer.");
this.response.listen("You have 8 more seconds to answer.");
this.handler.response.response.shouldEndSession = false;
this.emit(':responseReady');
...