2016-12-07 4 views
1

나는 LUIS 대화 상자에 갇혀있다. 내가 전화 후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를 호출하기 위해 노력하고있어, 내 에뮬레이터 내 양식 대화 상자에서 첫 번째 프롬프트를 (어느 도시?) 반환하고, 루이스 입력으로 다음 입력을 받아 대조를 일치 할려고 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

이제 대답을 찾았습니다. 프롬프트 (채널에 표시됨)가 호출하는 메소드 (내가 LuisDialog를 호출 한 곳)에 대한 메시지로 계산되므로 FormDialog에서 빠져 나와 FormDialog와 LuisDialog가 컨텍스트를 얻습니다. 나는 대화 흐름에 더 조심해야했다.

관련 문제