actions-on-google – 动作SDK:在播放媒体时处理不支持的话语

一旦用户在播放该媒体期间尝试与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提供null /空字符串响应:这是一次绝望的尝试,看看如果你没有为conv.ask提供任何内容会发生什么.希望它会看到空洞的反应并继续播放媒体.

最佳答案 没有什么是Google本身的动作的一部分,它将为您做到这一点.

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

>当您使用媒体结果回复用户时,您可以将其作为会话状态的一部分(或在上下文中).
>如果您在Media Status事件之前收到另一个请求,您可以确定两者之间的差异,这大致是音频播放的时间长度.
>然后,您可以返回音频的URL,其中包括从音频中的此点开始.但是,音频偏移不是助手所做的,您必须在包含音频的服务器上支持此功能.

至于你尝试过的两件事 – app.fallback()应该能够处理你设置为没有定义任何其他处理程序的webhook的任何意图,但仍然不能只是“恢复“音频. conv.ask()要求你提出一些问题 – 不允许空回复.

在这种情况下,您至少想要告诉用户他们所说的内容没有意义……在恢复音频之前.

点赞