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

时间:2018-03-21 22:41:00

标签: actions-on-google dialogflow

到目前为止,我有一个会话应用程序,它与webhooks一起使用到我的后端PHP服务器,它将JSON响应发送回Dialogflow API。到目前为止,它的运作相当不错。

开发的下一步是让Google Assitant通过多部分响应回复用户。我已经看过" Lucky Trivia"游戏做类似的事情(附上截图)。

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

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

这些都没有让我想到这一点。

丰富的回复最多可以使用两个单独的气泡,而不会更多。

SSML看起来很有前途,并且是添加韵律和声音的好方法,但我尝试过的所有内容都不会提供多部分的语音泡沫。

我无法找到适用于"platform":"google"的消息对象的语法。实际上,platform=google的特定支持并未在该页面上列出,但我已在一些请求/响应JSON对象中看到它。

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

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

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

Lucky Trivia 如何做到这一点?

1 个答案:

答案 0 :(得分:3)

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

什么不起作用

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

SSML的回应,顾名思义,就是你所听到的 - 而不是你所看到的。

无论如何,消息对象都会变成原生平台对象,所以除非有某种方法可以在谷歌中支持它(并且没有),否则你就无法做到。

具体记录后续事件,以忽略原始事件返回的文本。他们的全部意义是将处理委托给另一个意图。

可行的方法:卡片

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

更复杂:媒体响应

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

诀窍在于,您将在富响应中发送两个简单响应,然后包含一个媒体响应,其中包含一个非常短且可能是静音的音频文件。

音频文件播放完毕后,您将获得表示媒体已播放完毕的意图。然后,您可以使用一个或两个更简单的响应发送另一个回复。如有必要,您可以重复此操作。

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