【问题标题】:Initiate proactive prompt without breaking dialog in bot framework启动主动提示而不破坏机器人框架中的对话
【发布时间】:2017-02-12 17:25:57
【问题描述】:

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

bot.send()
bot.beginDialog()

第一个不会结束当前对话框,而第二个会结束。我想给用户一个像 What is 1500 + 450 和 4 个选项 1800 1950 2500 3000 这样的问题,并且只有当该人回答上述问题时才开始对话。如何在不破坏当前对话框堆栈的情况下做到这一点?

【问题讨论】:

    标签: bots botframework chatbot


    【解决方案1】:

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

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

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

    【讨论】:

    • 好的,快速的问题我遇到了这个问题,我猜想github.com/Microsoft/BotBuilder/issues/1352 解决了类似的问题,但我还没有弄清楚 beginDialogAction 应该如何解决这个问题,有什么想法吗?
    • 这个我没试过,但是如果我没记错的话,这很像中间件——意思是,无论你处于什么状态,如果某个工作被机器人接收,开始一个新的对话。就像 endConversationAction 挑选出像取消/退出这样的作品,它总是会清除当前堆栈。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 2017-09-10
    • 2016-05-06
    • 1970-01-01
    相关资源
    最近更新 更多