2017-02-16 1 views
1

Я новичок в программировании ботов facebook. Я использую инфраструктуру Microsoft bot в C#.Как позвонить в форму, нажав кнопку в рамке bot C#

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

Когда я пытаюсь к этому с помощью этого кода я не получаю ничего, как ... или Отвечает я получил ошибку

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)); 
Смежные вопросы