您好我有一个主动测验机器人,我每隔几个小时发送一条消息,人们就有机会参加测验。如果我没有弄错的话,有两种方法可以使用bot框架在node.js中开始对话
bot.send()
bot.beginDialog()
第一个没有结束当前对话,而第二个没有。我想给用户一个问题,例如什么是1500 + 450和4个选择1800 1950 2500 3000,并且仅当该人回答上述问题时才启动对话框。如何在不破坏当前对话框的情况下执行此操作?
答案 0 :(得分:1)
您要求的内容基本上是不可能的 - 使用主动消息不会让您更改当前上下文的调用堆栈 - 它只允许您向用户发送消息。
我想绕过这个的唯一方法是使用middleware拦截消息并决定是否应该更改callstack(使用beginDialog)。
由于您可能遇到以下情况,因此这也不是最佳选择: 1.当前的电话堆栈问题:"你有多少年的经验?" 2.主动提示:"选择答案:1)1000。2)2000等。"
如果用户键入" 2"他指的是哪种背景?
也许一个好的解决方案是让用户输入"测验答案:2"这将使您能够使用中间件拦截此消息:
bot.use({
botbuilder: function (session, next) {
if (/^(quiz answer)/g.test(session.message.text)) {
session.beginDialog('/quizAnswer');
}
else {
next();
}
}
});
对话框 / quizAnswer 结束后,将返回正常流程。 请记住,即使在这种情况下 - 用户可能也不记得他所处的环境,并且您很难弄清楚最后的消息/提示等等...
也许更好的解决方案是为测验设置一个单独的机器人。