在 Alexa 技能中播放由 AWS api 网关创建的 mp3
Posted
技术标签:
【中文标题】在 Alexa 技能中播放由 AWS api 网关创建的 mp3【英文标题】:Playing an mp3 created by AWS api gateway in an Alexa skill 【发布时间】:2020-11-09 23:26:53 【问题描述】:我有一个由 AWS api 网关调用的 AWS lambda 函数。该函数从 AWS S3 上托管的多个 mp3 文件中获取 URL,并将它们连接成一个 mp3 文件。当我从浏览器调用 api 时一切正常(浏览器打开媒体播放器并播放组合的音频 mp3)。
URL 请求如下所示:
https://0xxxxxxxx.execute-api.eu-west-1.amazonaws.com/alpha/files?file=https://xxx.s3-eu-west-1.amazonaws.com/file1.mp3&file=https://xxx.s3-eu-west-1.amazonaws.com/file2.mp3&file=https://xxx.s3-eu-west-1.amazonaws.com/file3.mp3
HTTP 响应是音频/mpeg 类型,大约 10 秒长,并且是 base64 编码的。
我试图用我的技能将它封装到 SSML 中,但它失败了。从 Alexa 技能套件语音和音调模拟器中,我收到错误消息“检索文本到语音时出错;输入不兼容”
在模拟器中,这是我写的:
<speak>
<audio src='https://0xxxxxxxx.execute-api.eu-west-1.amazonaws.com/alpha/files?file=https://xxx.s3-eu-west-1.amazonaws.com/file1.mp3&file=https://xxx.s3-eu-west-1.amazonaws.com/file2.mp3&file=https://xxx.s3-eu-west-1.amazonaws.com/file3.mp3'/>
</speak>
我用它来确认 S3 访问在模拟器中有效:
<speak>
<audio src='https://s3.amazonaws.com/ask-soundlibrary/human/amzn_sfx_crowd_applause_05.mp3'/>
</speak>
任何想法有什么问题吗?是我的 lambda 技能的 http 响应有问题,还是需要在 api 网关中启用某些东西?从我的 api 网关日志来看,该技能似乎从未尝试访问网关。
我应该使用不同的方法来获取 mp3 进行播放吗?请注意,我想使用 SSML,因为我的音频是一种效果,因此不应使用音频播放器(这是亚马逊的要求)。
【问题讨论】:
【参考方案1】:我可以帮你解决这个问题。同样的问题也发生在我身上。经过研究,我解决了它。这里的问题是您在 SSML 中提供的链接中的“&”。您提供的解决方案有效,因为您的链接中现在没有“&”。参数太多不是问题。
我建议你把“&”换成"&amp;"
在python中-
url = 'https://0xxxxxxxx.execute-api.eu-west-1.amazonaws.com/alpha/files?file=https://xxx.s3-eu-west-1.amazonaws.com/file1.mp3&file=https://xxx.s3-eu-west-1.amazonaws.com/file2.mp3&file=https://xxx.s3-eu-west-1.amazonaws.com/file3.mp3'
url = url.replace("&","&")
<speak>
"<audio src='" + url + "'/>"
</speak>
我希望这对你有帮助。如果不起作用,请告诉我。
【讨论】:
谢谢阿什。我很想知道这是否是使多个参数与 SSML 一起工作的方法(从快速谷歌来看,你是正确的)所以我会尝试一下。感谢您的支持。【参考方案2】:好的,我自己解决了。
看来 SSML audio src 不喜欢 URL 调用中的参数太多。我现在只需在 URL 中传递 1 个参数并使用我的 lambda 函数从该单个参数中删除多个文件名。
https://0xxxxxxxx.execute-api.eu-west-1.amazonaws.com/alpha/files?file=/file1.mp3file=file2.mp3file=file3.mp3
【讨论】:
以上是关于在 Alexa 技能中播放由 AWS api 网关创建的 mp3的主要内容,如果未能解决你的问题,请参考以下文章
通过 API-KEY 使用来自外部 API 的数据的 Alexa 技能