当启动一个对话框,说出我想使用Enterprise Bot模板与人交谈时,WaterfallDialog会启动,显示联系人卡片,并通过调用EndDialogAsync()
结束流程。
但是,永远不会调用MainDialogs CompleteAsync()
方法。因此,该机器人不会寻求进一步的帮助。
我注意到,在多步WaterfallDialogs中,它可以正常工作。我相信,这与RouterDialog.cs的实现有某种关系,但没有任何意义。
private async Task<DialogTurnResult> SendPhone(WaterfallStepContext sc, CancellationToken cancellationToken)
{
await _responder.ReplyWith(sc.Context, EscalateResponses.ResponseIds.SendPhoneMessage);
return await sc.EndDialogAsync();
}
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);
}
答案 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日合并。
已更改文件的并排比较:
应用修复后的结果: