使用Microsoft Bot Framework v4,我有3个创建循环的对话框。当我按如下所示实现它们时,由于Bot Framework v4要求您初始化构造函数中的每个对话框,因此Bot会出错并出现堆栈溢出异常。我想知道是否有人用这种流程创建了一个机器人,而没有例外。
这是3个对话框:创建联系人,更新联系人并搜索联系人。
搜索联系人可能找不到联系人,因此可以创建联系人。
更新联系人允许用户搜索联系人。
创建联系人将创建一个联系人,然后检查是否存在重复项(如果存在),然后允许您更新联系人而不是创建联系人。
循环引用为(创建联系人=>更新联系人=>搜索联系人=>创建联系人)。
该流程可能并不总是要求您输入每条信息,但是对话框需要在构造函数中添加对话框,以便在需要时可以调用“ BeginDialogAsync”。
任何有关如何管理此流程的帮助将不胜感激。
答案 0 :(得分:0)
我们找到了一种可能的解决方案,用于解决遇到此问题的其他任何人:
在SearchContactsDialog中,我们取代了ContinueDialogAsync:
public override Task<DialogTurnResult> ContinueDialogAsync(DialogContext outerDc, CancellationToken cancellationToken = default(CancellationToken))
{
if (_createAContactChoice.Synonyms.Select(s => s.ToLower()).Contains(outerDc.Context.Activity.Text?.ToLower()))
{
return outerDc.ReplaceDialogAsync(nameof(CreateContactDialog), null, cancellationToken);
}
return base.ContinueDialogAsync(outerDc, cancellationToken);
}
此语句基本上检查活动文本是否为“创建新联系人”或我们为该选项指定的内容,然后将现有对话框替换为CreateContactDialog。
这可行,但是在父对话框中,您需要包括CreateContactDialog以及“ SearchContactsDialog”。
这不是理想的选择,但是唯一可行的解决方案。