如何防止用户在对话过程中跳到另一个意图?

时间:2019-01-29 10:55:02

标签: dialogflow actions-on-google

假设我有2个基本意图,即Set AppointmentCancel Appointment

每个意图都有自己的后续问题,依此类推。当用户处于意图Set Appointment的跟踪链中时,如果他/她说出"cancel appointment for abc" 防止该用户跳到另一个意图>

由于两个意图都有空的输入上下文,因此可以从Google Assistant的调用(即Tell XYZ App to set appointment for....)中调用它们,因此这似乎使用户能够在意图中间对话之间进行切换。

如何限制这种行为?还是这里有一些最佳设计实践?

1 个答案:

答案 0 :(得分:0)

首先,请记住,意图表示的是用户所说的内容,不是您对用户所说的内容所做的事情。

第二,请记住,用户可以随时更改对话的过程。因此,有意义的是,如果他们开始添加约会,则可能要取消该约会。

最好的方法是,如果他们在约会中试图取消,则由您决定如何处理对话中的更改。然后以这种方式答复。您可以选择更改曲目。或者,您可以选择说些类似“先添加此新约会,然后我们可以取消旧约会”之类的话。使用此方案:

  • 您有一个与“将约会设置为上午10点”相匹配的意图
  • 在您的处理程序中:
    • 如果您不执行任何操作,则会开始提示他们提供其他约会设置信息或其他信息。
    • 如果您已经设置了约会,请提示他们是否要将时间更改为上午10点
    • 如果您要取消约会,请告诉他们在完成新约会后,您将谈论取消旧约会。

在大多数(并非全部)情况下,我倾向于采用这种方法。它使我能够对逻辑进行编码,并让我根据整个状态确定最佳答复方式。

您可以使用的另一种方法是,使用输入上下文创建一个Intent,该Intent与您当前的上下文查询行匹配,该查询行与您不想匹配的Intent中的短语匹配。 (作为特定于上下文的Fallback Intent的否定训练短语的一部分,这甚至可能是合理的。)上下文匹配在无上下文匹配之前进行处理。因此,在此方案下,您将:

  • 没有输入上下文的Intent,它与“将约会设置为上午10点”相匹配。此Intent的处理程序将设置“设置”上下文并开始提示输入其他信息。
  • 具有“设置”输入上下文的Intent,与“将约会设置为上午10点”相匹配。这可能会像重新启动提示一样,或者只是更改他们请求的时间。
  • 具有“取消”输入上下文的Intent,与“将约会设置为上午10点”相匹配。该处理程序会让他们知道您会在最后询问取消旧约会的情况。

使用哪种方法取决于代码中如何处理其他状态管理。