在不破坏bot框架中的对话框的情况下启动主动提示

时间:2017-02-11 03:25:53

标签: bots botframework chatbot

您好我有一个主动测验机器人,我每隔几个小时发送一条消息,人们就有机会参加测验。如果我没有弄错的话,有两种方法可以使用bot框架在node.js中开始对话

bot.send()
bot.beginDialog()

第一个没有结束当前对话,而第二个没有。我想给用户一个问题,例如什么是1500 + 450和4个选择1800 1950 2500 3000,并且仅当该人回答上述问题时才启动对话框。如何在不破坏当前对话框的情况下执行此操作?

1 个答案:

答案 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 结束后,将返回正常流程。 请记住,即使在这种情况下 - 用户可能也不记得他所处的环境,并且您很难弄清楚最后的消息/提示等等...

也许更好的解决方案是为测验设置一个单独的机器人。