Bots 在bot框架中启动主动提示而不中断对话框

Bots 在bot框架中启动主动提示而不中断对话框,bots,botframework,chatbot,Bots,Botframework,Chatbot,嗨,我有一个主动测试机器人,我每隔几个小时发送一条消息,人们就有机会参加测试。如果我没有弄错的话,有两种方法可以使用bot框架在node.js中启动对话框 bot.send() bot.beginDialog() 第一个对话框不结束当前对话框,而第二个对话框结束当前对话框。我想给用户一个问题,比如什么是1500+450和4个选项1800 1950 2500 3000,只有当用户回答了上面的问题时才开始对话。如何在不破坏当前对话框堆栈的情况下执行此操作?您所要求的基本上是不可能的-使用主动消息不

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

bot.send()
bot.beginDialog()

第一个对话框不结束当前对话框,而第二个对话框结束当前对话框。我想给用户一个问题,比如什么是1500+450和4个选项1800 1950 2500 3000,只有当用户回答了上面的问题时才开始对话。如何在不破坏当前对话框堆栈的情况下执行此操作?

您所要求的基本上是不可能的-使用主动消息不允许您更改当前上下文的调用堆栈-它仅允许您向用户发送消息

我想绕过它的唯一方法是使用截获消息并决定是否应该更改调用堆栈(使用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结束后,它将返回正常流程。 请记住,即使在这种情况下,用户也可能记不起他所处的上下文,您将很难找出最后一条消息/提示是什么,等等


也许一个更好的解决方案是使用一个单独的机器人进行测试。

好的快速问题我遇到了这个问题,它解决了一些类似的问题,我想,但我还没有弄清楚beginDialogAction应该如何解决这个问题,有什么想法吗?我没有尝试过这个,但如果我没有弄错的话,它的工作原理非常类似于中间件-意思是,无论您处于何种状态,如果机器人接收到某项工作,请启动一个新对话框。就像endConversationAction选择cancel/quit这样的工作,它总是清除当前堆栈。