2017-07-19 21 views
0

我想基於意圖觸發多個LUIS對話框。但是我面臨的問題是一旦子對話框被觸發,它會自動觸發父LUIS對話框中的回調方法。LUIS多個IDialog

我一直在關注SO的post,它提到了同樣的問題,但無法複製同樣的成功。

這裏是我的參考

[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:我還發現了一個GitHub的repo,顯示對話堆棧由同一作者左右,但仍LUIS對話框堆棧未按預期工作。

+0

您正在使用的是哪個版本的BotBuilder? –

+0

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

+0

@EzequielJadibI這裏是消息控制器,根和兒童luis對話框作爲gist https://gist.github.com/PrasenjitGiri/eae50a3cccb7914bcf4eabda16e62309 – user6083088

回答

0

你看到的問題是因爲你正在使用context.Forward(),它基本上啓動了一個對話框並通過它傳遞消息(沒有用戶輸入)。

如果你想避免這種情況,你只需要使用context.Call(),它將啓動對話框,但等待來自用戶的消息。

您可以查看此代碼以瞭解更多信息:Calling Forms from Dialogs