带有多个表格对话框的MS Bot

问题描述 投票:0回答:2

我的项目中有4个对话框,第一个是

RootDialog

有一些枚举。这是我的root对话框,所以如果用户选择第一个选项,那么我想将他发送到

的createContact

我在下面添加的对话框,如果用户选择

GetContact

要么

发邮件

然后我会将他发送到相应的Dialog,但我无法在完成或选择第一个Dialog时调用另一个表单对话框。

 [Serializable]
        public enum RootOptions
        {
            CreateContact = 1, GetContact = 2, SendMail
        };

 [Serializable]
        public class RootForm
        {
            public RootOptions? Option;
            public static IForm<RootForm> BuildForm()
            {
                return new FormBuilder<RootForm>()
                        .Message("Welcome to TEST BOT!")
                        .OnCompletion(async (context, rootoption) =>
                        {
                            switch(rootoption.Option.Value.ToString()) "")
                            {
                                case "CreateContact":
                                //How to call Contact Dialog
                                break;
                                case "GetContact":
                                //Call Get Contact Dialog
                                break;
                                case "SendMail":
                                //Call Send Mail Dialog
                                break;
                            }
                        })
                        .Build();
            }
        }

创建联系人对话框

[Serializable]
        public class ContactForm
        {
            [Prompt("What is the name? {||}")]
            public string Name;
            [Prompt("What is the Mobile No? {||}")]
            public string Mobile;
            [Prompt("What is the Email? {||}")]
            public string Email;
            public static IForm<ContactForm> BuildForm()
            {
                return new FormBuilder<ContactForm>()
                        .Message("Let's create a contact")
                        .OnCompletion(async (context, profileForm) =>
                        {
                        await context.PostAsync("Your contact has been created.");
                        })
                        .Build();
            }
        }

发送邮件对话框

[Serializable]
        public class MailForm
        {
            [Prompt("What is the Email Id? {||}")]
            public string Email;
            [Prompt("What is the Subject? {||}")]
            public string subject;
            [Prompt("What is the Message? {||}")]
            public string Message;
            public static IForm<MailForm> BuildForm()
            {
                return new FormBuilder<MailForm>()
                        .Message("Let's Send a Mail")
                        .OnCompletion(async (context, mailForm) =>
                        {
                        await context.PostAsync("Mail Sent.");
                        })
                        .Build();
            }
        }
c# botframework
2个回答
1
投票

要调用对话框,您需要使用context.Call中所述的this post。但是,我不完全确定这是否适用于表格的OnCompletion事件。

如果它不起作用,我的建议是将RootForm封装到IDialog<object>对话框中,并使用该对话框作为控制器的Conversation.SendAsync的起点。


0
投票

您可以使用以下代码行来调用多个对话框:

await Task.Run(() => context.Call(new OptionDialog(),
    this.OptionDialogResumeAfter)).ConfigureAwait(false);
© www.soinside.com 2019 - 2024. All rights reserved.