Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 路易斯·多伊达洛格_C#_Botframework_Azure Language Understanding - Fatal编程技术网

C# 路易斯·多伊达洛格

C# 路易斯·多伊达洛格,c#,botframework,azure-language-understanding,C#,Botframework,Azure Language Understanding,我试图根据意图触发多个LUIS对话。但我面临的问题是,一旦子对话框被触发,它就会自动触发父LUIS对话框中的回调方法 我一直在关注SO的这篇文章,其中提到了同样的问题,但我无法复制同样的成功 这是我的代码片段供参考 [LuisIntent("ClaimStatus")] public async Task ClaimStatus(IDialogContext context, IAwaitable<IMessageActivity> activity, LuisResult resu

我试图根据意图触发多个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;
}
[LuisIntent(“索赔状态”)]
公共异步任务ClaimStatus(IDialogContext上下文、IAwaitable活动、LuisResult结果)
{
字符串消息=”;
message=“当然,但首先我需要验证您的身份。”;
等待上下文。PostAsync(消息);
wait context.Forward(new-VerificationDialog(),VerificationDialogCompleted,context.Activity,CancellationToken.None);
}
私有任务验证DialogCompleted(IDialogContext上下文,IAwaitable结果)
{
//var res=等待结果;
PostAsync(“ProductsDialogCompleted”+结果);
Wait(MessageReceived);
返回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);
}
覆盖公共异步任务StartAsync(IDialogContext上下文)
{
等待上下文。PostAsync(“请告诉我您的客户ID好吗?”);
Wait(MessageReceived);
}
[路易辛顿(“无”)]
私有异步任务无(IDialogContext上下文、IAwaitable活动、LuisResult结果)
{
上下文。完成(true);
}

EDIT1:我还发现了一个GitHub,它在SO中显示了同一作者的对话堆栈,但LUIS对话堆栈仍然没有按预期工作

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

如果要避免这种情况,只需使用context.Call(),它将启动对话框,但等待用户的消息


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

您使用的BotBuilder版本是什么?@EzequielJadib Microsoft.Bot.Builder v3.8。5@EzequielJadibI下面是消息控制器、根和子luis对话框,作为要点,如果使用v3.8.4,您可以快速检查是否发生这种情况吗?OMG!在过去的5天里,我一直在关注这一点-谢谢@EzequielJadib,如果你添加一条消息,如果你愿意,我可以接受。还有,你是怎么读到这么多的?我看不到在机器人页面中提到这些