// ==========================================================================================================
const AMAZON_StopIntent_Handler = {
canHandle(handlerInput) {
const request = handlerInput.requestEnvelope.request;
return request.type === 'IntentRequest' && request.intent.name === 'AMAZON.StopIntent' ;
},
handle(handlerInput) {
const request = handlerInput.requestEnvelope.request;
const responseBuilder = handlerInput.responseBuilder;
let sessionAttributes = handlerInput.attributesManager.getSessionAttributes();
let say = 'What would you like to hear next? Say "Menu" for a list.';
// let say = 'Okay, talk to you later! ';
return responseBuilder
// .addAudioPlayerClearQueueDirective('CLEAR_ALL')
.addAudioPlayerStopDirective()
.speak(say)
// .reprompt(say)
.withShouldEndSession(false)
.getResponse();
},
};
// ==========================================================================================================
Я занимаюсь разработкой навыка, который воспроизводит аудио из файлов .mp3 с использованием интерфейса AudioPlayer
.Я хочу иметь возможность приостановить и возобновить воспроизведение.У меня есть обработчик намерения остановки (1-й фрагмент), который выдает .addAudioPlayerStopDirective
.Согласно документации, директива должна инициировать запрос PlaybackStopped
, но журналы и поведение навыка показывают, что этого не происходит.Мне нужно, чтобы это работало, чтобы я мог зафиксировать значение offsetInMilliseconds
для использования при возобновлении воспроизведения.Третий фрагмент кода показывает обработчик запроса.Чего мне не хватает?
// ========================================================================================================
const gem_of_the_day_Handler = {
canHandle(handlerInput) {
const request = handlerInput.requestEnvelope.request;
return request.type === 'IntentRequest' && request.intent.name === 'gem_of_the_day' ;
},
handle(handlerInput) {
const request = handlerInput.requestEnvelope.request;
const responseBuilder = handlerInput.responseBuilder;
let sessionAttributes = handlerInput.attributesManager.getSessionAttributes();
return handlerInput.responseBuilder
.speak("Here is the gem of the day")
.addAudioPlayerPlayDirective('REPLACE_ALL', audioData.url, "Heart Speak GEM of the Day", 0, null)
// .reprompt('What would you like to hear next?')
.getResponse();
},
};
// =======================================================================================================
// =================================================================================================================
const AudioPlayerEventHandler = {
canHandle(handlerInput) {
// console.trace();
console.log("AudioPlayerEventHandler: " + handlerInput.requestEnvelope.request.type);
// const request = handlerInput.requestEnvelope.request;
// return request.type.startsWith('AudioPlayer');
return handlerInput.requestEnvelope.request.type === 'AudioPlayer.PlaybackStopped' ||
handlerInput.requestEnvelope.request.type === 'PlaybackController.PauseCommandIssued';
// return request.type.startsWith('PlaybackStopped');
// return handlerInput.requestEnvelope.request.type.startsWith('AudioPlayer.');
},
async handle(handlerInput) {
const {
requestEnvelope,
attributesManager,
responseBuilder
} = handlerInput;
const audioPlayerEventName = requestEnvelope.request.type.split('.')[1];
// const {
// playbackSetting,
// playbackInfo
// } = await attributesManager.getPersistentAttributes();
let sessionAttributes = handlerInput.attributesManager.getSessionAttributes();
switch (audioPlayerEventName) {
case 'PlaybackStopped':
sessionAttributes['token'] = getToken(handlerInput);
// sessionAttributes['index'] = await getIndex(handlerInput);
sessionAttributes['offsetInMilliseconds'] = getOffsetInMilliseconds(handlerInput);
break;
case 'PauseCommandIssued':
sessionAttributes['token'] = getToken(handlerInput);
// sessionAttributes['index'] = await getIndex(handlerInput);
sessionAttributes['offsetInMilliseconds'] = getOffsetInMilliseconds(handlerInput);
break;
default:
throw new Error('Should never reach here!');
}
handlerInput.attributesManager.setSessionAttributes(sessionAttributes);
console.log("sessionAttributes['offsetInMilliseconds']=" + sessionAttributes['offsetInMilliseconds']);
// console.trace();
// return responseBuilder.getResponse();
},
};
// ========================================================================================