Actions on google 与';意图';和';行动';在对话流中?

Actions on google 与';意图';和';行动';在对话流中?,actions-on-google,dialogflow-es,Actions On Google,Dialogflow Es,在Dialogflow代理中,我在概念化“意图”和“动作”之间的关系方面有点困难 我得到的意图将用户的口头请求映射到我的履行服务的特定功能,可以选择携带参数作为输入变量。这就是意图在以下文件中的定义: “意图表示用户所说的和所说的之间的映射 您的软件应采取措施。” 那么行动又是什么呢?内容几乎完全相同: “操作对应于应用程序在以下情况下将采取的步骤: 特定意图已由用户的输入触发。” 动作是在意图的上下文中定义的,这意味着每个意图只能有一个动作,一个动作不能附加到多个意图。一个动作似乎不仅仅是它的

在Dialogflow代理中,我在概念化“意图”和“动作”之间的关系方面有点困难

我得到的意图将用户的口头请求映射到我的履行服务的特定功能,可以选择携带参数作为输入变量。这就是意图在以下文件中的定义:

“意图表示用户所说的和所说的之间的映射 您的软件应采取措施。”

那么行动又是什么呢?内容几乎完全相同:

“操作对应于应用程序在以下情况下将采取的步骤: 特定意图已由用户的输入触发。”

动作是在意图的上下文中定义的,这意味着每个意图只能有一个动作,一个动作不能附加到多个意图。一个动作似乎不仅仅是它的名称,这也是完全可选的,因为无论我是否指定动作名称,意图都是一样的


那么他们的目的是什么?为什么我要让我的服务对行动而不是意图作出反应?

您的问题中有一个轻微的错误陈述,但它说明了Dialogflow意图和行动之间的区别。声明

一个操作不能附加到多个意图

这不是真的。您可以对多个意图名称使用相同的操作名称。在本例中,这意味着您可以将该操作用作实现中某个函数的映射,而无需在代码中列出映射的每个意图

在Dialogflow中,意图不仅仅匹配特定的用户短语,它还用于匹配处于特定状态(由设置的上下文确定)或特定非短语事件的会话。由于您可能希望将其中几个映射到后端的相同操作(例如,如果您有两个不同的传入上下文,需要与不同的用户短语匹配),因此可以为它们设置相同的操作,但使用不同的意图名称来标识它们

有些库,如v2和v2,允许您使用其中任何一个,以最有意义的为准

当我命名意图时,我通常会用我用于动作的相同名称启动所有做大致相同事情的意图,但添加一个后缀,指出意图不同的原因。(使用不同的上下文、事件或参数的名称。)

更新以澄清一些事情

我通常使用动作名称作为触发我的函数的名称,但是在一些情况下,我可能仍然会按动作对事物进行分组(因为这样组织它们是有意义的),但会为其中一个意图留出一个例外。可以将其视为OO模型中的子类化。经验法则是使用动作名称,但如果有充分的理由不这样做,就不要拘泥于此。(这方面的一个例子是使用multivocal,库定义了一个“未知”操作,该操作涵盖了误解的输入和未输入。但是,有时我希望以不同的方式处理其中一个操作,因此我将定义一个处理程序,该处理程序只处理意图。)


Dialogflow在
queryResult.Action
中发送您的履行的JSON中应该有操作名称。我不知道为什么文档现在省略了这一点。

谢谢!我将从中得到的是,实际上我应该把行动看作是对话流代理和我的服务之间的主要接口,而不是意图。用户和我之间的数据流将是user->intent->action->fulfillment,可以选择在具有不同输入状态的多个intent中重用相同的操作。我唯一不明白的是Dialogflow Webhook V2 API似乎实际上已经从实现请求()中删除了“action”参数,或者我在这里遗漏了什么?您没有遗漏任何东西-文档是。我已经在我的回答中添加了一个更新,希望能澄清一些问题,但总体来说你已经走上正轨。谢谢,我已经询问了Dialogflow论坛上的文档:@Capital我正面临一些与本次讨论密切相关的问题。简而言之,是否可以使用动作名称来触发意图?(因此,我有一个旋转木马,当用户点击旋转木马项目时,名称将被识别为一个文本,以触发与该答案相关的意图。(旋转木马项目名称“付款”->点击后,“付款”意图被触发))@Gray_Rhino-旋转木马在谷歌上的行为非常不同。我建议你把这个问题作为一个新的问题详细地贴出来,这样我们就可以讨论不同之处并探索可能的解决方案。