Dialogflow-1个后续意图是否可以有1个以上的父对象

时间:2018-08-13 12:11:22

标签: dialogflow

后续行动意图可以有多于一名父母吗?

例如,我的程序将是

from(A) 

if(A.response == yes){

go_to_intent(B)

go_to_intent(C) //A-->B-->C

}

else

go_to_intent_(C) //A-->C

可以看出,B和A都是C的可能父母。

那么如何将C设置为A和B的后续意图?

1 个答案:

答案 0 :(得分:1)

简而言之-不。您不应该“去”意图-意图代表不同条件下的用户输入。

因此,在您的示例中,用户说过或做过与意图A匹配的事情。作为响应,您的代理问一个问题。

  • 如果他们回答“是”,则它应与意图B匹配。
  • 否则,它将匹配Intent C。

现在...您在意图A,B和C中完成Webhook时所要做的事情完全不同。您可以为B和C调用相同的函数,而只是从每个函数返回不同的消息。

目的不是您的代理做什么—而是您的用户做什么。

更新

根据您在注释中的示例,我想重复一遍-不要将Intents视为代理在说什么,而应将其视为用户在说或做的事情。

基于此,我将以这种方式重新表达您的意图:

  • 当用户开始操作时,这将触发IntentA。在Intent A的处理程序中:
    • 将上下文设置为“询问城市”
    • 发送消息“您要提供城市吗?”
  • 当上下文“询问城市”处于活动状态并且用户说“是”时,触发意图B。在意图B的处理程序中:
    • 清除上下文“询问城市”
    • 设置上下文“提示城市”
    • 发送消息“哪个城市?”
  • 当上下文“ ask-city”处于活动状态时,用户也可能只回复城市,因此触发Intent B1。在Intent B1的处理程序中:
    • 清除上下文“询问城市”
    • 保存城市信息
    • 将上下文设置为“提示性别”
    • 发送消息“您的性别是?”
  • 当上下文“询问城市”处于活动状态时,用户可能会回答“否”,因此触发意图C。在意图C的处理程序中:
    • 清除上下文“询问城市”
    • 保存没有城市信息
    • 将上下文设置为“提示性别”
    • 发送消息“您的性别是?”
  • 当上下文“提示城市”处于活动状态并且用户说出城市名称时,触发意图C1。在Intent C1的处理程序中:
    • 清除上下文“提示城市”
    • 保存城市信息
    • 将上下文设置为“提示性别”
    • 发送消息“您的性别是?”

您注意到Intent B1,C和C1都具有非常相似但不完全相同的实现。因此,在您的webhook中,他们基本上都可以调用相同(或相似)的代码。但是您会注意到它们是在稍微不同的条件下触发的,因此每个人都需要不同的Dialogflow意图。

我添加了Intent B1,因为这很可能是用户对您的回应。在对话式用户界面中,我们没有为他们提供电话菜单-他们可以像回答另一个问相同问题的人一样做出回应。

还请记住,您可能要构建的其他Intent在每种状态下的处理方式也有所不同。例如,当“询问城市”上下文有效时,如果用户说“是”,“否”或城市之外的其他字眼,则您可能想澄清您的要求。

还要注意,从技术上讲,这些都不是跟进意图。跟进意图只是围绕上下文的一些可视化涂层。您永远不需要使用“跟进意图”-它们只是使一些非常具体的事情井井有条。就您而言-它们也会引起问题。如果您在后续活动中接受的全部是“是”和“否”,那么用户说其他话是不允许的,那么您最终将陷入更加僵硬的对话。关于每种情况的重要部分不是是否进行后续操作-它们是设置输出上下文的能力,并且只有在将这些上下文指定为输入上下文时才触发Intent。