未引发Alexa PlaybackStopped事件

时间:2019-03-11 16:23:13

标签: javascript node.js alexa

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

我正在开发一种使用AudioPlayer界面播放.mp3文件中的音频的技能。我希望能够暂停并继续播放。我有一个停止意图处理程序(第一段),它发出一个.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();
    },
  };

// ========================================================================================

0 个答案:

没有答案