Bot Framework:如何退出对话?

Posted

技术标签:

【中文标题】Bot Framework:如何退出对话?【英文标题】:Bot Framework: How to exit Conversation? 【发布时间】:2016-09-04 16:32:23 【问题描述】:

所以现在我正在使用Microsoft.Bot.Builder.Dialogs.Conversation.SendAsyncMicrosoft.Bot.Builder.Dialogs.Conversation.ResumeAsync 来实现一种暂停和恢复对话的方法,但似乎不可能“退出”或回到以前的状态。它卡在对话对话框中。

我是否只执行“取消”命令?如果是这样,我需要清除哪些数据才能恢复到原始状态?

    public static readonly IDialog<string> dialog = Chain
        .PostToChain()
        .Switch(
            new Case<Message, IDialog<string>>((msg) =>
            
                var regex = new Regex("login", RegexOptions.IgnoreCase);
                return regex.IsMatch(msg.Text);
            , (ctx, msg) =>
            
                return Chain.ContinueWith(new ChatDialog(msg),
                            async (context, res) =>
                            
                                var token = await res;
                                //var valid = await Helpers.ValidateAccessToken(token);
                                //var name = await Helpers.GetProfileName(token);
                                var name = "User";
                                context.UserData.SetValue("name", name);
                                return Chain.Return($"You are logged in as: name");
                            );
            )
        ).Unwrap().PostToUser();

所以如果我发送一个“登录”,它将开始一个新的ChatDialog 对话,但它似乎陷入了这种状态。即使我尝试发送另一个命令,它也会继续要求登录。我是否实现另一个Case 类来处理“取消”命令?还是应该在用户多次发送相同的“登录”命令时自动取消对话?必须单独发送“取消”命令似乎有点笨拙。

【问题讨论】:

只是想知道,你找到解决方案了吗?我也有同样的问题。 【参考方案1】:

我认为您缺少 DefaultCase。检查this。它显示了 Facebook Auth 示例的 DefaultCase 的实现。顺便说一句,在那个示例中,他们还有一个 Logout 命令。

【讨论】:

【参考方案2】:

我会考虑您的用户将如何解释对话的结束,并考虑这些场景以及人们如何结束对话。

您可以添加代码来处理基于特定关键字的重置或对话结束,并使用 GlobalMessageHandler 模式。

https://github.com/Microsoft/BotBuilder-Samples/tree/master/CSharp/core-GlobalMessageHandlers

此外,希望用户在完成后只是“挂断”/关闭窗口。

一套好的指标可以帮助收集有关人们如何使用机器人的信息,以便所有者改进它。 即:交互 X 是否导致了预期的交互 Y,或者我们在此对话中看到的最后一次交互是什么......等等。

【讨论】:

以上是关于Bot Framework:如何退出对话?的主要内容,如果未能解决你的问题,请参考以下文章

Microsoft Bot Framework 退出对话框

如何在 Bot Framework 的测试函数中访问用户和对话数据

如何自动将用户信息传递给 Bot Framework 对话实例,而不将其作为显式消息发布在聊天窗口中?

在一定时间后取消提示或对话框 - Bot Framework

使用 Bot Framework 通过 NodeJS 发布到 Microsoft Teams 频道

Microsoft Bot Framework - 如何将数据从 Azure 数据库获取到我的 Bot 项目?