我正在尝试编写一种Alexa技能,仅播放MP3文件。我使用以下代码修改了默认的“ hello world” lambda:
const Alexa = require('ask-sdk-core');
const LaunchRequestHandler = {
canHandle(handlerInput) {
return Alexa.getRequestType(handlerInput.requestEnvelope) === 'LaunchRequest';
},
handle(handlerInput) {
return {
"response": {
"directives": [
{
"type": "AudioPlayer.Play",
"playBehavior": "REPLACE_ALL",
"audioItem": {
"stream": {
"token": "12345",
"url": "https://jpc.io/r/brown_noise.mp3",
"offsetInMilliseconds": 0
}
}
}
],
"shouldEndSession": true
}
}
}
};
exports.handler = Alexa.SkillBuilders.custom()
.addRequestHandlers(
LaunchRequestHandler,
)
.lambda();
但是当我部署代码并调用该技能时,它不会发出任何声音或报告任何错误。当我用
替换handle
代码时
const speakOutput = 'Hello world';
return handlerInput.responseBuilder
.speak(speakOutput)
.reprompt(speakOutput)
.getResponse();
然后她在被调用时问好世界。
我的问题:为什么她会跟我说话,但似乎不播放我的mp3?我在堆栈溢出上看到了其他问题,原因是它们没有使用https,但是我使用的是https。
答案 0 :(得分:0)
在撰写本文时,有一种直接发布AudioPlayer指令的新方法。
const PlayStreamIntentHandler = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === 'LaunchRequest'
|| handlerInput.requestEnvelope.request.type === 'IntentRequest';
},
handle(handlerInput) {
const stream = STREAMS[0];
handlerInput.responseBuilder
.speak(`starting ${stream.metadata.title}`)
.addAudioPlayerPlayDirective('REPLACE_ALL', stream.url, stream.token, 0, null, stream.metadata);
return handlerInput.responseBuilder
.getResponse();
},
};
关键功能为.addAudioPlayerPlayDirective();
,尽管其中某些代码似乎已过时,但您可以在Alexa Skills Kit API上阅读有关这些指令功能的更多信息。 Building Response页列出了较新的音频播放器功能。
STREAMS
数组的示例:
const STREAMS = [
{
token: '1',
url: 'https://streaming.radionomy.com/-ibizaglobalradio-?lang=en-US&appName=iTunes.m3u',
metadata: {
title: 'Stream One',
subtitle: 'A subtitle for stream one',
art: {
sources: [
{
contentDescription: 'example image',
url: 'https://s3.amazonaws.com/cdn.dabblelab.com/img/audiostream-starter-512x512.png',
widthPixels: 512,
heightPixels: 512,
},
],
},
backgroundImage: {
sources: [
{
contentDescription: 'example image',
url: 'https://s3.amazonaws.com/cdn.dabblelab.com/img/wayfarer-on-beach-1200x800.png',
widthPixels: 1200,
heightPixels: 800,
},
],
},
},
},
];
摘录自this example的代码段。