注意:我在Node.js中使用Microsoft Bot Builder的SDK。
我正在尝试使用beginDialogAction启动另一个子对话框,以便在子对话框对话框结束时,堆栈将返回到它们停止的对话框。但是,与此同时,我希望为用户提供选项,以便在任何其他对话中将此相同的子对话框激活为triggerAction。
如下所示通过triggerAction和beginDialogAction将子对话框的两个COPIES放入堆栈中。这是不需要的行为,因为一旦其中一个对话框完成,该对话框的副本就会再次运行。
以下是代码:
// user dialog
bot.dialog('/', [
function (session, args, next) {
session.send('Starting root dialog');
},
function (session) {
session.send('Ending root dialog.');
]).beginDialogAction('addUser', 'UserAdd', {
matches: /^user add$/i
});
// branch dialog
bot.dialog('UserAdd', [
function (session, args, next) {
session.send('Adding user.');
}
]).triggerAction({
matches: /^user add$/i
})
启用对话框的beginDialogAction和triggerAction的正确方法是什么,但是如果它由beginDialogAction触发,则只运行该对话框ONCE,以便root对话框可以从中断处继续?如果这不是传统的思维方式来使用这个框架,我欢迎其他观点。
答案 0 :(得分:1)
这是不需要的行为,因为一旦其中一个对话框完成,该对话框的副本就会再次运行。
我无法重现此问题。您的代码中的问题是,在UserAdd
对话框被beginDialogAction
或triggerAction
调用后,您没有结束UserAdd
对话框,这使得对话框堆栈始终保持在此对话框中beginDialogAction
对话框,永不结束。
根据您的说明,我认为triggerAction
和bot.dialog('/', [
function (session, args, next) {
session.send('Starting root dialog');
builder.Prompts.text(session, "How many people are in your party?");
},
function (session, results) {
builder.Prompts.text(session, "Who will be there?");
},
function (session, results) {
session.send('Ending root dialog.');
session.endDialog();
}
])
.beginDialogAction('addUser', 'UserAdd', {
matches: /^user add$/i
})
// // branch dialog
bot.dialog('UserAdd', [
function (session, args, next) {
session.send('Adding user.');
session.endDialog();
}
]).triggerAction({
matches: /^user add$/i
});
之间不会有任何冲突,尝试修改您的代码如下,并且它在我身边正常工作:
{{1}}
如果有任何进一步的问题或更多问题,请随时发表评论。