Я работаю над видео / аудио навыком, который транслирует новости в зависимости от устройства пользователя.
В последние дни я столкнулся с проблемой, когда просил Alexa отменить (навык на немецком языке). ), поэтому в соответствии с документацией для проверки CancelIntent это будет «alexa, abbrechen». Это приводит к 3 различным случаям:
Нет ответа и нет журналов ни от ExitHandler, ни от PausePlaybackHandler, ничего не происходит, световой круг загорается и гаснет.
Он вызывает PausePlaybackHandleras, которые я вижу в журналах, но не приостанавливает видео / аудио при воспроизведении
Он вызывает 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)