2016-10-21 1 views
3

체인 메시지를 루트 대화 상자로 사용하여 대화를 사용자 메시지로 전환하고 싶습니다. 예를 들어 사용자가 '도움말'을 작성하고 다른 입력을 LuisDialog에서 관리하게하면 HelpDialog를 호출 할 수 있습니다.체인 유창한 대화 상자에서 LuisDialog를 사용하는 방법?

내 문제는 LuisDialog가 사용자로부터 메시지를 기다리므로 체인 환경에서 사용자는 Luis가 의도 한 것을 반환하기 전에 두 번 입력해야한다는 것입니다.

이 내 예제 코드입니다 :

public static readonly IDialog<string> dialog = Chain 
     .PostToChain() 
     .Switch(
      new Case<IMessageActivity, IDialog<string>>(msg => 
       { 
        var regex = new Regex("^help$", RegexOptions.IgnoreCase); 
        return regex.IsMatch(msg.Text); 
       }, 
       (ctx, msg) => 
       { 
        return new HelpDialog(); 
       }), 

      new DefaultCase<IMessageActivity, IDialog<string>>(
       (ctx, msg) => { 
        return new MyLuisDialog(); 
       }) 
     )   
     .Unwrap().PostToUser(); 

이 체인으로 LuisDialog를 사용하는 방법 또는 여러 개의 대화 상자가 함께 사용할 수있는 수 있습니까? 마르코

+0

필요한 경우 대화 상자 내에서 context.forward와 context.call을 사용할 수 있습니다. – OmG

답변

0

사용

덕분에, context.Forward 및 context.Call는 IDialog를 구현하는 새로운 클래스를 생성해야합니다.

원하지 않는 경우 LuisDialog 구현에서 아래 코드를 시도하십시오. 그것은 작동합니다!

public override async Task StartAsync(IDialogContext context) 
    { 
     await this.MessageReceived(context, Awaitable.FromItem(context.Activity.AsMessageActivity())); 
    } 
+0

내가 그렇게 할 때 context.done으로 전달 된 대화 상자를 완료하면 내 완료 방법으로 돌아가서 context.Done을 ​​호출합니다. 그러나 그 다음 그것을 다시 걷어차 기 위해 사용되었던 LuisDialog로 다시 되돌아 오는 것은 바로 다시 시작됩니다. 솔루션? –