Google Actions sdk没有在firebase存储中播放ssml中的音频

Pra*_*gie 5 ssml actions-on-google

Google Actions SDK无法播放来自firebase存储的SSML Audio标记中的音频文件.虽然我可以从维基百科播放相同的.ogg格式文件. https://upload.wikimedia.org/wikipedia/en/9/9f/Sample_of_%22Another_Day_in_Paradise%22.ogg

firebase文件:https: //firebasestorage.googleapis.com/v0/b/assisto-skill.appspot.com/o/TIP103_converted.mp3 ? alt = media &token = ddd08f9d-e340-478c -af00-657109683136

我通过发送一个看起来像这样的SSML字符串来使用它:

<speak>
  <audio src='https://firebasestorage.googleapis.com/v0/b/assisto-skill.appspot.com/o/TIP103_converted.mp3?alt=media&token=d0d08f9d-e340-478c-af00-657109683136'>
  </audio>
</speak>
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

expected_inputs [0] .input_prompt.rich_initial_prompt.items [0] .simple_response:'ssml'无法解析.

可能是什么原因......这是一个限制在动作sdk url需要参数免费?

Pri*_*ner 7

问题不在于它不能使用参数 - 当解析嵌入在SSML中的URL中的参数时,它不像大多数HTML解析器解析它们那样解析和分离参数.

有一些可能的解决方案,具体取决于您如何格式化URL.

RFC 1866曾经建议使用; 代替&,有些服务器允许这样做.不幸的是,Firebase存储不是其中之一.

在大多数情况下,Firebase存储不需要最终令牌参数,因此在这种情况下您可以省略它,但这不是问题的一般解决方案.

最后,您可以使用SGML编码并替换&as &amp;(注意主要的&符号和最后的分号).所以你的SSML看起来像:

<speak>
  <audio src='https://firebasestorage.googleapis.com/v0/b/assisto-skill.appspot.com/o/TIP103_converted.mp3?alt=media&amp;token=d0d08f9d-e340-478c-af00-657109683136'>
  </audio>
</speak>
Run Code Online (Sandbox Code Playgroud)

最后一种方法可能是一般用途的最佳方法.