1

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

呼び出しの後、エミュレーターは最初のプロンプト (どの都市?) をフォーム ダイアログに返し、次の入力を Luis 入力として受け取り、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;
    }

私の Resume メソッドは、デバッグのためだけに、まだあまり機能しません。

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

FormDialog にとどまり、LuisDialog に戻らないようにするにはどうすればよいですか? context.Forward() を使用する必要がある場合、AddressForm クラスは IDialog 型である必要がありますか? AddressFrom クラスで IAwaitable を処理するにはどうすればよいですか?

助けてくれてありがとう。

4

1 に答える 1