使用addAudioPlayerPlayDirective无法在Alexa / Echo中播放MP3音频

时间:2018-12-06 18:43:20

标签: audio mp3 alexa-skills-kit alexa-skill alexa-voice-service

我正在尝试实现Alexa的播放功能,以播放从API调用获得的mp3文件。我得到的数据很好,并且speak指令的确包含了来自API响应的数据,因此我知道该调用有效,但文件本身从未播放。

我正在使用物理回波设备进行测试。

Cloudwatch日志不是超级有用的(有更好的地方可以看到整个堆栈跟踪吗?),但是我确实看到了以下错误:

Unable to find a suitable request handler.

在与undefined的会话结束之后。

这是我的实现代码:

API调用:

const getEpisode = uri => new Promise(
  (resolve, reject) => {
    httpRequest({
      method: 'GET',
      uri,
      json: true,
      headers: {
        'X-API-KEY': key,
      },
    }).then(data => {
      console.log(data);
      return resolve(data);
    })
      .catch(err => reject(new Error(err)));
  }
);

PlayIntent:

const PlayIntentHandler = {
  canHandle(handlerInput) {
    return handlerInput.requestEnvelope.request.type === 'LaunchRequest' ||
        (handlerInput.requestEnvelope.request.type === 'IntentRequest'
        && handlerInput.requestEnvelope.request.intent.name === 'PlayIntent') ||
        (handlerInput.requestEnvelope.request.type === 'IntentRequest'
        && handlerInput.requestEnvelope.request.intent.name === 'AMAZON.ResumeIntent');
  },
  async handle(handlerInput) {
    const uri = `${endpoint}/most_recent/amazon`;
    console.log(uri);
    const data = await getEpisode(uri);
    console.log("before setting response");
    return handlerInput.responseBuilder
      .speak(`Playing episode ${data.episode_title}`)
      .addAudioPlayerPlayDirective('REPLACE_ALL', data.episode_url, data.episode_title, 0, null, null)
      .withShouldEndSession(true)
      .getResponse()
  },
};

知道我要去哪里哪里吗?

1 个答案:

答案 0 :(得分:0)

addAudioPlayerPlayDirective具有5个参数:

playBehavior - 'REPLACE_ALL'

url - data.episode_url

enqueueToken - data.episode_title

offsetInMilliseconds - `0`

expectedPreviousToken - `null`

.addAudioPlayerPlayDirective('REPLACE_ALL',data.episode_url,data.episode_title,0,null,null)

如您所见,您传递了一个额外的参数null。删除它。