构建一个私人Alexa点唱机技能,用于个人MP3和网络电台
来自 Wikiprompt,自由的提示词百科全书
构建一个私人Alexa点唱机技能,用于个人MP3和网络电台 构建一个私有Alexa技能的综合提示,用于播放云存储桶中的个人MP3文件和网络电台,包含详细的设置、构建和部署说明。
提示词内容收藏
🌐
为我构建一个私有的Alexa技能,用于播放我自己云存储桶中的音乐,以及网络电台
我希望我的Amazon Echo能播放我自己的MP3文件,而不是被迫使用Amazon Music或Spotify。为此,请构建一个私有的Alexa技能。尽可能多地自己完成:使用CLI和API,自行部署和测试,只向我询问只有人才能完成的事情(登录、点击允许、在Echo上测试)。
设置
- 我的音乐存储在一个兼容S3的存储桶中(AWS S3或Cloudflare R2),位于music/前缀下。其中的每个文件夹代表一个流派/播放列表(music/Coffee Jazz/)或艺术家/专辑(music/Artist/Album/)。
- 我会为存储桶创建一个访问密钥并提供给你。请将其保存在配置文件中,切勿打印出来。该技能只需要读取权限;上传工具需要写入权限。
- 我的Echo和我的Amazon开发者账户使用相同的Amazon登录信息。
构建
1. 一个由Alexa托管(Node.js)的自定义技能,调用名称“jukebox”(如果Amazon拒绝单个词,则使用两个词),并启用AudioPlayer接口。
2. 语音模型:一个带有AMAZON.SearchQuery槽位的PlayIntent(“播放{query}”、“放上{query}”、“调谐到{query}”、“随机播放{query}”)、一个ShuffleAllIntent、一个WhatsPlayingIntent、一个ListStationsIntent,以及所有内置的AudioPlayer意图(暂停、恢复、下一首、上一首、循环开/关、随机播放开/关、重新开始)。
3. 曲库:使用ListObjectsV2列出music/下的所有内容(跟随continuation token),根据键前缀构建文件夹,仅保留.mp3/.m4a/.aac文件,并将结果缓存5分钟。将口语短语与文件夹和文件名进行宽松匹配:忽略曲目编号和空格(“ama piano”= amapiano),将数字词转换为数字(“thirteen beaches”= 13 Beaches),并处理流派别名(dnb、drum n bass、hiphop、lo fi)。
4. 播放:为每个文件提供预签名的HTTPS GET URL。使其有效期至少为12小时,以便长时间混音和暂停/恢复不会在播放中途过期。保持存储桶私有。将播放队列存储在AudioPlayer令牌中(文件夹、随机种子、位置),这样就不需要数据库,并在PlaybackNearlyFinished时排队下一首曲目。文件夹支持随机播放和循环。所有文件都以曲目编号开头的文件夹视为专辑,并按顺序播放。单首歌曲会继续播放其所在文件夹的其余部分。
5. 电台:一个HTTPS MP3/AAC/HLS流媒体电台列表,包括优秀的地下电子音乐电台(Rinse FM、NTS、Bassdrive、Intergalactic FM、Kiosk Radio、Refuge Worldwide等),以及新闻(BBC World Service、NPR)。先用curl测试每个URL,并删除纯HTTP的,因为Alexa会拒绝它们。支持“播放rinse fm”、“鼓打贝斯电台”、“科技舞曲电台”和“新闻”,并让下一首/上一首切换电台。直播流会中断,Alexa将中断视为结束,因此在PlaybackNearlyFinished时用新令牌重新排队同一流,并在PlaybackFailed时重试一次。
6. 每个请求记录一行(类型、意图、令牌、偏移量、错误),以便播放问题出现在CloudWatch中。
无需Web控制台即可部署
- 安装ASK CLI(npm i -g ask-cli)。如果ask configure在您的shell中无法工作,请运行ask util generate-lwa-tokens --no-browser,让我粘贴一次性代码,并自行编写~/.ask/cli_config。从GET https://t.co/8eS787CaBt获取供应商ID。
- 托管技能代码是一个git仓库(使用ask smapi get-alexa-hosted-skill-metadata找到它)。推送到master进行部署,使用ask util git-credentials-helper作为git凭据助手。该助手需要ask-resources.json和.ask/ask-states.json位于仓库旁边。如果推送开始失败并出现403,请清除macOS钥匙串中缓存的凭据。
- 托管运行时可能运行旧版本的Node,因此请固定一个支持它的S3 SDK版本,或使用一个小型SigV4库签署URL。
- 使用ask smapi set-interaction-model上传语音模型,检查技能清单是否列出AUDIO_PLAYER,并使用ask smapi simulate-skill进行测试。Web控制台的模拟器无法播放音频,因此在那里出现“请求的技能响应出现问题”错误是预期的。
当它工作时,告诉我如何添加Alexa应用例程(当:语音“coffee jazz”→ 操作:自定义“ask jukebox to play coffee jazz”),这样我就可以只说“Alexa,coffee jazz”。以及如何播放我喜欢的网络电台。
用法
此提示词专为 coding 设计。复制上方内容并粘贴到你常用的 AI 工具中。
为获得最佳效果,可将占位符(方括号或大写字母标示)替换为你的具体需求。
讨论
0 条评论