我正在尝试根据意图触发多个LUIS对话框。但我面临的问题是,一旦触发了子对话框,它就会自动触发父LUIS对话框中的回调方法。
我一直在关注这个提到同样问题的post SO,但我无法复制同样的成功。
以下是我的参考代码段
nuget.exe restore mysolution.sln
子对话框中的代码
[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;
}
EDIT1:我还发现了一个GitHub repo,它显示了同一作者在SO中的对话堆栈,但仍然没有按预期工作LUIS对话框堆栈。
答案 0 :(得分:0)
您看到的问题是因为您正在使用context.Forward(),它基本上启动一个对话框并通过它传递消息(无需用户输入)。
如果你想避免这种情况,你需要只使用context.Call()来启动对话但是等待来自用户的消息。
您可以查看此内容以了解更多信息:Calling Forms from Dialogs