在 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;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("&","&amp;")


<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的主要内容,如果未能解决你的问题,请参考以下文章

如何使用亚马逊的 Alexa API 为技能设置帐户链接?

通过 API-KEY 使用来自外部 API 的数据的 Alexa 技能

Alexa没有找到我的技能

Alexa For Business 私人技能似乎不会包含在日常工作中

从 Alexa 向 API 进行身份验证

我可以将我的 API 连接到 Alexa Notification 以获取自动警报吗?