Node.js 当用户从dialogflow中的另一个意图键入列表项时,如何触发列表
我有一个显示3个项目的列表,但当我从列表中选择一个项目(intent1)时,它会工作并触发intent2,但在几个意图之后,如果我再次键入项目名称,intent2不会触发并给出回退意图的响应 这是我的密码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
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中显示这些意图的屏幕截图,我们可能更好地为您指出正确的方向。@我已经更新了屏幕截图