【问题标题】:Bot framework v4 circular dialog referenceBot framework v4 循环对话框参考
【发布时间】:2018-12-04 06:37:40
【问题描述】:

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

这里有 3 个对话框:创建联系人、更新联系人和搜索联系人。

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

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

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

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

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

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

【问题讨论】:

  • 嗨,内特,欢迎来到 SO!请澄清您的具体问题或添加其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。请参阅How to Ask 页面以获得澄清此问题的帮助。
  • 感谢您的输入,我想知道如何在 bot 框架中创建循环引用,如图所示而不会出错。

标签: c# botframework


【解决方案1】:

我们为遇到此问题的其他人找到了一种可能的解决方案:

在 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”。

这并不理想,但我们可以得到的唯一解决方案。

【讨论】:

    猜你喜欢
    • 2019-07-27
    • 2017-03-03
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 2017-04-27
    • 2016-10-30
    • 1970-01-01
    相关资源
    最近更新 更多