Bot Framework: как выйти из разговора?

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


person user299709    schedule 09.05.2016    source источник
comment
Просто интересно, вы все-таки нашли решение? У меня такая же проблема.   -  person    schedule 24.08.2016


Ответы (2)


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

person Ezequiel Jadib    schedule 10.05.2016

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

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

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

Кроме того, ожидайте, что пользователи просто «повесят трубку» / закроют окно, как только они это сделают.

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

person Ed Huber    schedule 05.06.2017