2017-02-16 51 views
1

我是新編程的Facebook機器人。我在C#中使用微軟的bot框架。如何通過點擊bot框架c中的按鈕調用formflow#

我想在用戶從快速回復中選擇一個選擇時啓動對話框或表單流。

當我嘗試這個使用此代碼我不明白什麼是responde ......或者我得到錯誤

error photo: Screenshot


在我Rootdialog.cs即時通訊使用此代碼:

private async Task OnOptionSelected(IDialogContext context, IAwaitable<IMessageActivity> result) 
    { 
     var message = await result; 

     //if you choose start parking 
     if (message.Text == Resources.RootDialog_Welcome_Start) 
     { 
      this.order = new Models.Order(); 

      var promptOptions = new PromptOptions<string>(
       "Please select the city where you want to park:", 
       options: new[] { "a", "b", "c" }, 
       promptStyler: new()); 

      PromptDialog.Choice(context, this.ResumeAfterSelection, promptOptions); 

     } 




private async Task ResumeAfterSelection(IDialogContext context, IAwaitable<string> result) 
    { 
     try 
     { 
      var cityRange = await result; 
      if (cityRange == "Brussels") 
      { 




context.Call(FormDialog.FromForm<Enquiry>(Enquiry.BuildEnquiryForm, FormOptions.PromptInStart), async (ctx, formResult) => ctx.Wait(this.MessageReceivedAsync)); 
       //var myform = new FormDialog<Enquiry>(new Enquiry(), Enquiry.BuildEnquiryForm, FormOptions.PromptInStart, null); 

Enquiry.cs是

[Serializable] 
public class Enquiry : LuisDialog<StartParking> 
{ 
    private Func<IForm<Enquiry>> buildEnquiryForm; 



    public Enquiry(Func<IForm<Enquiry>> buildEnquiryForm) 
    { 
     this.buildEnquiryForm = buildEnquiryForm; 
    } 

    public Enquiry() 
    { 
    } 

    [Prompt("What time")] 
    public DateTime Time { get; set; } 
    [Prompt("Placenumber?")] 
    public string PlaceNumber { get; set; } 
    [Prompt("Platenumber?")] 
    public string Platenumber { get; set; } 



    public IEnumerable<EntityRecommendation> Entities { get; internal set; } 



    public static IForm<Enquiry> BuildEnquiryForm() 
    { 
     return new FormBuilder<Enquiry>() 

      .AddRemainingFields() 
      .Build(); 
    } 
} 

}

回答

0

我相信context.Call需要一個IDialog,所以儘量使用Chain.From打造一起來從FormDialog.FromForm

internal static IDialog<Enquiry> MakeRoot() 
{ 
    return Chain.From(() => FormDialog.FromForm<Enquiry>(Enquiry.BuildEnquiryForm, FormOptions.PromptInStart)); 
} 

然後使用叫它:

context.Call(MakeRoot, async (ctx, formResult) => ctx.Wait(this.MessageReceivedAsync));