Actions SDK:播放媒体时处理不支持的语音

时间:2018-10-15 09:46:09

标签: actions-on-google google-home

问题

一旦用户在播放媒体期间尝试与Google Home设备进行交互,是否可以恢复该媒体对象的内容?

问题

假设您已开始使用conv.ask播放mp3文件。您对conv.ask的调用将类似于以下内容:

conv.ask(`<speak><audio src="${someUrl1}"><desc>${someDescription}</desc></audio></speak>`)
    .add(new MediaObject({
        url: someUrl2
    }))
    .add(new Suggestions(['suggestion1', 'suggestion2']));

一切正常。但是然后说一个用户说“ Ok Google,Gobbledygoop”的话,那么您可能想告诉用户他们的请求是无意义的,然后继续播放媒体对象中的媒体。

我已经尝试过的东西

app.fallback():这似乎与动作SDK不兼容。在任何情况下似乎都不可能调用回调(提供给app.fallback的回调)。

提供带有空/空字符串响应的conv.ask:这是一次绝望的尝试,以了解如果您不向conv.ask提供任何内容,将会发生什么情况。希望它能看到空洞的响应并继续播放媒体。

1 个答案:

答案 0 :(得分:1)

Google本身的操作中没有什么可以为您做到这一点。

您可能会做的最好的事情需要您付出很多努力:

  • 当您通过媒体结果回复用户时,您可以将其包括为会话状态的一部分(或在上下文中)。

  • 如果在“媒体状态”事件之前收到另一个请求,则可以确定两者之间的差异,这大概就是音频播放了多长时间。

  • 然后,您可以返回音频的URL,该URL包括从此处开始的音频。 但是,音频偏移不是Assistant要做的,您还必须在包含音频的服务器上支持它。

对于您尝试的两件事-app.fallback()应该可以处理您设置为转到Webhook的任何意图,但没有定义任何其他处理程序,但是那不只是能够“恢复”音频。 conv.ask()要求您提出问题-不允许使用null答复。

在这种情况下,您至少要在恢复音频之前告诉用户他们说的没有任何意义。