如何一目了然地设置上下文和跟进事件?

时间:2018-08-10 06:34:59

标签: node.js dialogflow actions-on-google

我试图通过跟踪事件跳转到一个随机问题,同时将问题编号存储在上下文中。但是dialogflow只跳到事件而没有存储问题号。有没有办法进行跟进事件并以一种意图存储上下文?

     MealID = (DinnerSet.Value.Meals$(CurrentMeal)`.MealID)

1 个答案:

答案 0 :(得分:2)

不是。使用conv.followup()的目的是使它好像新的Intent是用户实际触发的那样。请记住-意图表示用户在说什么 不是您要回复的内容。您可以 在重定向中包含一个参数,我想您可以使用它来发送问题,但这仍然等同于用户发送的参数。

尚不清楚为什么您感到需要直接使用其他Intent。只是在提问中提出问题吗?继续,在您所在的Intent处理程序中询问它,然后将数字直接存储在上下文中。

更新

您已在注释中指出要结构化的东西,因此您有一个“随机调度程序”,然后将其重定向到一个Intent来提问,并且该Intent具有一个可以接受正确答案的后续Intent(并且可能那些回答错误的答案。

这要求您为所有各种问题以及每个问题的条件建立大量额外的Intent。这要求您每次想添加新问题时都重新构建此结构。

Dialogflow可以很好地导航对话的结构-因此您无需使用它来导航特定的问题,答案和响应。请记住-意图是对用户所说的内容进行广义建模,而不是我们的代理如何响应。

这里的结构可能会更好:

  1. 有一个Intent可以处理用户提出的随机问题。为此的Intent实现(即-Webhook中的handler函数)执行以下操作:
    • 选择一个问题
    • 设置上下文以指示要问的问题
    • 将上下文和问题发送给用户
  2. 还有另一个处理用户响应的Intent。所有用户的回应。如果这是一个选择题,则可以设置非常具体的短语,但否则,您可能需要使它成为具有以上指定的上下文作为输入上下文的后备意图。
    • 您的处理程序会比较答案。
    • 如果正确,则清除上下文,这样说,然后询问他们是否要提出其他问题。 (然后将循环到步骤1中指定的Intent。)
    • 如果不正确,请确保上下文仍然有效,并告诉他们错误。可能增加一个计数器,这样就不会让他们无限期地猜测。

这意味着您仅在构建两个Intent来处理问题本身。您应该再添加一些。这里有一些需要考虑的地方:

  • 如果用户什么都不说怎么办? “无输入”方案的处理方式应与错误答案的处理方式不同。
  • 如果您要问的是多项选择题,也许您会使用一个列表并需要处理列表响应。

最后,如果您使用列表,则可能想做点花哨的事情,并使用Dialogflow的API仅为该问题设置会话实体类型。这样,您就可以设置期望值(使用一些别名)来确定正确和不正确的值,然后对上下文使用后备意图(Fallback Intent)来说明用户所说的没有意义。