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

时间:2016-12-19 17:55:25

标签: c# botframework

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

  

RootDialog

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

  

的createContact

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

  

GetContact

  

的SendMail

然后我会将他发送到相应的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();
            }
        }

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

await Task.Run(() => context.Call(new OptionDialog(),
    this.OptionDialogResumeAfter)).ConfigureAwait(false);