Javascript Bot框架范围开始生效

Javascript Bot框架范围开始生效,javascript,dialog,botframework,Javascript,Dialog,Botframework,我在使用beginDialogAction方法控制对话流方面遇到了一些问题,希望得到一些建议。我对JavaScript相当陌生 我想做的是确定关键字与主对话框上下文的匹配范围。我的理解是,beginDialogAction方法是实现这一点的最佳方法。我的问题是,一旦使用beginDialogAction触发了我的对话框,新对话框就会添加到堆栈中,beginDialogAction会继续侦听另一个匹配项。这意味着,如果我的用户恰好匹配了流中更远的触发词,它将改变对话的主题 我想要清除的是在启动be

我在使用beginDialogAction方法控制对话流方面遇到了一些问题,希望得到一些建议。我对JavaScript相当陌生

我想做的是确定关键字与主对话框上下文的匹配范围。我的理解是,beginDialogAction方法是实现这一点的最佳方法。我的问题是,一旦使用beginDialogAction触发了我的对话框,新对话框就会添加到堆栈中,beginDialogAction会继续侦听另一个匹配项。这意味着,如果我的用户恰好匹配了流中更远的触发词,它将改变对话的主题

我想要清除的是在启动beginDialogAction中指定的新对话框之前清除对话框堆栈,但我无法确定到目前为止是如何清除的。任何建议都将不胜感激

代码:


您可以利用
onSelectAction
属性满足您的需求。有关说明,请参阅:

/** *(可选)在触发操作时调用的自定义处理程序。这让你 *自定义操作的行为。例如,您可以在开始之前清除对话框堆栈 *此时将启动“新建”对话框,更改默认行为,即仅推送新的对话框 *将对话框添加到堆栈的末尾。 * *需要注意的是,这不是瀑布式的,如果需要,应该调用
next()
*希望运行操作默认行为。 */

请考虑下面的代码片段:

bot.dialog('mainMenu', [
    (session, args, next) => {
        builder.Prompts.text(session, 'Hi there! What can I do for you today?', {
            retryPrompt: 'Hi there! What can I do for you today?'
        });
    },
    (session, results) => {
        session.endConversation('Goodbye!');
    }
])
.beginDialogAction('sportsAction', 'Sports', {
    matches: /^sports$/i,
})
.beginDialogAction('cookingAction', 'Cooking', {
    matches: /^cooking$/i,
    onSelectAction: (session, args, next) => {
        session.clearDialogStack();
        next();
    }
})
bot.dialog('Sports', [
    (session, args, next) => {
        session.send(`current dialog length: ${session.sessionState.callstack.length}`);
        session.endDialog('Sports here');
    }
]);
bot.dialog('Cooking', [
    (session, args, next) => {
        session.send(`current dialog length: ${session.sessionState.callstack.length}`);
        session.endDialog('Cooking here');
    }
])

很好!非常感谢。了解“session.clearDialogStack();”方法是lol的关键所在。@IanO'Reilly,我很高兴它对您有用。你可以把它作为一个答案,这也有利于与你面临类似问题的其他社区。
bot.dialog('mainMenu', [
    (session, args, next) => {
        builder.Prompts.text(session, 'Hi there! What can I do for you today?', {
            retryPrompt: 'Hi there! What can I do for you today?'
        });
    },
    (session, results) => {
        session.endConversation('Goodbye!');
    }
])
.beginDialogAction('sportsAction', 'Sports', {
    matches: /^sports$/i,
})
.beginDialogAction('cookingAction', 'Cooking', {
    matches: /^cooking$/i,
    onSelectAction: (session, args, next) => {
        session.clearDialogStack();
        next();
    }
})
bot.dialog('Sports', [
    (session, args, next) => {
        session.send(`current dialog length: ${session.sessionState.callstack.length}`);
        session.endDialog('Sports here');
    }
]);
bot.dialog('Cooking', [
    (session, args, next) => {
        session.send(`current dialog length: ${session.sessionState.callstack.length}`);
        session.endDialog('Cooking here');
    }
])