Node.js 当用户从dialogflow中的另一个意图键入列表项时,如何触发列表

Node.js 当用户从dialogflow中的另一个意图键入列表项时,如何触发列表,node.js,actions-on-google,chatbot,dialogflow-es-fulfillment,Node.js,Actions On Google,Chatbot,Dialogflow Es Fulfillment,我有一个显示3个项目的列表,但当我从列表中选择一个项目(intent1)时,它会工作并触发intent2,但在几个意图之后,如果我再次键入项目名称,intent2不会触发并给出回退意图的响应 这是我的密码 const ItemList = { title: "Select to update.", items: { "Games": { title: "Games", description: "Click here to update

我有一个显示3个项目的列表,但当我从列表中选择一个项目(intent1)时,它会工作并触发intent2,但在几个意图之后,如果我再次键入项目名称,intent2不会触发并给出回退意图的响应

这是我的密码

const ItemList = {
    title: "Select to update.",
    items: {
      "Games": {
        title: "Games",
        description: "Click here to update Games details.",
        image: new Image({
          url: 'https://img.icons8.com/plasticine/2x/name.png',
          alt: 'p1',
        }),
      },
      "Books": {
        title: "Books",
        description: "Click here to update Books details.",
        image: new Image({
          url: 'https://img.icons8.com/plasticine/2x/name.png',
          alt: 'p2',
        }),
      },
      "Language": {
        title: "Language",
        description: "Click here to update Language details.",
        image: new Image({
          url: 'https://img.icons8.com/plasticine/2x/name.png',
          alt: 'p3',
        }),
      },
    },
  }


app.intent(SHOW_LIST_INTENT, (conv) => {
  conv.ask("Here's the list.");
  conv.ask(new List(ItemList));
});

app.intent(SELECTED_ITEM_INTENT, (conv, input, option) => {
    conv.contexts.set(AppContexts.AWAITING_ITEM, 1, {item: option});

    if (option === 'Games'){
      conv.ask(`Which is your favorite Game?`); 
    } else if (option === 'Language'){
      conv.ask(`Which ${option} do you know?`);
    } else if (option === 'Books'){
      conv.ask(`Your favorite ${option} name?`);
    }
});

app.intent(HANDLER_INTENT, (conv, parameters) => {
  const context = conv.contexts.get(AppContexts.AWAITING_ITEM);
  const selectedItem = context.parameters.item;


    if (selectedItem === 'Games'){
      conv.ask(`${parameters} is updated as your favorite Game. ` + `Your next preference?`);
      conv.ask(new Suggestions([`Add More Games`, `Show List`]));
    } else if (selectedItem === 'Books'){
      conv.ask(`${parameters} is updated as your favorite Book. ` + `Your next preference?`);
      conv.ask(new Suggestions([`Add More Books`, `Show List`]));
    } else if (selectedItem === 'Language'){
      conv.ask(`${parameters} is updated as your Language. ` + `Your next preference?`);
      conv.ask(new Suggestions([`Add More Language`, `Show List`]));
    }
});

exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);
当用户说添加更多游戏时,我想触发所选的\u项目\u意图

如何获取此信息,代码中是否缺少任何内容


我认为你的谈话设计有点混乱,这可能会让你更难做到你想要的

您的
所选项目\u意图
仅在与列表交互的基础上触发,您正在提示他们说些什么。由于列表不再处于活动状态,并且您没有设置任何意图来处理任何短语,因此没有匹配的内容

与其依赖于可视列表(这对所有助手平台都不起作用),不如将其作为语音对话。在此模型下,您可以描绘如下对话:

Agent: Would you like to update the Games, Books, or Language details?
User:  Games
Agent: What is your favorite game?
User:  Rock, paper, scissors
Agent: Rock, paper, scissors has been set as your favorite game. What would you like to update next?
User:  Another game
...
或者谈话可能是这样的

Agent: Would you like to update the Games, Books, or Language details?
User:  Game details
Agent: What is your favorite game?
User:  Rock, paper, scissors
Agent: Rock, paper, scissors has been set as your favorite game. What would you like to update next?
User:  Another game
...
但是如果他们说了这样的话呢

Agent: Would you like to update the Games, Books, or Language details?
User:  Books
Agent: What is your favorite book?
User:  I meant game
Agent: What is your favorite game?
User:  Rock, paper, scissors
Agent: Rock, paper, scissors has been set as your favorite game. What would you like to update next?
User:  I don't know
...
由此,我们可能会认为用户会以以下三种方式之一进行回复:

  • 用诸如“书”、“游戏”、“语言细节”、“我的意思是游戏”、“添加更多语言”、“另一本书”等短语表示他们想要什么类别。
    • 这表明,对于用户可能说的短语,每个类别都可能是一个很好的实体
  • 无论他们在更新什么,都有价值
    • 通过使用上下文来了解我们何时需要特定的内容,可以很好地处理这一问题。就像你做的那样
  • 用诸如“我能做什么?”或“我不明白”之类的短语寻求帮助
  • 每一项都将使用一个意图和短语以及为这些短语调整的输入上下文来完成。在输出中,我们可以在适当的情况下使用建议芯片来提示我们预期的第一个意图的可能类别

    但我们还没有考虑用户可能会说的其他一些话。例如,如果我们有

    Agent: Rock, paper, scissors has been set as your favorite game. What would you like to update next?
    User:  Add another one
    
    用户知道他们只是设置了一个游戏,他们想设置另一个游戏。但他们并没有专门使用“游戏”一词。我们需要跟踪他们在上下文中最后更新的类别,并有另一个意图来处理诸如“添加另一个”或“相同的东西”之类的短语

    但是如果我们的用户开始经常这样做,而我们有一个交互,比如

    Agent: Rock, paper, scissors has been set as your favorite game. What would you like to update next?
    User:  Add a book named Dungeon Masters Guide
    

    在这里,它们结合了我们认为是独立意图的东西。因此,我们可能需要添加一个意图来处理这样的短语,它们同时指定类别和信息。

    我认为您的对话设计有点混乱,这可能会使您更难准确地完成您想要的内容

    您的
    所选项目\u意图
    仅在与列表交互的基础上触发,您正在提示他们说些什么。由于列表不再处于活动状态,并且您没有设置任何意图来处理任何短语,因此没有匹配的内容

    与其依赖于可视列表(这对所有助手平台都不起作用),不如将其作为语音对话。在此模型下,您可以描绘如下对话:

    Agent: Would you like to update the Games, Books, or Language details?
    User:  Games
    Agent: What is your favorite game?
    User:  Rock, paper, scissors
    Agent: Rock, paper, scissors has been set as your favorite game. What would you like to update next?
    User:  Another game
    ...
    
    或者谈话可能是这样的

    Agent: Would you like to update the Games, Books, or Language details?
    User:  Game details
    Agent: What is your favorite game?
    User:  Rock, paper, scissors
    Agent: Rock, paper, scissors has been set as your favorite game. What would you like to update next?
    User:  Another game
    ...
    
    但是如果他们说了这样的话呢

    Agent: Would you like to update the Games, Books, or Language details?
    User:  Books
    Agent: What is your favorite book?
    User:  I meant game
    Agent: What is your favorite game?
    User:  Rock, paper, scissors
    Agent: Rock, paper, scissors has been set as your favorite game. What would you like to update next?
    User:  I don't know
    ...
    
    由此,我们可能会认为用户会以以下三种方式之一进行回复:

  • 用诸如“书”、“游戏”、“语言细节”、“我的意思是游戏”、“添加更多语言”、“另一本书”等短语表示他们想要什么类别。
    • 这表明,对于用户可能说的短语,每个类别都可能是一个很好的实体
  • 无论他们在更新什么,都有价值
    • 通过使用上下文来了解我们何时需要特定的内容,可以很好地处理这一问题。就像你做的那样
  • 用诸如“我能做什么?”或“我不明白”之类的短语寻求帮助
  • 每一项都将使用一个意图和短语以及为这些短语调整的输入上下文来完成。在输出中,我们可以在适当的情况下使用建议芯片来提示我们预期的第一个意图的可能类别

    但我们还没有考虑用户可能会说的其他一些话。例如,如果我们有

    Agent: Rock, paper, scissors has been set as your favorite game. What would you like to update next?
    User:  Add another one
    
    用户知道他们只是设置了一个游戏,他们想设置另一个游戏。但他们并没有专门使用“游戏”一词。我们需要跟踪他们在上下文中最后更新的类别,并有另一个意图来处理诸如“添加另一个”或“相同的东西”之类的短语

    但是如果我们的用户开始经常这样做,而我们有一个交互,比如

    Agent: Rock, paper, scissors has been set as your favorite game. What would you like to update next?
    User:  Add a book named Dungeon Masters Guide
    

    在这里,它们结合了我们认为是独立意图的东西。因此,我们可能需要添加一个意图来处理这样的短语,其中它们同时指定类别和信息。

    这有点难说,因为您没有包括映射到处理程序意图、选定项目意图和显示列表意图的意图如何处理用户输入。如果您可以更新您的问题以在Dialogflow UI中显示这些意图的屏幕截图,我们可能会更好地为您指出正确的方向。@我已经更新了屏幕截图。这有点难说,因为您没有包括意图如何映射到处理程序\u意图、选定的\u项目\u意图,和SHOW_LIST_意图处理用户输入。如果您可以更新您的问题以在Dialogflow UI中显示这些意图的屏幕截图,我们可能更好地为您指出正确的方向。@我已经更新了屏幕截图