Как перестроить диалог чата с бот-фреймворком - PullRequest
0 голосов
/ 28 августа 2018

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

Ниже приведен один из моих диалоговых кодов, в которых я хочу получить подтверждение от пользователя и, при необходимости, необходимо изменить выбор клиента / предоставленные параметры.

ниже код, над которым я работаю

Диалог

    namespace FormBot.Dialogs
{

    [Serializable]
    public class HardwareDialog : IDialog<object>
    {
        public async Task StartAsync(IDialogContext context)
        {
            await context.PostAsync("Welcome to the Hardware solution helpdesk!");
            var HardwareFormDialog = FormDialog.FromForm(this.BuildHardwareForm, FormOptions.PromptInStart);
            context.Call(HardwareFormDialog, this.ResumeAfterHardwareFormDialog);
        }

        private IForm<HardwareQuery> BuildHardwareForm()
        {
            OnCompletionAsyncDelegate<HardwareQuery> HardwareRequest = async (context, state) =>
            {
                string message = string.Empty;            
                await context.PostAsync($"Ok. {message}.  Once we resolve it; we will get back to you....");
            };

            return new FormBuilder<HardwareQuery>()
                .Field(nameof(HardwareQuery.Hardware))
                .Message($"We are Creating Ticket your request ...")
                .AddRemainingFields()
                .OnCompletion(HardwareRequest)
                .Build();
        }

        private async Task ResumeAfterHardwareFormDialog(IDialogContext context, IAwaitable<HardwareQuery> result)
        {
            try
            {

            }
            catch (FormCanceledException ex)
            {
                string reply;

                if (ex.InnerException == null)
                {
                    reply = "You have canceled the operation. Quitting from the HardwareDialog";
                }
                else
                {
                    reply = $"Oops! Something went wrong :( Technical Details: {ex.InnerException.Message}";
                }

                await context.PostAsync(reply);
            }
            finally
            {
                context.Done<object>(null);
            }
        }

        public static IForm<HardwareDialog> BuildForm()
        {
            return new FormBuilder<HardwareDialog>()
                    .Message("Welcome to Service Ticket Bot!")
                    .Build();
        }


    }
}

Конструктор запросов

public enum HardwareOptions
    {
        Desktop, KeyBoard, Laptop, Monitor, Mouse, Printer, Scanner, Server, Tablet
    };

    [Serializable]
    public class HardwareQuery
    {

        [Prompt("Choose your {&} ? {||}")]
        public HardwareOptions? Hardware;

        [Prompt("Please enter {&}")]
        [Pattern(Utility.Phone)]
        public string PhoneNumber { get; set; }


        [Prompt("Please enter {&} ")]
        [Pattern(Utility.Email)]
        public string Email { get; set; }

        [Prompt("Please provide your business need / {&} below")]
        public string Justification { get; set; }

        public static IForm<HardwareQuery> BuildForm()
        {
            OnCompletionAsyncDelegate<ServiceTicket> processOrder = async (context, state) =>
            {
                await context.PostAsync($"Once we resolve it; we will get back to you....");
            };

            return new FormBuilder<HardwareQuery>()
                    .Message("Welcome !")
                    .Build();
        }
    }
}

Ожидаемый результат

Запрос подтверждения Обновление набора результатов

1 Ответ

0 голосов
/ 28 августа 2018

Чтобы запросить подтверждение выбранных значений в FormFlow, вы можете использовать .Confirm() при создании формы. Если вы хотите запросить персонализированное сообщение, вы можете использовать .Confirm("Do you confirm the chosen hardware - {Hardware} and your email - {Email} and phone number {PhoneNumber}"). Для подробных подходов посмотрите официальную документацию . Основываясь на выборе подтверждения, поток форм платформы ботов автоматически обрабатывает публикацию в вопросах для изменения и обновления результатов.

P.S. С другой стороны, я не уверен, почему вы пытаетесь использовать FormDialog.FromForm и другой ненужный код, вы можете упростить HardwareDialog следующим образом:

namespace FormBot.Dialogs
{

    [Serializable]
    public class HardwareDialog : IDialog<object>
    {
        public async Task StartAsync(IDialogContext context)
        {
            await context.PostAsync("Welcome to the Hardware solution helpdesk!");
            var HardwareFormDialog = new FormDialog<HardwareQuery>(new HardwareQuery(), HardwareQuery.BuildForm, FormOptions.PromptInStart);
            context.Call(HardwareFormDialog, this.ResumeAfterHardwareFormDialog);
        }

    private async Task ResumeAfterHardwareFormDialog(IDialogContext context, IAwaitable<HardwareQuery> result)
    {
        try
        {

        }
        catch (FormCanceledException ex)
        {
            string reply;

            if (ex.InnerException == null)
            {
                reply = "You have canceled the operation. Quitting from the HardwareDialog";
            }
            else
            {
                reply = $"Oops! Something went wrong :( Technical Details: {ex.InnerException.Message}";
            }

            await context.PostAsync(reply);
        }
        finally
        {
            context.Done<object>(null);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...