2017-07-19 10 views
0

私はインテントに基づいて複数のLUISダイアログをトリガーしようとしています。しかし、私が直面している問題は、子ダイアログがトリガーされると、自動的に親LUISダイアログのコールバックメソッドをトリガすることです。LUIS multiple IDialog

私は同じ問題を述べている同じpostのSOに従っていますが、同じ成功を再現することはできません。ここで

は私のコードスニペットは、参考値です

[LuisIntent("ClaimStatus")] 
public async Task ClaimStatus(IDialogContext context, IAwaitable<IMessageActivity> activity, LuisResult result) 
{ 
     string message = ""; 
     message = "Sure, but first I would need to verify you."; 
     await context.PostAsync(message); 
     await context.Forward(new VerificationDialog(), VerificationDialogCompleted, context.Activity, CancellationToken.None); 
} 

private Task VerificationDialogCompleted(IDialogContext context, IAwaitable<object> result) 
{ 
    //var res = await result; 
    context.PostAsync("ProductsDialogCompleted" + result); 
    context.Wait(MessageReceived); 
    return Task.CompletedTask; 
} 

コード子ダイアログ

override public async Task StartAsync(IDialogContext context) 
{ 
     await context.PostAsync("Would you please tell me your Customer ID?"); 
     context.Wait(MessageReceived); 
} 

[LuisIntent("None")] 
private async Task None(IDialogContext context, IAwaitable<IMessageActivity> activity, LuisResult result) 
{ 
    context.Done(true); 
} 

EDIT1に:私はまた、SOで同じ著者による対話スタックを示しているGitHubのrepoが見つかりましたが、まだいますLUISダイアログスタックが正常に動作しません。

+0

どのバージョンのBotBuilderを使用していますか? –

+0

@EzequielJadib Microsoft.Bot.Builder v3.8.5 – user6083088

+0

@EzequielJadibIここにメッセージコントローラ、ルートと子のルイスダイアログがあります。https://gist.github.com/PrasenjitGiri/eae50a3cccb7914bcf4eabda16e62309 – user6083088

答えて

0

あなたが見ている問題は、基本的にダイアログを開始し、それを介して(ユーザー入力なしで)メッセージを渡すcontext.Forward()を使用しているためです。

これを避けるには、ダイアログを開始してユーザーからのメッセージを待つcontext.Call()だけを使用する必要があります。

詳細をご確認ください:Calling Forms from Dialogs