你如何与Alexa一起播放音频文件列表?

时间:2018-04-10 01:46:33

标签: audio alexa alexa-skills-kit alexa-skill

我正在构建一个基于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,接下来。"

从我收集的内容来看,我需要使用" ENQUEUE" playBehavior,tokens和expectedPreviousTokens,以及PlaybackNearlyFinished。但是,我找不到任何好的教程或代码示例来解释如何使用这些东西。

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

如果有人可以解释如何将新的音频文件添加到队列中,请填写我的信息,或者指导我一个解释如何完成此操作的教程。

1 个答案:

答案 0 :(得分:1)

  

我甚至无法弄清楚如何在当前结束后自动播放新的音频文件

您必须实施Amazon Audio Player方法。这些操作将自动调用。例如,如果回放结束,则调用onPlaybackNearlyFinished()方法。因此,您必须在这些方法中实现自己的逻辑,以便将您的下一首歌排入队列。对于下一首歌,只需添加一个新的PlayDirectiv作为对带有PlayBehavior.ENQUEUE的onPlaybackNearlyFinished的回复。

  

,或者当我说“Alexa,接下来。”

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

  

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

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

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