使用 actions-on-google
处理意图,然后使用 conv.ask()
向代理发送响应时,是否可以等到请求成功发送,然后继续执行其他操作?有没有办法await
ask
方法的响应?
我的想法是告诉代理说些什么,在ask
方法成功发送给代理后手动计时播放声音(mp3)。现在,代理需要一些时间来接收请求、说出内容然后播放声音。请求被发送,但没有立即收到,因此我正在播放的声音在代理说了什么之前就播放了。
这可能吗?
更新
现在,我正在使用 SSML 使两种不同的声音表达同一个意图。它的想法是,我们有两个“人格”在说话,每个人格都有不同的声音。目前,在 SSML 中使用一些属性来做到这一点。我们称它们为 P1 和 P2。 P1 首先说些什么,一结束就播放 blender 的声音。声音播放后,第二人格 P2 开始说话,然后 P1 对其进行“回复”,但这一切都发生在一个意图响应中。这就是我想要实现的想法。
最佳答案
如果您想在说完某句话后立即播放音频,听起来更像是您想使用 Media回复作为您发回内容的一部分。您的 mp3 文件必须在 HTTPS 地址上可用,尽管该地址可以是您想要的任何地址,只要设备可以解析它即可。由于它将位于运行 Webhook 的同一服务器上,并且 Webhook 必须具有公共(public) HTTPS URL,因此大概音频也将(或可以)运行。
如果您有兴趣了解延迟,您可能可以计算发送响应时间与设备请求 mp3 文件时间之间的差异。
没有直接的方法可以知道助理何时说完文本,但您可以使用媒体响应技巧来根据您的需要获得一些想法。
根据您的使用案例更新。
如果您将这一切作为一个响应来完成,并且它适合该响应,并且您的音频只有几秒钟长,那么您可以使用 SSML 作为单个响应来完成。这部分看起来不错。
如果音频较长或者您希望在个性之间有更多的来回,那么您可以使用媒体响应来播放音频(即使是非常短的空音频)。音频播放结束时,它会向操作发送一个事件,然后您可以继续进行个性响应的下一步。
关于node.js - 是否可以等到ask方法返回响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52719120/