您如何使用 Alexa 按顺序播放音频文件列表?

How do you play a list of audio files in order with Alexa?

我现在正在构建基于 rails 后端的 Alexa 应用程序。到目前为止,我可以通过在 LaunchRequest 上返回此 JSON 来轻松播放音频文件:

{
    "body": {
        "version": "1.0",
        "response": {
            "outputSpeech": {
                "type": "PlainText",
                "text": "Welcome To My App"
            },
            "directives": [
                {
                    "type": "AudioPlayer.Play",
                    "playBehavior": "REPLACE_ALL",
                    "audioItem": {
                        "stream": {
                            "token": "12345",
                            "url": "https://s3.us-east-2.amazonaws.com/my-s3-bucket/songs/audio_files/000/000/008/original/SampleAudio_0.4mb.mp3?1523318953", 
                            "offsetInMilliseconds": 0
                        }
                    }
                }
            ],
            "shouldEndSession": true
        }
    }
}

这很好用,可以播放位于我的 s3 存储桶中的音频文件。我什至无法弄清楚如何在当前音频文件结束后自动播放新音频文件,或者当我说 "Alexa, next."

根据我收集到的信息,我需要使用 "ENQUEUE" playBehavior、标记和 expectedPreviousTokens,以及 PlaybackNearlyFinished。但是,我找不到任何好的教程或代码示例来解释如何使用这些东西。

PlaybackNearlyFinished 是如何发送的?它是从我的 rails 后端发送到 Alexa 还是从 Alexa 发送到我的 rails 后端?我该如何回应?我如何以将新音频文件添加到队列的方式响应它?

如果有人能解释我将如何向队列中添加新的音频文件,请填写,或指导我查看说明如何完成此操作的教程。

What I can't even come close to figuring out is how to have a new audio file automatically play after the current one ends

您必须实施 Amazon Audio Player 方法。这些动作将被自动调用。例如,如果播放结束,将调用 onPlaybackNearlyFinished() 方法。因此,您必须在这些方法中实现自己的逻辑才能将下一首歌曲加入队列。对于下一首歌曲,只需添加一个新的 PlayDirectiv 作为对 onPlaybackNearlyFinished 的响应 PlayBehavior.ENQUEUE .

, or when I say "Alexa, next."

这是常规 AMAZON.NextIntent 您还必须实现自己的逻辑(例如使用 PlayBehavior.REPLACE_ALL 发送随机歌曲作为播放指令)

How is PlaybackNearlyFinished sent? Is it sent from my rails backend to Alexa or from Alexa to my rails backend? How do I respond to it? How do I respond to it in such a way that it adds a new audio file to the queue?

它是从 "Alexa to your rails backend" 发送的,因此您必须实现所有 AudioPlayer 方法(在 Java 中只需将 "implements Speechlet, AudioPlayer" 添加到您的 class 中)。这将提供所有必要的方法(例如 onPlaybackNearlyFinished 方法),您可以按照上述方式编写逻辑。

请注意,您只能使用 PlayDirective 响应 AudioPlayer 操作!!任何输出语音或重新提示都会出问题!