Аудио MP3 не воспроизводится в Alexa / Echo с addAudioPlayerPlayDirective - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь реализовать функцию Play в Alexa, чтобы воспроизвести mp3-файл, полученный при вызове API.Я получаю данные обратно в порядке, и директива 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 голосов
/ 07 декабря 2018

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, который передается.Удалить его.

...