LUIS多个IDialog

时间:2017-07-19 05:09:21

标签: c# botframework luis

我正在尝试根据意图触发多个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对话框堆栈。

1 个答案:

答案 0 :(得分:0)

您看到的问题是因为您正在使用context.Forward(),它基本上启动一个对话框并通过它传递消息(无需用户输入)。

如果你想避免这种情况,你需要只使用context.Call()来启动对话但是等待来自用户的消息。

您可以查看此内容以了解更多信息:Calling Forms from Dialogs