Actions SDK:在播放媒体时处理不受支持的话语

Actions SDK: Handling unsupported utterance whilst playing media

问题

如果用户在播放媒体期间尝试与 Google 家庭设备交互,是否可以恢复媒体对象的内容?

问题

假设您已经开始使用 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 提供 null/empty 字符串响应:这是一次孤注一掷的尝试,想看看如果您不向 conv.ask 提供任何内容会发生什么。希望它会看到空响应并继续播放媒体。

Actions on Google 本身没有任何内容可以为您执行此操作。

您可能需要付出很多努力才能做到最好:

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

  • 如果你在Media Status事件之前收到另一个请求,你可以判断两者之间的区别,这大概就是音频播放了多长时间。

  • 然后您可以 return 一个 URL 音频,包括从音频中的这一点开始。 但是,音频偏移不是助手所做的事情,您还必须在包含音频的服务器上支持它。

至于您尝试的两件事 - app.fallback() 应该可以处理您设置的任何未定义任何其他处理程序的 webhook 意图,但仍然不能只能够 "resume" 音频。 conv.ask() 要求您提出问题 - 不允许空回复。

在这种情况下,您至少要在恢复音频之前告诉用户他们说的话毫无意义……。