C# 企业Bot模板未在单步WaterWallDialog中恢复MainDialog

C# 企业Bot模板未在单步WaterWallDialog中恢复MainDialog,c#,botframework,C#,Botframework,当启动一个对话框说我想使用Enterprise Bot模板与人交谈时,WaterWall对话框启动,显示联系人卡,并通过调用EndDialogAsync()结束流程 但是,从未调用MainDialogsCompleteAsync()方法。因此,机器人不会要求进一步的帮助 我注意到,在多步骤的Waterwall对话框中,这是正确的。我相信这与执行有某种关系,但没有意义 如评论中所述,此问题不再出现在最新的企业bot模板中。今天,我自己用来自的企业Bot模板的版本4.3.0.171验证了这一点 如

当启动一个对话框说我想使用Enterprise Bot模板与人交谈时,WaterWall对话框启动,显示联系人卡,并通过调用
EndDialogAsync()
结束流程

但是,从未调用MainDialogs
CompleteAsync()
方法。因此,机器人不会要求进一步的帮助

我注意到,在多步骤的Waterwall对话框中,这是正确的。我相信这与执行有某种关系,但没有意义


如评论中所述,此问题不再出现在最新的企业bot模板中。今天,我自己用来自的企业Bot模板的版本4.3.0.171验证了这一点

如果您和我一样是从以前版本的模板开始的,并且您想要相同的行为,那么您必须更改
RouterDialog.cs
文件

只需在
OnContinueDialogAsync
处理程序方法中添加以下代码行:

...
case DialogTurnStatus.Empty:
{
    await this.RouteAsync(innerDc);
    // FIX: Waterfalls with no turns should Complete.
    if (innerDc.Stack.Count == 0)
        await CompleteAsync(innerDc);
    break;
}
...
在知道问题的来源后,我可以在2019年1月30日找到相关的合并

并排比较更改的文件:

应用修复后的结果:


你是从AI回购中获得企业机器人还是从VSIX模板开始的?@KyleDelaney老实说,我不记得了。我开始这个项目已经三个月了。你是想告诉我一个可能在最近的提交中解决的问题吗?不是,我只是想忠实地再现你的行为,如果我不得不猜测的话,我会说我使用了VSIX。不过我不确定。期待您的分析。提前感谢。我今天刚刚创建了一个新的企业机器人,恐怕无法复制您的问题
MainDialog.CompleteAsync
在升级Dialog.SendPhone之后执行。既然你说你3个月前就开始了这个项目,你有没有可能没有更新到Bot Builder 4.3?虽然我在GitHub repo中找不到这个特定的bug,但这很可能是SDK中已修复的bug。请检查您的NuGet软件包的版本,并让我知道它们是什么。我使用的是4.3.1。
protected override async Task CompleteAsync(DialogContext dc, CancellationToken cancellationToken = default(CancellationToken))
{
    // The active dialog's stack ended with a complete status
    await _responder.ReplyWith(dc.Context, MainResponses.ResponseIds.Completed);
}
...
case DialogTurnStatus.Empty:
{
    await this.RouteAsync(innerDc);
    // FIX: Waterfalls with no turns should Complete.
    if (innerDc.Stack.Count == 0)
        await CompleteAsync(innerDc);
    break;
}
...