企业Bot模板无法在一步瀑布中恢复MainDialog

时间:2019-03-27 12:32:28

标签: c# botframework

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

>

但是,永远不会调用MainDialogs CompleteAsync()方法。因此,该机器人不会寻求进一步的帮助。

我注意到,在多步WaterfallDialogs中,它可以正常工作。我相信,这与RouterDialog.cs的实现有某种关系,但没有任何意义。

EscalateDialog.cs

private async Task<DialogTurnResult> SendPhone(WaterfallStepContext sc, CancellationToken cancellationToken)
{
    await _responder.ReplyWith(sc.Context, EscalateResponses.ResponseIds.SendPhoneMessage);
    return await sc.EndDialogAsync();
}

MainDialog.cs

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);
}

1 个答案:

答案 0 :(得分:1)

如评论中所述,最新的企业漫游器模板中不再出现此问题。我今天使用marketplace中的企业机器人模板的 4.3.0.171 版本对此进行了验证。

如果您和我一样是从模板的早期版本开始的,并且想要相同的行为,则必须更改data = list(data) minimum = min(data[1:]) l = data[:1] + [x - minimum for x in data[1:]] #leave data[0] as it is, but substract minimum from each x of data[1:] 文件。

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

OnContinueDialogAsync

了解问题出处后,我发现相关的GitHub PR于2019年1月30日合并。

已更改文件的并排比较:

code fix

应用修复后的结果:

result