播放

时间:2017-06-28 10:04:37

标签: node.js audio playback alexa alexa-skills-kit

我正在使用针对NodeJS的Alexa-SDK,并遇到了AudioPlayer及其控件的问题。

问题:

当我使用以下代码片段启动音频流时,它开始播放(按预期),但是没有机会使用内置的" AMAZON.StopIntent"再次停止播放。或任何其他可用的意图。

Alexa回答类似于:"在您的服务中处理请求时出错。"并一直播放,直到曲目播放到最后。

this.response.audioPlayerPlay(behavior, url, token, expectedPreviousToken, offsetInMilliseconds)
this.emit(':responseReady');

以下是我的处理程序以获得更好的概述。我从skill-sample-nodejs-audio-player

中获取了结构
var stateHandlers = {
  startModeIntentHandlers : Alexa.CreateStateHandler(constants.states.START_MODE, {
      'LaunchRequest': function() {
          this.handler.state = constants.states.PLAY_OCCASION_MODE;
          this.emit(':ask', 'Welcome, say yes to start the playback.','Say yes to start the playback');
      },
      'AMAZON.StopIntent': function() {
          this.response.audioPlayerStop();
          this.emit(':tell', 'See you next Time!');
      },
      'AMAZON.CancelIntent': function() {
          this.emit(':tell', 'See you next Time!');
      },
      'SessionEndedRequest': function () {
          this.emit(':tell', 'See you next Time!');
      }
  }),

  playOccasionModeIntentHandlers : Alexa.CreateStateHandler(constants.states.PLAY_OCCASION_MODE, {
      'LaunchRequest': function () {
          this.emit('LaunchRequest'); // Uses the handler in newSessionHandlers
      },
      'AMAZON.YesIntent': function() {    
          this.handler.state = constants.states.PLAY_OCCASION_MODE;
          this.response.speak('Lets go. Here comes your Podcast.');
          this.response.audioPlayerPlay('REPLACE_ALL', 'https://feeds.soundcloud.com/stream/274166909-amazon-web-services-306355661-aws-podcast-episode-139.mp3', 'earlybird', null, 0);
          this.emit(':responseReady');
      },
      'AMAZON.NoIntent': function() {
          this.emit(':tell', 'See you next Time!');
      },
      'AMAZON.StopIntent': function() {
        this.response.audioPlayerStop();
        this.response.speak('See you next Time!');
        this.emit(':responseReady');
      },
      'AMAZON.CancelIntent': function() {
          this.emit(':tell', 'See you next Time!');
      },
      'SessionEndedRequest': function () {
          this.emit(':tell', 'See you next Time!');
      },
      'Unhandled': function() {
          this.emit(':tell', 'See you next Time!');
      }
  }),
};

修改

如果我添加"未处理"函数到START_MODE状态,Alexa将始终回答这个问题并完全忽略 StopIntent

这是第一个解决方法,但是当涉及更高级的功能,如播放下一首歌曲或暂停播放时,问题又会出现。

'Unhandled': function() {
    this.response.audioPlayerStop();
    this.response.speak('Unhandled!');
    this.emit(':responseReady');
 }

EDIT2:

似乎找到了解决方案。我还没有添加AMAZON.PauseIntent,它也需要" Alexa,停止"命令。只需添加它,它现在似乎或多或少都有效。

'AMAZON.PauseIntent' : function () {
     this.response.audioPlayerStop();
     this.response.speak('Paused. See you next time!');
     this.emit(':responseReady');
 },

1 个答案:

答案 0 :(得分:-1)

您应该设置this.handler.state ='_ PLAY_MODE',然后它将应用playmodeIntentHandler。