Я пытаюсь реализовать функцию 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()
},
};
Есть идеи, где я ошибаюсь?