Платформа Bot: как выйти из беседы?

поэтому прямо сейчас я использую Microsoft.Bot.Builder.Dialogs.Conversation.SendAsync и Microsoft.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 для обработки команды "Отмена"? Или он автоматически отменяет разговор, когда пользователь отправляет одну и ту же команду "login" более одного раза? Кажется, что неудобно отправлять команду "отменить" отдельно.

Ответ 1

Я думаю, что вам не хватает DefaultCase. Проверьте это. Он показывает реализацию DefaultCase для Facebook Auth Sample. BTW, в этом примере у них также есть команда "Выход".

Ответ 2

Я бы рассмотрел, как ваши пользователи будут интерпретировать конец разговора, и подумайте об этих сценариях и о том, как люди заканчивают разговоры.

Вы можете добавить код для обработки сброса или окончания разговора на основе определенных ключевых слов и с помощью шаблона GlobalMessageHandler.

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

Кроме того, ожидайте, что пользователи просто "повесят" /закроют окно после их завершения.

Хороший набор показателей может помочь собрать информацию о том, как люди используют бота для владельцев, чтобы улучшить его. i.e: привело ли взаимодействие X к ожидаемому взаимодействию Y, или какое последнее взаимодействие мы увидели для этого разговора... и т.д.