Dialogflow es 返回Dialogflow上调查问卷机器人的上一个活动上下文

Dialogflow es 返回Dialogflow上调查问卷机器人的上一个活动上下文,dialogflow-es,actions-on-google,Dialogflow Es,Actions On Google,我在DialogFlow上构建了一个调查问卷机器人,并使用上下文强制执行一个序列。我的输出是设置当前上下文的下一个意图和输入 问题是,由于它有几个“是”和“否”问题,我不得不将其中许多问题的寿命设置为1。这样机器人就不会感到困惑了。这样做的副作用是,无论出于何种原因,当它进入回退意图时,无论它进行了多少次尝试,它都无法理解用户所说的内容,因为不再存在活动上下文 我已经在使用fulfillment在特定答案中设置一些条件流,并在Firebase中记录和读取数据 是否有方法检索最后一个活动上下文,以

我在DialogFlow上构建了一个调查问卷机器人,并使用上下文强制执行一个序列。我的输出是设置当前上下文的下一个意图和输入

问题是,由于它有几个“是”和“否”问题,我不得不将其中许多问题的寿命设置为1。这样机器人就不会感到困惑了。这样做的副作用是,无论出于何种原因,当它进入回退意图时,无论它进行了多少次尝试,它都无法理解用户所说的内容,因为不再存在活动上下文

我已经在使用fulfillment在特定答案中设置一些条件流,并在Firebase中记录和读取数据

是否有方法检索最后一个活动上下文,以便我可以强制最后一个上下文,直到有有效的输入

这个机器人将在谷歌助手界面上运行

tks

没有“最后一个活动上下文”这样的东西,因为多个上下文可能同时处于活动状态

听起来,与其让上下文的寿命为1,不如让上下文的寿命更长(以防它们触发了无法回答问题的意图),这样它们就可以返回到您想要询问它们的路径


要解决接受“是”或“否”但仅在特定上下文中有效的多个意图的问题,您可以将上下文的寿命设置为0,作为传出上下文的一部分,或在处理该上下文的是/否意图的实现中,使其处于非活动状态。

如前所述,没有“最后一个活动上下文”功能在google上的action中,但是如果您使用1个生命周期上下文,那么您可以使用一个技巧来查看哪些上下文来自之前的意图

如果使用的上下文寿命为1,则可以查看上下文集合并查找寿命为未定义的任何上下文。这些是您先前意图设置的输出上下文。在下面的示例中,我循环浏览我的上下文,通过查找公共标识符“389;”获取它们的名称,并使用该名称使用它们以前的参数将过期的上下文重置回1

    const contextIdentifier = "_"
    const contextLifeSpan = 1;

    Object.values(conv.contexts.input).filter(c => !c.lifespan).forEach((context) => {
      const start = context.name.lastIndexOf(contextIdentifier);
      const end = context.name.length;
      const contextName = context.name.slice(start, end);

      conv.contexts.set(contextName, contextLifeSpan, context.parameters);
    });

    return conv;

请添加一些相关代码。