是否可以等到 ask 方法 returns 响应

Is it possible to wait until the ask method returns a response

使用actions-on-google,当处理一个intent然后使用conv.ask()向代理发送响应时,是否可以等到请求发送成功后再继续做其他事情?有没有办法await ask 方法的响应?

我的想法是告诉代理说点什么,在ask方法成功发送给代理后手动播放声音(mp3)。现在,代理需要一些时间来接收请求、说出内容然后播放声音。请求已发送,但不会立即收到,因此我正在播放的声音在代理人说话之前播放。

这可能吗?

更新

现在我正在使用 SSML 使两种不同的声音在一个意图中说话。它的想法是我们有两个 "personalities" 说话,每个人都有不同的声音。目前,在 SSML 中使用一些属性来做到这一点。我们称它们为 P1 和 P2。 P1 首先说些什么,一旦结束就会播放搅拌机的声音。在播放声音后,第二人格 P2 开始说话,然后 P1 然后 "replies" 对它说话,但这一切都发生在一个意图响应中。这就是我要实现的想法。

如果您想在说完某事后立即播放音频,听起来您更像是想使用 Media 响应作为您发回的内容的一部分。您的 mp3 文件必须在 HTTPS 地址上可用,尽管该地址可以是您想要的任何地址,只要设备可以解析它即可。由于它将在 Webhook 运行 打开的同一台服务器上,并且 Webhook 必须具有 public HTTPS URL,因此大概音频也将(或可以)。

如果您有兴趣了解延迟时间,您可以计算发送响应时间和设备请求 mp3 文件时间之间的时间差。

没有直接的方法可以知道 Google 助理何时说完文字,但您可以根据需要使用媒体响应的技巧来了解一些想法。

根据您的用例更新

如果您将所有操作作为一个响应来完成,并且它适合该响应,并且您的音频只有几秒钟长,那么您可以使用 SSML 作为一个响应来完成。那部分看起来还不错。

如果音频较长或者您想要在个性之间来回更多,那么您可以使用媒体响应来播放音频(即使是非常短的空音频)。在音频播放结束时,它会向 Action 发送一个事件,然后您可以继续您的个性响应中的下一步。