Bot框架:如何退出对话?

use*_*709 11 c# botframework

所以现在我正在使用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();
Run Code Online (Sandbox Code Playgroud)

因此,如果我发送"登录",它将会开始一个新的ChatDialog对话,但它似乎陷入了这种状态.即使我尝试发送另一个命令,它也会继续要求登录.我是否实现了另一个Case类来处理"取消"命令?或者,当用户多次发送相同的"登录"命令时,它是否应自动取消对话?看起来有点笨重,必须单独发送'取消'命令.

Eze*_*dib 3

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