私は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をどのように処理しますか?
ありがとうございました。