LUIS 多个 IDialog

LUIS multiple IDialog

我正在尝试根据意图触发多个 LUIS 对话框。但我面临的问题是,一旦子对话框被触发,它就会自动触发父 LUIS 对话框中的回调方法。

我一直在关注这个 的 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:我还发现了一个 GitHub repo,它显示了同一作者在 SO 中的对话堆栈,但 LUIS 对话框堆栈仍未按预期工作。

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

如果您想避免这种情况,您只需使用 context.Call() 即可启动对话,但会等待用户的消息。

您可以查看此内容以了解更多信息: