是否可以等到ask方法返回响应

时间:2018-10-09 10:44:02

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

在处理意图时使用actions-on-google,然后使用conv.ask()向代理发送响应,是否可以等到成功发送请求之后再继续执行其他操作?有没有办法await来响应ask方法?

我的想法是告诉代理说些什么,在ask方法成功发送到代理之后,手动计时播放声音(mp3)。现在,座席需要一些时间来接收请求,说出事情然后播放声音。请求已发送,但没有立即收到,因此我正在播放的声音会在代理说出一些东西之前播放。

有可能吗?

更新

现在,我正在使用SSML来使两种不同的声音以一种意图表达。它的想法是我们有两个“性格”在说话,每个性格都有不同的声音。当前,在SSML中使用一些属性来做到这一点。我们称它们为P1和P2。 P1首先说点什么,然后结束时播放搅拌器的声音。声音播放完后,第二个个性P2开始讲话,然后P1对其进行“回复”,但是所有这些都发生在一个意图响应中。那就是我要实现的想法。

1 个答案:

答案 0 :(得分:2)

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

如果您希望知道延迟时间,则可以计时发送响应与设备请求mp3文件之间的时间差。

没有直接的方法可以知道助手何时结束说出文字,但是您可以根据需要使用“媒体”响应中的技巧来获得一些想法。

更新根据您的用例。

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

如果音频较长,或者您想在个性之间来回切换,则可以使用媒体响应来播放音频(甚至是很短的空音频)。音频播放结束时,它将事件发送到操作,然后您可以继续进行个性化响应的下一步。