Azure 向Microsoft botframework对话框堆栈添加多个对话框

Azure 向Microsoft botframework对话框堆栈添加多个对话框,azure,botframework,direct-line-botframework,Azure,Botframework,Direct Line Botframework,根据,通过将triggerAction与onSelectAction一起使用,如果用户的话语包含匹配的短语,则可以将对话框添加到堆栈顶部 但是,如果用户的话语包含两个匹配的短语,如何向堆栈中添加多个对话框 例如,如果用户说 我想要一个汉堡和薯条 我想把汉堡对话框和薯条对话框添加到堆栈中,这样我们就可以对这两个对话框提出问题 我试过这样的方法: bot.dialog('burgers', require('./burgers')) .triggerAction({ matc

根据,通过将
triggerAction
onSelectAction
一起使用,如果用户的话语包含匹配的短语,则可以将对话框添加到堆栈顶部

但是,如果用户的话语包含两个匹配的短语,如何向堆栈中添加多个对话框

例如,如果用户说

我想要一个汉堡和薯条

我想把
汉堡
对话框和
薯条
对话框添加到堆栈中,这样我们就可以对这两个对话框提出问题

我试过这样的方法:

bot.dialog('burgers', require('./burgers'))
    .triggerAction({
        matches: [/burger/i],
            onSelectAction: (session, args, next) => {
                session.beginDialog(args.action, args);
            }
    });

bot.dialog('fries', require('./fries'))
    .triggerAction({
        matches: [/fries/i],
            onSelectAction: (session, args, next) => {
                session.beginDialog(args.action, args);
            }
    });
以下是“汉堡”对话框的示例(薯条对话框相同):

但是,只有一个对话框被调用。。。然后比赛就结束了


感谢您的帮助

正如您所发现的,一次只会触发一个对话框,因此作为触发多个对话框的解决方法,我们可以先触发一个对话框,然后分析用户输入以调用不同的子对话框

例如:

bot.dialog('addOrder',(会话,参数)=>{
var text=session.message.text;
var found=text.match(/burger/i);
如果(找到!=null){
session.beginDialog(“汉堡”);
}
var found=text.match(/fries/i);
如果(找到!=null){
session.beginDialog(“薯条”);
}    
}).触发作用({
火柴:[/burger/i,/fries/i]
});
bot.dialog('burger',(会话)=>{
发送(“汉堡”);
//“汉堡”对话的逻辑
session.endDialog();
});
bot.dialog('fries',(会话)=>{
发送(“薯条!”);
//“薯条”对话的逻辑
session.endDialog();
}); 
正如您在这里看到的,我们可以使用正则表达式数组首先触发
addOrder
对话框,然后调用该
addOrder
对话框中的其他对话框

或者您可以训练一个LUIS并在您的机器人中使用它,如下所示:

bot.dialog('burgers', require('./burgers'))
    .triggerAction({
        matches: [/burger/i],
            onSelectAction: (session, args, next) => {
                session.beginDialog(args.action, args);
            }
    });

bot.dialog('fries', require('./fries'))
    .triggerAction({
        matches: [/fries/i],
            onSelectAction: (session, args, next) => {
                session.beginDialog(args.action, args);
            }
    });
const LuisModelUrl='YOUR-BOT-ENDPOINT';
var识别器=新的构建器。LuisRecognizer(LuisModelUrl);
var intents=new builder.IntentDialog({recognizers:[recognizer]})
.matches('MyOrder',(会话,参数)=>{
var entities=args.entities;
//处理实体
});
bot.dialog(“/”,意图);
我创建了一个名为
MyOrder
的意图和两个名为
MyOrder.Burgers
MyOrder.Fries
的实体,如下所示:

bot.dialog('burgers', require('./burgers'))
    .triggerAction({
        matches: [/burger/i],
            onSelectAction: (session, args, next) => {
                session.beginDialog(args.action, args);
            }
    });

bot.dialog('fries', require('./fries'))
    .triggerAction({
        matches: [/fries/i],
            onSelectAction: (session, args, next) => {
                session.beginDialog(args.action, args);
            }
    });

你查过我的答案了吗?有更新吗?