2016-12-07 9 views
1

私はLUIS Dialogに固執しています。私はコールの後LUISダイアログ内からFormDialogを呼び出す

[LuisIntent("GetRestaurant")] 
    public async Task GetRestaurant(IDialogContext context, LuisResult result) { 
     try { 
      FormDialog<AddressForm> addressForm = new FormDialog<AddressForm>(new AddressForm(), AddressForm.BuildAddressForm, FormOptions.PromptInStart); 
      AddressForm address = new AddressForm(); 
      context.Call(addressForm, AddressFormCompleteAsync); 
    } 

でFormDialogを呼び出すようにしようとしている、私のエミュレータは、最初のプロンプト(都市?)私のFormダイアログでを返し、に対してそれを一致させるためにルイス・入力とtrysとして、次の入力を受け取りLuisIntent。

私のフォームは、次のようになります。

[Serializable] 
public class AddressForm { 

    [Prompt(new string[] { "Which city?" })] 
    public string City { get; set; } 

    [Prompt("Which street?")] 
    public string Street { get; set; } 

    [Prompt("Which number?")] 
    public string Number { get; set; } 

    public static IForm<AddressForm> BuildAddressForm() { 
     IForm<AddressForm> addressFrom = new FormBuilder<AddressForm>() 
      .Field(nameof(City), validate: ValidateCityInformation) 
      .Field(nameof(Street)) 
      .Field(nameof(Number), validate: ValidateNumberInformation, active: NumberEnabled) 
      .Build(); 
     return addressFrom; 
    } 

私の再開方法は、単にデバッグのために、まだ多くを行いません。

private async Task AddressFormCompleteAsync(IDialogContext context, IAwaitable<AddressForm> result) { 
     var adress = await result; 
     context.Wait(MessageReceived); 
    } 

どのように私はFormDialogに留まり、私のLuisDialogにジャンプしませんか? context.Forward()を使用する必要がある場合は、AddressFormクラスがIDialog型である必要があります。また、AddressFromクラスのIAwaitableをどのように処理しますか?

ありがとうございました。

答えて

2

私は今答えを見つけました。これはFormDialogから飛び出しました。なぜなら、プロンプト(チャンネルに表示されます)が呼び出しメソッド(私がLuisDialogを呼び出した場所)の受信メッセージとしてカウントし、FormDialogとLuisDialogがcontext.Doneを取得するからです。私は会話の流れにもっと注意を払わなければなりませんでした。

関連する問題