我对 Actions on Google 编程还有些陌生,但这是我的理解。
Dialogflow 允许您定义意图。然后,您可以定义代码来实现这些意图。该控制台为 Google Cloud Functions 提供了一个内联 JavaScript 编辑器。您可以转到 Google 云函数控制台并查看那里的代码。或者,如果您想部署更复杂的代码(例如,将 JavaScript 拆分为多个文件 - 内置编辑器仅适用于单个 index.js 文件),您可以将其翻转为“Web 实现”。
因此,dialogflow 接受人工输入(他们说的一个短语),针对不同的意图查看训练短语集,然后选择它认为正确的短语。然后它调用该意图的实现代码(代码存储在 firebase 中)。因此,当您问“是否可以在 firebase 函数中调用此意图”时,感觉有点倒退。 Intent 是用户说话和调用 firebase 函数(通过 HTTP)之间的粘合剂。 Intent 本身并不是可以调用的代码。
如果您希望用户选择选项,您可以使用选项名称(如“一”、“二”、“三”等)创建一个实体,或者为每个选项名称创建意图。当用户说“一”时会触发“一”意图。由您的应用程序代码来了解用户在菜单浏览结构中的位置以了解“一”的含义。 (您还可以在带屏幕的设备上使用建议,向他们展示他们必须点击的选项。)理想情况下,您应该允许用户说出短语或数字,以提供更大的灵活性。
所以您的第三个问题(如何配置在用户键入数字时调用的意图),您的应用程序可能会执行一些操作,例如从默认的“欢迎”意图(起点)开始。你会口头上说菜单选项“说一个用于家居用品,两个用于服装,三个用于鞋子,......”。然后,您会记住用户在菜单中的位置。然后,您将“一个”连接为一个意图,并在云功能中检查用户正在使用哪个菜单,因此会知道“在欢迎意图之后,“一个”表示家居用品”。然后,该应用程序可能会询问第二个问题,例如“说一个家具,两个花瓶,三个迪斯科舞会……”。如果他们再次说“一个”,它会达到相同的意图,但您的应用会保存一个变量来跟踪用户在菜单树中的位置。
实体允许您定义术语词汇表。例如。 “我想买一个 ${color} ${thing}”。您可以定义一个颜色实体,其值为“red”、“green”、“blue”等。您可以定义“dress”、“hat”、“shoes”等第二个实体。意图训练短语可能是“I想买一件红色的衣服”。 Dialogflow 可以在该训练句子中被告知“红色”是“颜色”实体,而“衣服”是“事物”实体。然后将这些值作为参数传递给支持实现的 Web 服务 - 也就是说,您的“购买”意图将获得“颜色”和“事物”参数。
事件是系统生成的触发器,而不是用户输入触发器。例如,启动您的应用程序的“欢迎”意图是系统生成事件。当应用程序从一个设备移动到另一个设备时,使用另一个事件。如果您请求开始使用推送通知的权限,还有其他系统事件。这是一种让您的代码在发生某些事情时运行的方法(不仅仅是当用户说某事时)。
希望对你有帮助!