问题
一旦用户在播放媒体期间尝试与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提供任何内容,将会发生什么情况。希望它能看到空洞的响应并继续播放媒体。
答案 0 :(得分:1)
Google本身的操作中没有什么可以为您做到这一点。
您可能会做的最好的事情需要您付出很多努力:
当您通过媒体结果回复用户时,您可以将其包括为会话状态的一部分(或在上下文中)。
如果在“媒体状态”事件之前收到另一个请求,则可以确定两者之间的差异,这大概就是音频播放了多长时间。
然后,您可以返回音频的URL,该URL包括从此处开始的音频。 但是,音频偏移不是Assistant要做的,您还必须在包含音频的服务器上支持它。
对于您尝试的两件事-app.fallback()
应该可以处理您设置为转到Webhook的任何意图,但没有定义任何其他处理程序,但是那不只是能够“恢复”音频。 conv.ask()
要求您提出问题-不允许使用null答复。
在这种情况下,您至少要在恢复音频之前告诉用户他们说的没有任何意义。