0

我正在尝试编写一个简单地播放 MP3 文件的 Alexa 技能。我使用以下代码修改了默认的“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。

4

1 回答 1

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();
  },
};

关键功能是您可以在Alexa Skills Kit API.addAudioPlayerPlayDirective();上阅读有关这些指令功能的更多信息,尽管其中的一些代码似乎已经过时。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,
          },
        ],
      },
    },
  },
];

取自此示例的代码片段。

于 2020-08-18T14:49:57.293 回答