仅在SSML中播放音频转换回复?

时间:2018-10-01 11:09:23

标签: actions-on-google

我想知道是否可以在SSML中不包含文本,因为我的音频文件显示“您准备好播放了吗?”,所以我不需要Google助手本身的任何讲话。

app.intent('Default Welcome Intent',(conv) =>{

  const reply = `<speak>
  <audio src="intro.mp3"></audio>
   </speak>`;
  conv.ask(reply);

});

由于我没有任何文本输入,因此上面的代码产生错误。

3 个答案:

答案 0 :(得分:2)

您可能遇到的错误是

  

expected_inputs [0] .input_prompt.rich_initial_prompt.items [0] .simple_response:必须设置'display_text'或'ssml'必须具有有效的显示效果。

如前所述,在某些情况下,助手会在带有显示屏的设备(例如您的手机)上运行,并且它所显示的消息应与音频播放的内容基本相同。

对于这些情况,您有几种选择。

首先,您可以在<audio>标签内提供可选文本,该文本将显示但不会被读出(除非由于某种原因而无法加载音频文件)。

<speak>
  <audio src="intro.mp3">Are you ready to play?</audio>
</speak>

或者,您可以提供分别代表您所说内容的SSML版本和纯文本版本的单独字符串。

const ssml = `<speak><audio src="intro.mp3"></audio></speak>`;
const text = "Are you ready to play?";
conv.ask( new SimpleResponse({
  speech: ssml,
  text: text
}) );

答案 1 :(得分:1)

为此添加了一个很短的字符串,然后将其放入带有静音音量的prosody标签中,从而解决了这一问题:

app.intent('Default Welcome Intent',(conv) =>{
  const reply = `<speak>
  <audio src="intro.mp3"></audio>
  <prosody volume ="silent">a</prosody> </speak>`;
  conv.ask(reply);

});

这会播放音频,但不会说'a'文本。

答案 2 :(得分:0)

另一种欺骗方法,请尝试使用空格不要出现无响应错误(...现在没有响应)

conv.ask(new SimpleResponse(" "))
const reply = `<speak>
  <audio src="intro.mp3"></audio>
   </speak>`;
conv.ask(reply);