如何使用 DialogFlow 创建多部分响应?
How can I create a multi-part response with DialogFlow?
到目前为止,我有一个会话应用程序,它与我的后端 PHP 服务器的 webhook 一起工作,该服务器将 JSON 响应发送回 Dialogflow API。到目前为止,它运行良好。
开发的下一步是让 Google 助理通过多部分响应来响应用户。我已经看到 "Lucky Trivia" 游戏做了类似的事情(附上截图)。
我不清楚如何让助手应用程序生成多个气泡。
我尝试过的一些解决方案:
- 对多个部分使用 rich responses
- 正在生成 SSML responses 并使用多个
<speak>
或 <p>
标签
- 使用message objects
- 使用 followupEvent object
None 这些让我达到了我喜欢的程度。
丰富的回复最多只适用于两个独立的气泡。
SSML 似乎很有前途,是添加韵律和声音片段的好方法,但我尝试过的所有方法都不会提供多部分语音气泡。
我找不到适用于 "platform":"google"
的消息对象语法。实际上,该页面上没有列出对 platform=google
的特定支持,但我在某些 request/response JSON 对象中看到了它。
followupEvent 响应似乎最有希望,但据我所知,从命名事件触发的意图完全取代了当前响应,而不仅仅是添加到它上面。
所以,我的问题是:使用 DialogFlow 在 Google Assistant 上获取类似的多部分消息的最佳策略是什么?
最理想的情况是,我想按顺序向我的 webhook 发出新请求,但如有必要,构建一个包含所有部分的大型响应是一个可行的选择。
Lucky Trivia 是怎么做到的?
我怀疑 Lucky Trivial 能够绕过规则,因为它是由 Google 制作的,并且没有使用与我们相同的库。但是让我们看看您的每一次尝试,然后看看其他一些可能的方法。
什么不起作用
如您所见,RichResponses are limited to only two SimpleResponses 转换为两个文本气泡。您可以做出更大的回复,但仍然建议限制为每个气泡 300 个字符,硬性限制为 640 个字符。
顾名思义,SSML 响应是关于您所听到的,而不是您所看到的。
消息对象无论如何都变成了本机平台对象,所以除非在 Google 中有某种支持它的方法(现在没有),否则你不能这样做。
Follow-up 事件专门记录为忽略从原始事件返回的文本。他们的重点是将处理委托给另一个意图。
可能有用的方法:卡片
这看起来与您想要的不完全一样,但是获取与两个气泡分开的附加文本的一种方法是通过 Basic card 作为富响应项之一。您甚至可以在卡片中进行一些基本格式化并包含图形。
更复杂:媒体回应
包含具有丰富响应项的 Media response 对象是您可以向用户发送多个响应而无需等待他们说些什么的一种方式。通过这种方式,您可以连续获得多个文本气泡,而无需用户回复。
诀窍是您将在丰富的响应中发送两个简单的响应,然后包含一个带有非常短且可能无声的音频文件的媒体响应。
音频文件播放完毕后,您会收到一个指示媒体播放完毕的 Intent。然后,您可以发送包含一两个简单回复的另一个回复。如有必要,您可以重复此操作。
有一些缺点 - 媒体播放器在播放时会显示,这会打断气泡,但完成后应该会清除。一些气泡之间也会有停顿。但播放音频也可能会增强您的回复。
到目前为止,我有一个会话应用程序,它与我的后端 PHP 服务器的 webhook 一起工作,该服务器将 JSON 响应发送回 Dialogflow API。到目前为止,它运行良好。
开发的下一步是让 Google 助理通过多部分响应来响应用户。我已经看到 "Lucky Trivia" 游戏做了类似的事情(附上截图)。
我不清楚如何让助手应用程序生成多个气泡。
我尝试过的一些解决方案:
- 对多个部分使用 rich responses
- 正在生成 SSML responses 并使用多个
<speak>
或<p>
标签 - 使用message objects
- 使用 followupEvent object
None 这些让我达到了我喜欢的程度。
丰富的回复最多只适用于两个独立的气泡。
SSML 似乎很有前途,是添加韵律和声音片段的好方法,但我尝试过的所有方法都不会提供多部分语音气泡。
我找不到适用于 "platform":"google"
的消息对象语法。实际上,该页面上没有列出对 platform=google
的特定支持,但我在某些 request/response JSON 对象中看到了它。
followupEvent 响应似乎最有希望,但据我所知,从命名事件触发的意图完全取代了当前响应,而不仅仅是添加到它上面。
所以,我的问题是:使用 DialogFlow 在 Google Assistant 上获取类似的多部分消息的最佳策略是什么?
最理想的情况是,我想按顺序向我的 webhook 发出新请求,但如有必要,构建一个包含所有部分的大型响应是一个可行的选择。
Lucky Trivia 是怎么做到的?
我怀疑 Lucky Trivial 能够绕过规则,因为它是由 Google 制作的,并且没有使用与我们相同的库。但是让我们看看您的每一次尝试,然后看看其他一些可能的方法。
什么不起作用
如您所见,RichResponses are limited to only two SimpleResponses 转换为两个文本气泡。您可以做出更大的回复,但仍然建议限制为每个气泡 300 个字符,硬性限制为 640 个字符。
顾名思义,SSML 响应是关于您所听到的,而不是您所看到的。
消息对象无论如何都变成了本机平台对象,所以除非在 Google 中有某种支持它的方法(现在没有),否则你不能这样做。
Follow-up 事件专门记录为忽略从原始事件返回的文本。他们的重点是将处理委托给另一个意图。
可能有用的方法:卡片
这看起来与您想要的不完全一样,但是获取与两个气泡分开的附加文本的一种方法是通过 Basic card 作为富响应项之一。您甚至可以在卡片中进行一些基本格式化并包含图形。
更复杂:媒体回应
包含具有丰富响应项的 Media response 对象是您可以向用户发送多个响应而无需等待他们说些什么的一种方式。通过这种方式,您可以连续获得多个文本气泡,而无需用户回复。
诀窍是您将在丰富的响应中发送两个简单的响应,然后包含一个带有非常短且可能无声的音频文件的媒体响应。
音频文件播放完毕后,您会收到一个指示媒体播放完毕的 Intent。然后,您可以发送包含一两个简单回复的另一个回复。如有必要,您可以重复此操作。
有一些缺点 - 媒体播放器在播放时会显示,这会打断气泡,但完成后应该会清除。一些气泡之间也会有停顿。但播放音频也可能会增强您的回复。