【问题标题】:Is it possible to wait until the ask method returns a response是否可以等到 ask 方法返回响应
【发布时间】:2018-10-09 10:44:02
【问题描述】:

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

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

这可能吗?

更新

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    更新根据您的用例。

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

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

    【讨论】:

    • 是否可以播放本地媒体文件?我检查了文档,这可以在我的用例中使用,但现在唯一的问题是我看不到它是否可以播放本地媒体文件。
    • 也许您可以更好地解释您的用例?目前尚不清楚为什么这很重要,但是,我已经回答了你的问题。这真的取决于您所说的“本地”是什么意思。
    • 好的。所以现在我正在使用 SSML 让两种不同的声音在一个意图中说话。它的想法是我们有两个“个性”在说话,每个个性都有不同的声音。目前,在 SSML 中使用一些属性来做到这一点。我们称它们为 P1 和 P2。 P1 以说话开始,一旦结束,就会播放搅拌机的声音。在声音播放之后,第二人格 P2 开始说话,然后 P1 “回复”它,但这一切都发生在一个意图响应中。这就是我想要实现的想法。
    • 我所说的本地是指当前服务器中正在处理 webhook 的文件,而不是上传到外部服务(例如谷歌云存储)的文件,例如带有 URL我可以将它提供给 MediaResponse。
    • 这取决于你如何使用你的上下文。当然,上下文规则仍然适用——媒体事件就像其他意图一样,就好像用户在回复一样。如果您在这方面确实有其他问题或问题 - 打开一个新问题并举例说明您期望的上下文和价值观。
    猜你喜欢
    • 1970-01-01
    • 2016-09-29
    • 1970-01-01
    • 2015-03-27
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-03
    相关资源
    最近更新 更多