如何在单次请求中返回多个音频文件供Alexa应用流式播放?
如何一次性发送多个音频文件到Alexa AudioPlayer队列
嘿,这个问题我之前帮不少开发者解决过——答案是完全可以一次性把所有音频文件发送给Alexa,不用再靠AudioPlayer.PlaybackNearlyFinished回调逐个添加啦!
核心原理
Alexa的AudioPlayer.Play指令支持通过单次响应构建完整的播放队列,关键是利用playBehavior参数和token关联来批量入队音频。
具体实现步骤
第一个音频:启动播放
用playBehavior: 'REPLACE_ALL'来清空现有队列(如果有的话)并开始播放第一个音频,这是队列的起点。后续音频:加入队列
对每个后续音频,创建新的AudioPlayer.Play指令,设置playBehavior: 'ENQUEUE',同时指定expectedPreviousToken为前一个音频的token,这样Alexa就会把它加到播放队列的末尾。
代码示例(Node.js Skill Kit)
const buildMultiAudioResponse = () => { return { version: '1.0', response: { directives: [ // 第一个音频:启动播放 { type: 'AudioPlayer.Play', playBehavior: 'REPLACE_ALL', audioItem: { stream: { url: 'https://your-domain.com/audio-track-1.mp3', token: 'track-1', offsetInMilliseconds: 0 } } }, // 第二个音频:加入队列 { type: 'AudioPlayer.Play', playBehavior: 'ENQUEUE', audioItem: { stream: { url: 'https://your-domain.com/audio-track-2.mp3', token: 'track-2', expectedPreviousToken: 'track-1', offsetInMilliseconds: 0 } } }, // 第三个音频:继续加入队列(可按需添加更多) { type: 'AudioPlayer.Play', playBehavior: 'ENQUEUE', audioItem: { stream: { url: 'https://your-domain.com/audio-track-3.mp3', token: 'track-3', expectedPreviousToken: 'track-2', offsetInMilliseconds: 0 } } } ] } }; };
关键注意事项
- 唯一Token:每个音频的
token必须是唯一值,不能重复,否则Alexa会无法正确识别队列顺序。 - Token关联:
expectedPreviousToken必须严格匹配前一个音频的token,这是队列排序的关键依据。 - 队列长度限制:虽然Alexa没有强制的队列长度上限,但建议不要一次性加入过多音频(比如超过20个),避免响应体过大导致解析问题。如果是超长播放列表,还是可以结合
PlaybackNearlyFinished回调分批补充队列。
这样调整后,用户发起一次请求就能加载完整的音频队列,Alexa会自动依次播放所有音频,不用再等待回调触发啦!
内容的提问来源于stack exchange,提问作者Tuqire Hussain
相关产品推荐
相关产品推荐

