Отмена намерения не приостановки / выхода - PullRequest
1 голос
/ 17 марта 2020

Я работаю над видео / аудио навыком, который транслирует новости в зависимости от устройства пользователя.

В последние дни я столкнулся с проблемой, когда просил Alexa отменить (навык на немецком языке). ), поэтому в соответствии с документацией для проверки CancelIntent это будет «alexa, abbrechen». Это приводит к 3 различным случаям:

  1. Нет ответа и нет журналов ни от ExitHandler, ни от PausePlaybackHandler, ничего не происходит, световой круг загорается и гаснет.

  2. Он вызывает PausePlaybackHandleras, которые я вижу в журналах, но не приостанавливает видео / аудио при воспроизведении

  3. Он вызывает ExitHandler, говорит прощальное сообщение, но не Не заканчивайте сеанс и не останавливайте / приостанавливайте видео / аудио при его воспроизведении. Это происходит как при включении, так и при выключении видео.

Еще одна вещь, которую стоит упомянуть, это то, что когда я регистрируюсь, чтобы увидеть, какое намерение вызывается словом «abbrechen», иногда возвращается CancelIntent и другие времена StopIntent.

Другие слова работают правильно для приостановки или выхода, такие как «pause» или «verlassen», но они не вызывают ни PausePlaybackHandler, ни ExitHandler.

Вот код PausePlaybackHandler и ExitHandler. Я проверил приведенный здесь пример кода https://github.com/alexa/skill-sample-nodejs-audio-player/blob/mainline/multiple-streams/lambda/src/index.js, и он должен совпадать.

PausePlaybackHandler:

const PausePlaybackHandler = {
    async canHandle(handlerInput) {
        const request = handlerInput.requestEnvelope.request;

        return  request.type === 'IntentRequest' &&
                (request.intent.name === 'AMAZON.StopIntent' ||
                        request.intent.name === 'AMAZON.CancelIntent' ||
                        request.intent.name === 'AMAZON.PauseIntent');
    },
    async handle(handlerInput) {
        const request = handlerInput.requestEnvelope.request;
        console.log('pause handler:');
        console.log(request.intent.name);
        const {playbackInfo} = await handlerInput.attributesManager.getPersistentAttributes();
        globals.paused = true;
        playbackInfo.offsetInMilliseconds =  helper.getOffsetInMilliseconds(handlerInput);
        return controller.stop(handlerInput);
    },
};

ExitHandler:

const ExitHandler = {
    async canHandle(handlerInput) {
        const playbackInfo  = await handlerInput.attributesManager.getPersistentAttributes().playbackInfo;

        const request = handlerInput.requestEnvelope.request;
        return !playbackInfo.inPlaybackSession &&
                request.type === 'IntentRequest' &&
                (request.intent.name === 'AMAZON.StopIntent' ||
                        request.intent.name === 'AMAZON.CancelIntent');
    },
    async handle(handlerInput) {
        const {playbackInfo} = await handlerInput.attributesManager.getPersistentAttributes();
        const {
            playOrder,
            index
        } = playbackInfo;
        const context = handlerInput.requestEnvelope.context;
        playbackInfo.inPlaybackSession = false;
        globals.unsetSlotItem = '';
        globals.selectedItem = 0;
        const request = handlerInput.requestEnvelope.request;
        console.log('exit handler:');
        console.log(request.intent.name);
        console.log('context.AudioPlayer',context.AudioPlayer.playerActivity);
        const message = messages.GOODBYE;

            return handlerInput.responseBuilder
                    .speak(message)
                    .getResponse();


    },
};

Я также пытался добавить в responseBuilder для ExitHandler, он все еще только читал сообщение, но не останавливался и не выходил.

.addAudioPlayerStopDirective()
.withShouldEndSession(true)
...