在没有用户输入或交互的情况下连续使用多个 GoogleResponses

Having several GoogleResponses in a row without user input or interaction

我正在为 google 家开发一个烹饪食谱应用程序,我需要一种方法将多个 GoogleResponses(SimpleResponse 等)串联在一起,而不需要用户在它们之间进行交互。

我搜索了与此相关的其他答案,虽然我发现了一些与我的问题类似的问题,但回复往往是 "the system was designed for dialogues so what would be the point?"。

我完全理解这个观点,但是由于我正在开发的应用程序的性质和行为要求,我发现自己需要这种特殊的可能性。

食谱分为步骤(革命性的,我知道..)步骤和 GoogleResponses 之间大致存在 1 对 1 的对应关系。

举例说明一个典型的食谱是如何展开的,通常是这样的(当然这是一种简化):

main content -> question -> main content -> question -> etc..

"main content" 的每个实例都是配方的一个步骤,每个 "question" 都需要用户输入。

如果一直都是这样的话就不会有问题,我可以将每个 "main content -> question" 部分捆绑到一个 GoogleResponse 中并完成。

然而,有时菜谱更像是:

main content -> main content -> main content -> question

每个 "main content" 都是配方中的一个步骤,在这种情况下将它们捆绑在一起成为同一个响应是没有意义的(有一个系统供用户在步骤之间来回移动).

我最初在 "main content" 部分使用 MediaResponses,因为这些部分不需要用户输入即可进入下一步,但由于各种原因,我不会进入这里,因为这已经相当long,项目经理决定在这个项目中不应该使用MediaResponses。

简短的回答是您已经遇到的 - 试图使对话行为不那么对话的效果不是很好。但是,您可以查看一些内容。

食谱结构化数据

由于您正在处理配方操作,具体而言,使用智能助理附带的标准 recipe 支持可能是值得的。

好的方面 - 人们会熟悉它,您不需要编写太多代码,只需在网页上提供标记即可。

不利的一面 - 如果您对交互的进行方式有其他要求,则它不是那么灵活。 (例如,如果您在某些食谱点提出问题,或者如果您想根据服务人数提供测量调整。)

滥用"No Input"事件

您可以配置 dynamic reprompts 如果用户在几秒钟后没有说任何话,您就会收到一个事件。如果他们想加快回复速度,他们可以专门询问下一个上下文,或者您可以在 Dialogflow 中捕获 actions_intent_NO_INPUT 事件并提升自己。

这里有一些缺点:

  • 并非所有设备都支持无输入。特别是,例如,移动设备不会生成此文件。
  • 这可能只对连续两个无输入事件有效。在第三个事件中,助手可能会自动关闭对话。 (文档对此不明确,确切的行为随着时间的推移而改变。)

媒体回应

您不清楚为什么要使用 Media Response "shouldn't be used",但这是在说话完成时触发事件的唯一方法之一。

但是有几个缺点:

  • Media Response 在退出时存在许多错误
  • 在有屏幕的设备上,有一个媒体播放器。由于媒体本身对于您所做的事情是附带的,因此拥有播放器没有意义
  • 并非所有表面都支持它

互动Canvas

但是,类似的方法是使用 Interactive Canvas。这为您提供了一个 HTML 页面,其中包含您可以控制的 JavaScript,包括能够生成对服务器的响应,就像用户说出它们一样(或者就像它们触摸了建议芯片一样)。您还可以在生成的语音结束时收听事件。

但是,有一些缺点可能会阻止您现在使用它:

  • 最大的是Interactive Canvas目前只能用于游戏。 (但这似乎是一项政策决定,而不是一项技术决定。所以也许将来会取消。)
  • 它不适用于智能扬声器 - 仅适用于一些带屏幕的设备。

结合以上方法

解决交互式 Canvas 的设备限制和媒体响应伴随的糟糕视觉效果的一种方法可能是将两者混合使用。对于支持 I2C 的设备,请使用它。如果没有,请尝试使用媒体响应。 (您甚至可能希望考虑某些平台的无输入重新提示。)

但这仍然无法在所有设备上运行,并且仍然存在互动 Canvas 目前仅适用于游戏的限制。

总结

没有一个明确的方法来处理这个问题...鉴于平台的对话性质,这不是他们可能添加的功能。但是,可能有一些适用于您的方案的解决方法。