Событие Alexa PlaybackStopped не было инициировано - PullRequest
0 голосов
/ 11 марта 2019

// ==========================================================================================================
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();
    },
  };

// ========================================================================================
...