Bot Framework v4圆形对话框参考

时间:2018-12-03 17:24:20

标签: c# botframework

使用Microsoft Bot Framework v4,我有3个创建循环的对话框。当我按如下所示实现它们时,由于Bot Framework v4要求您初始化构造函数中的每个对话框,因此Bot会出错并出现堆栈溢出异常。我想知道是否有人用这种流程创建了一个机器人,而没有例外。

这是3个对话框:创建联系人,更新联系人并搜索联系人。

  1. 搜索联系人可能找不到联系人,因此可以创建联系人。

  2. 更新联系人允许用户搜索联系人。

  3. 创建联系人将创建一个联系人,然后检查是否存在重复项(如果存在),然后允许您更新联系人而不是创建联系人。

循环引用为(创建联系人=>更新联系人=>搜索联系人=>创建联系人)。

该流程可能并不总是要求您输入每条信息,但是对话框需要在构造函数中添加对话框,以便在需要时可以调用“ BeginDialogAsync”。

任何有关如何管理此流程的帮助将不胜感激。

1 个答案:

答案 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”。

这不是理想的选择,但是唯一可行的解​​决方案。