0

我正在尝试使用 npm 包中的 ApiAi 类来管理我的 Google Assistant 代理(在 DialogFlow 中)的上下文actions-on-google

问题是:如何使用 npm 包重置寿命/删除上下文?

我可以轻松设置新上下文的生命周期,并且它有效。

然而:

  1. 如何删除上下文?
  2. 将上下文设置为不同的数字似乎不起作用。也就是说,如果我设置app.setContext('myContext',10)然后,2个意图之后,当生命周期在时8,我app.setContext('myContext',10)再次调用,在下一个意图中,生命周期仍然是7。如果我可以回答 (1) 并删除一个上下文,我会删除它并重新设置它。
4

4 回答 4

1

要删除上下文的生命周期,您只需将其设置为零或 0,如确保在调用或app.setContext('your_context',0)
之前执行此操作app.askapp.tell

或者

如果不使用客户端,您可以编写一个简单设置的函数 this.contexts_[your_context] = {}

第一个选择肯定对我有用。我没有尝试过第二种选择。试试看你是否没有在 Dialogflow 中设置它。此外,您可以删除 webhook 中的上下文设置,并在 Dialogflow 中将 lifespan 设置为 0。这将在您的上下文中放置一条线(如不推荐使用的方法)。

于 2018-02-28T04:45:16.173 回答
1

我认为没有办法删除或覆盖上下文的持续时间。相反,如果您知道某个上下文不能在某个时间点处于活动状态,请设置一个持续 1 或 2 个回合的上下文,并在每个回合后执行此操作。这也将使您对对话有更多的控制权,因此您不会有持续 10 轮的上下文,而您突然不再需要这些上下文。

于 2017-10-31T13:26:05.750 回答
0

我知道这个问题已经很老了,至少已经够老了,以至于我们现在有了 v2 API 和库大修,所以无论如何我都会用今天的解决方案来回答:)。

1 - 要删除上下文,您可以使用Node.js 库参考文档conv.contexts.delete('context1');中指定的内容。

2-如果conv.contexts.set('context1', 1);改变上下文的生命周期,那么您可以轻松地删除它并使用这两个调用重新创建它。

于 2018-12-03T01:48:21.383 回答
0

我的经验是你不能覆盖上下文数据。您可以创建一个新的上下文:

agent.setContext({
    name: contextName,
    lifespan: newLifeSpan,
    // Note: Parameters are not visible until the context is passed
    // console.log() won't show them now.
    parameters: {
      // Previously saved using getContext()
      param_name : paramValue,
    }
  });
于 2020-03-06T03:56:09.443 回答