如何使我的Alexa技能播放简单的mp3文件?

时间:2019-11-16 06:23:07

标签: alexa alexa-skills-kit alexa-skill alexa-sdk-nodejs ask-sdk

我正在尝试编写一种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。

1 个答案:

答案 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的代码段。