我正在使用ES6 babel在node.js
中使用Microsoft Botbuilder SDK。
我有一个对话框'/ MainMenu',提示用户进行自由回复回复,以便深入到另一个更相关的对话框中。但是,我也希望用户能够触发与主题完全无关的动作(即询问机器人的对话框,“你好吗?”),返回原来的MainMenu对话框就像他们离开了。我知道在SDK的文档中,onSelectAction可用于将触发的对话框放在堆栈顶部而不是替换整个堆栈,但是一旦'/ HowAreYou'对话框结束,机器人也认为响应是针对最初的MainMenu提示,回答“我不明白。请再试一次”,如下:
// I am using the builder.Library routing standard, and have confirmed that
// this gets triggered as expected. this dialog exists in a different file
lib.dialog('/HowAreYou', [
(session, args, next) => {
session.send('I\'m doing well. Thanks for asking!');
builder.Prompts.text(session, 'How are you doing today?');
}, (session, results) => {
session.endDialog('Good to hear that!');
}
]).triggerAction({
matches: /^how are you?$/i,
onSelectAction: (session, args, next) => {
// Add the help dialog to the top of the dialog stack (override the
// default behavior of replacing the stack)
session.beginDialog(args.action, args);
}
});
bot.dialog('mainMenu', [
(session, args, next) => {
builder.Prompts.text(session, 'Hi there! What can I do for you today?');
},
(session, results) => {
session.endConversation('Goodbye!');
}
]).beginDialogAction('weatherAction', '/Weather', {
matches: /^weather$/i,
}).beginDialogAction('sportsAction', '/Sports', {
matches: /^sports$/i,
}).beginDialogAction('cookingAction', '/Cooking', {
matches: /^cooking$/i,
});
虽然目前的结果非常接近理想的行为,但理想情况下我希望机器人在HowAreYou对话框结束后以相同的MainMenu提示回复,不说它不理解
这可能吗?如果是这样,怎么样?如果没有,有什么替代方案?
感谢您提供任何帮助。
答案 0 :(得分:0)
在https://github.com/Microsoft/BotBuilder/issues/2421处有关于GitHub的解释,我们可以意识到Prompts
是内置对话框,处理输入验证。
首次进入mainMenu
中的“提示”对话框,然后在第一个“提示”对话框等待输入文本时触发HowAreYou
对话框。
然后,HowAreYou
以session.endDialog('Good to hear that!');
结尾,mainMenu
中的第一个提示对话框没有结果,但验证失败。
根本原因应该等同于输入builder.Prompts.text(session, 'Hi there! What can I do for you today?');
的空文本。
找到IPromptOptions
的{{3}}属性以进行提示对话,我想到了这个问题。我认为这应该是设计的。
因为句子I don't understand...
是属性retryPrompt
的默认文本。因此,当您结束HowAreYou
对话框并返回到mainPage
对话框堆栈时。提示对话框将重新启动并将retryPrompt
发送给用户,这会引发您的问题。
对于辅助功能,您可以尝试使用:
builder.Prompts.text(session, 'Hi there! What can I do for you today?', {
retryPrompt: 'Hi there! What can I do for you today?'
});