c# - 如何检查 Botframework 上的对话框堆栈

标签 c# botframework

我正在实现一个反馈对话框,并且希望使用 IScorable 从任何地方进入该对话框,并关闭“反馈”一词并将我的 FeedbackDialog 推送到堆栈。

我不希望在收集用户反馈时出现这种行为。有没有办法确定我的 FeedbackDialog 是否已经在堆栈上?那么我不会不小心双推它吗?

最佳答案

您可以像下面这样解析堆栈。首先,注册必要的模块:

private void RegisterTypes()
{
    var builder = new ContainerBuilder();
    builder.RegisterModule(new DialogModule());
    builder.RegisterModule(new ReflectionSurrogateModule());
    builder.RegisterModule(new DialogModule_MakeRoot());
    // necessary configurations
    // ...
}

之后,解析堆栈:

using (var scope = DialogModule.BeginLifetimeScope(Conversation.Container, activity))
{
    var stack = scope.Resolve<IDialogStack>();
}

stack.Frames中,您可以按堆栈对话框中的顺序找到对话框列表(stack.Frames[0]位于对话框的顶部)堆)。您可以使用 FrameTarget 属性查找对话框的名称,即 stack.Frames[0].Target。因此,您可以使用以下代码在堆栈中找到 FeedbackDialog(如果存在):

stack.Frames.Any(x=> x.Target.GetType().UnderlyingSystemType.Name == "FeedbackDialog")

关于c# - 如何检查 Botframework 上的对话框堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43416604/

相关文章:

c# - 表值参数不允许使用数据库名称

node.js - 重试提示自定义

c# - 如果我调用 Thread.Join() 是否需要 volatile?

c# - 如何在 Bot Framework (C# SDK) 中的单个 Luis 对话框中集成多个 Luis 语言模型

瀑布对话框内的 C# bot V4 文本提示

bots - 在 LUIS 中识别预建的 datetimeV2 实体

c# - 如何从 Microsoft Bot Framework 中的 PromptValidator 获取 stepContext?

c# - 无法加载文件或程序集 Microsoft.Win32.Primitives,版本 = 4.0.0.0

c# - 使用 Contains 的 .Where 子句的 Lambda 表达式

c# - 获取 Web 浏览器控件的屏幕截图?