Как полностью завершить и выйти из навыка?

У меня есть навык alexa, который воспроизводит звуковой файл по запросу, а затем воспроизводит сообщение и прекращает воспроизведение, когда пользователь говорит стоп. Я использую оператор завершения сеанса в намерении остановки. Однако после того, как вы скажете «стоп» один раз, если вы снова скажете «Алекса стоп», он снова проиграет сообщение, сообщая мне, что навык все еще активен. Как подать команду на полный выход из навыка?

Вот мое текущее намерение остановиться:

 'AMAZON.StopIntent': function() {

//output to available screen
makeTemplate.call(this, 'stop');

this.response.speak('Ok. I sent a practice tip to your Alexa app.').audioPlayerStop();
this.emit(':responseReady');
this.response.shouldEndSession(true);

},


person Eric Oswald    schedule 22.09.2018    source источник


Ответы (1)


Вы можете воспользоваться преимуществом конечного автомата в Alexa, я бы предложил иметь другое состояние, помимо обычного по умолчанию, чтобы там был StopIntent. В этом случае вы можете переключиться в это состояние, когда воспроизводите звук, и только тогда ваше конкретное поведение Stop будет работать, там вы можете вернуться в обычное состояние, которое не будет иметь поведения по умолчанию для вашего навыка, поэтому оно будет работать по умолчанию один от самой Алексы, закрывающей ваше умение.

В этом коде вы можете получить базовое представление о том, как это может работать, хотя наверняка чего-то не хватает, но важными являются this.handler.state, который контролирует, в каком состоянии находится сеанс в данный момент, и Alexa.CreateStateHandler(state, intents), который получает в качестве параметра имя определенного состояния и конкретного поведения для намерений в этом состоянии.

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

const defaultHandlers = {
    PlayIntent: function() {
        // move to state 'PLAY'
        this.handler.state = 'PLAY'
        // Code to play
    }
}

const playingHanders = Alexa.CreateStateHandler('PLAY', {
    PlayIntent: function() {
        // Code to play 
    },

    'AMAZON.StopIntent': function() {
        //output to available screen
        makeTemplate.call(this, 'stop');
        // move to default state
        this.handler.state = ''
        this.response.speak('Ok. I sent a practice tip to your Alexa app.').audioPlayerStop();
        this.emit(':responseReady');
        this.response.shouldEndSession(true);
    }
})

module.exports.skill = (event, context, callback) => {
    const alexa = Alexa.handler(event, context, callback);
    alexa.appId = APP_ID
    alexa.registerHandlers(defaultHandlers, playingHanders)
    alexa.execute();
}

В Интернете есть много руководств по этому поводу, так что вы можете найти лучшие идеи о том, как этим воспользоваться.

person Edwin    schedule 22.09.2018