在Alexa技能中播放由AWS api网关创建的mp3



我有一个AWS lambda函数,它由AWS api网关调用。该函数从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响应是audio/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,因为我的音频是一种效果,因此不应该使用音频播放器(这是亚马逊的要求(。

我可能会帮你。同样的问题也发生在我身上。经过研究,我解决了这个问题&quot;在SSML中提供的链接中。您提供的解决方案之所以有效,是因为没有"&quot;现在在您的链接中。参数太多不是问题所在。

我建议你把"&quot;带"&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音频src似乎不喜欢URL调用中的太多参数。我现在只在URL中传递一个参数,并使用lambda函数从这个参数中去掉多个文件名。

https://0xxxxxxxx.execute-api.eu-west-1.amazonaws.com/alpha/files?file=/file1.mp3file=file2.mp3file=file3.mp3

最新更新