如何使用 DialogFlow 创建多部分响应?

Oct*_*pus 4 actions-on-google dialogflow-es

到目前为止,我有一个会话应用程序,它与后端 PHP 服务器的 Webhook 配合使用,该服务器将 JSON 响应发送回 Dialogflow API。到目前为止,它的工作相当顺利。

开发的下一步是让 Google Assistant 通过多部分响应来响应用户。我见过“Lucky Trivia”游戏做了类似的事情(附有屏幕截图)。

我不清楚如何让助手应用程序生成多个气泡。

我尝试过的一些解决方案:

这些都没有让我达到我想要的程度。

丰富的响应最多适用于两个单独的气泡,仅此而已。

SSML 看起来很有前途,是添加韵律和原声摘要的好方法,但我尝试过的所有方法都无法提供多部分语音气泡。

我找不到适用于"platform":"google". platform=google事实上,该页面上没有列出具体的支持,但我在一些请求/响应 JSON 对象中看到了它。

followupEvent 响应似乎最有希望,但据我所知,从指定事件触发的意图完全取代了当前响应,而不仅仅是添加到它上面。

所以,我的问题是:使用 DialogFlow 在 Google Assistant 上获取类似多部分消息的最佳策略是什么?

最理想的是,我想按顺序向我的 webhook 发出新请求,但如果有必要,构建一个包含所有部分的大型响应是一个可行的选择。

Lucky Trivia是如何做到这一点的?

Pri*_*ner 5

我怀疑Lucky Trivial能够绕过规则,因为它是由 Google 制作的,并且不使用与我们相同的库。但让我们看看您的每一次尝试,然后看看其他一些可能的方法。

什么不起作用

正如您所注意到的,RichResponse仅限于两个SimpleResponse,它们转换为两个文本气泡。您可以做出更大的回复,但每个气泡的建议限制仍然为 300 个字符,硬性限制为 640 个字符。

SSML 响应,顾名思义,是关于您所听到的,而不是您所看到的。

无论如何,消息对象都会转换为本机平台对象,因此除非 Google 有某种方法支持它(而且没有),否则您无法做到这一点。

后续事件经过专门记录,以忽略从原始事件返回的文本。他们的全部目的是将处理委托给其他意图。

可能有用的方法:卡片

这看起来与您想要的并不完全相同,但获取与两个气泡分开的附加文本的一种方法是通过基本卡作为丰富的响应项之一。您甚至可以在卡中进行一些基本格式化并包含图形。

更复杂:媒体反应

包含具有丰富响应项的媒体响应对象是一种可以向用户发送多个响应而无需等待他们说话的方法。通过这种方式,您可以连续获得多个文本气泡,而无需用户回复。

诀窍在于,您将在丰富响应中发送两个简单响应,然后包含带有非常短且可能无声的音频文件的媒体响应。

音频文件播放完毕后,您将收到指示媒体已完成播放的意图。然后,您可以发送另一封回复,其中包含一两个以上的简单回复。如果需要,您可以重复此操作。

有一些缺点 - 媒体播放器会在播放时显示,这会中断气泡,但一旦完成,它应该会清除。一些气泡之间也会有停顿。但播放音频也可能会增强您的回复。