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() 即可启动对话,但会等待用户的消息。
您可以查看此内容以了解更多信息:
我正在尝试根据意图触发多个 LUIS 对话框。但我面临的问题是,一旦子对话框被触发,它就会自动触发父 LUIS 对话框中的回调方法。
我一直在关注这个
这是我的代码片段供参考
[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() 即可启动对话,但会等待用户的消息。
您可以查看此内容以了解更多信息: