2017-02-16 1 views
1

Ich bin neu in der Programmierung von Facebook-Bots. Ich benutze Microsoft Bot Framework in C#.So rufen Sie Formflow durch Klicken auf eine Schaltfläche im Bot-Framework C#

Ich möchte einen Dialog oder einen Formularfluss starten, wenn der Benutzer eine Auswahl aus einer schnellen Antwort auswählt.

Als ich dies versuchen, mit diesem Code nicht, dass ich nichts als responde bekommen ... oder ich habe Fehler

error photo: Screenshot


In meinem Rootdialog.cs diesen Code im mit:

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 ist

[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(); 
    } 
} 

}

Antwort

0

Ich glaube context.Call eine IDialog braucht, so versuchen Chain.From Mithilfe aufzubauen von FormDialog.FromForm:

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

es dann rufen Sie mit:

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