2016-10-21 1 views
3

私はrootのダイアログとしてチェーンメッセージを使って会話をユーザーメッセージで切り替えたいと思っています。たとえば、ユーザーが「help」と書いてHelpDialogを呼び出し、他の入力をLuisDialogで管理できるようにします。Chain FluentダイアログでLuisDialogを使用するには?

私の問題は、LuisDialogがユーザーからのメッセージを待つので、チェーン環境では、Luisが自分の意図を返す前に入力を2回書き込む必要があるということです。

これは私のサンプルコードです:

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

ダイアログを連鎖させる最適なソリューションの1つは、必要に応じてダイアログ内で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で転送されたダイアログを完成させます。それは私のcompletionメソッドに戻り、そこで私はcontext.Doneも呼び出します。しかし、それから、それを蹴り上げるために使用されたLuisDialogに再び戻ってきて、再び立ち上がります。ソリューション? –

関連する問題