node.js - 是否可以等到ask方法返回响应

标签 node.js dialogflow-es actions-on-google

使用 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/

相关文章:

javascript - 无法有意发出 http 请求

dialogflow-es - 来自 webhook 的 dialogflow 触发事件

authentication - 有什么方法可以验证我的 Google 助理应用程序的用户身份吗?

javascript - 传递值时的顺序 Promise

javascript - 找不到模块 'crawler'

node.js - 在 DialogFlow V2 中重置上下文

dialogflow-es - 姓名和电子邮件实体的空响应

javascript - Node.js/Javascript 通过设置 __proto__ 向现有对象引入方法

angularjs - Angular 1.6.9 和 socket.io 聊天应用程序

google-cloud-functions - Google TDD 或测试环境上的操作