我正在构建一个基于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后端?我该如何回应?如何以这样的方式响应它,即它将新的音频文件添加到队列中?
如果有人可以解释如何将新的音频文件添加到队列中,请填写我的信息,或者指导我一个解释如何完成此操作的教程。
答案 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动作!!任何输出语音或重新提示都会导致问题!