Как вы полностью заканчиваете и выходите из навыка? - PullRequest
0 голосов
/ 22 сентября 2018

У меня есть навык 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);

},

1 Ответ

0 голосов
/ 22 сентября 2018

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

В этом коде вы можете получить общее представление о том, как это может работать, хотя наверняка чего-то не хватает, но важными являются 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();
}

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

...