Botframework v4:Stepcontext 选项

2024-01-15

您好,有人可以解释一下如何使用瀑布stepcontext.Option吗? 我一直在示例中看到它,但我不太明白如何使用它。 以下是来自的示例 and .

我计划重构我的整个代码,并且如果可能的话希望使用此选项。感谢!

private static async Task<DialogTurnResult> TableStepAsync(
    WaterfallStepContext step,
    CancellationToken cancellationToken = default(CancellationToken))
{
    string greeting = step.Options is GuestInfo guest
            && !string.IsNullOrWhiteSpace(guest?.Name)
            ? $"Welcome {guest.Name}" : "Welcome";

    string prompt = $"{greeting}, How many diners will be at your table?";
    string[] choices = new string[] { "1", "2", "3", "4", "5", "6" };
    return await step.PromptAsync(
        TablePrompt,
        new PromptOptions
        {
            Prompt = MessageFactory.Text(prompt),
            Choices = ChoiceFactory.ToChoices(choices),
        },
        cancellationToken);
}

and

    private async Task<DialogTurnResult> SelectionStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
    // Continue using the same selection list, if any, from the previous iteration of this dialog.
    List<string> list = stepContext.Options as List<string> ?? new List<string>();
    stepContext.Values[CompaniesSelected] = list;

    // Create a prompt message.
    string message;
    if (list.Count is 0)
    {
        message = $"Please choose a company to review, or `{DoneOption}` to finish.";
    }
    else
    {
        message = $"You have selected **{list[0]}**. You can review an additional company, " +
            $"or choose `{DoneOption}` to finish.";
    }

    // Create the list of options to choose from.
    List<string> options = _companyOptions.ToList();
    options.Add(DoneOption);
    if (list.Count > 0)
    {
        options.Remove(list[0]);
    }

    // Prompt the user for a choice.
    return await stepContext.PromptAsync(
        SelectionPrompt,
        new PromptOptions
        {
            Prompt = MessageFactory.Text(message),
            RetryPrompt = MessageFactory.Text("Please choose an option from the list."),
            Choices = ChoiceFactory.ToChoices(options),
        },
        cancellationToken);
}

如果可能的话,我还想学习如何在本示例中像这样传递和获取值

    private static async Task<DialogTurnResult> RoomStepAsync(
    WaterfallStepContext step,
    CancellationToken cancellationToken = default(CancellationToken))
{
    // Save the name and prompt for the room number.
    string name = step.Result as string;
    ((GuestInfo)step.Values[GuestKey]).Name = name;
    return await step.PromptAsync(
        TextPrompt,
        new PromptOptions
        {
            Prompt = MessageFactory.Text($"Hi {name}. What room will you be staying in?"),
        },
        cancellationToken);
}

private static async Task<DialogTurnResult> FinalStepAsync(
    WaterfallStepContext step,
    CancellationToken cancellationToken = default(CancellationToken))
{
    // Save the room number and "sign off".
    string room = step.Result as string;
    ((GuestInfo)step.Values[GuestKey]).Room = room;

    await step.Context.SendActivityAsync(
        "Great, enjoy your stay!",
        cancellationToken: cancellationToken);

    // End the dialog, returning the guest info.
    return await step.EndDialogAsync(
        (GuestInfo)step.Values[GuestKey],
        cancellationToken);
}

}

现在这就是我保存值的方式。

var userstate = await (stepContext.Context.TurnState["BasicAccessors"] as BasicAccessors).BasicUserStateAccessor.GetAsync(stepContext.Context);
userstate.Name = value;

你到底想做什么? stepContext.Options 是一个可以在使用 BeginDialog 或 ReplaceDialog 调用 Dialog 时发送的对象。 例如:

await BeginDialogAsync(dialogId, sendobject, cancellationToken)

stepContext.Options是您通过调用的对话框接收该对象的方式。

例如,在第一个文档中,主对话框正在调用每个子对话框并向它们发送 userInfo.Guest 对象:

return await stepContext.BeginDialogAsync(TableDialogId, userInfo.Guest, cancellationToken);

被调用的对话框正在接收它并将其转换为字符串作为验证:

string greeting = step.Options is GuestInfo guest
            && !string.IsNullOrWhiteSpace(guest?.Name)
            ? $"Welcome {guest.Name}" : "Welcome";

您可以去掉验证,它看起来像这样,记住这只有在发送的对象(userInfo.Guest)不为空并且可以转换为字符串时才有效:

string greeting = (string)step.Options;

请记住: 步骤Context.Options;是一个对象,需要转换为正确的类型。 如果您不添加空/类型验证,则转换可能会失败并且您的机器人可能会崩溃。 这是框架的一项功能,但机器人不需要工作,您可以使用其他方式通过方法或类发送对象。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Botframework v4:Stepcontext 选项 的相关文章

  • 是否需要销毁运算符删除的形式才能真正销毁对象?

    C 20 添加了破坏形式operator delete区别于std destroying delete t范围 它导致delete表达式在调用之前不再销毁对象operator delete 目的是在显式调用对象的析构函数和释放内存之前 允许
  • 如何使用 openSSL 函数验证 PEM 证书的密钥长度

    如何验证以这种方式生成的 PEM 证书的密钥长度 openssl genrsa des3 out server key 1024 openssl req new key server key out server csr cp server
  • 为什么 C 程序使用 Scanf 给出奇怪的输出?

    我目前正在学习 C 编程 并且遇到了这个奇怪的输出 Program will try functionalities of the scanf function include
  • C# 中的 Stack<> 实现

    我最近一直在实现递归目录搜索实现 并且使用堆栈来跟踪路径元素 当我使用 string Join 连接路径元素时 我发现它们被颠倒了 当我调试该方法时 我查看了堆栈 发现堆栈内部数组中的元素本身是相反的 即最近 Push 的元素位于内部数组的
  • 在 C 语言中,为什么数组的地址等于它的值?

    在下面的代码中 指针值和指针地址与预期不同 但数组值和地址则不然 怎么会这样 Output my array 0022FF00 my array 0022FF00 pointer to array 0022FF00 pointer to a
  • 如何在 C# 中将 Json 转换为对象

    我想将 Json 转换为 C 中的对象 这里的 Json 是 值 e920ce0f e3f5 4c6f 8e3d d2fbc51990e4 如何使用 Object 问题看似愚蠢 但其实并不那么愚蠢 我没有简单的 Json 我有 IEnume
  • 使用 C# 和 ASP.NET 在电子邮件附件中发送 SQL 报告

    我正在尝试使用 ASP NET 和 C 从 sql reportserver 2008 作为电子邮件附件发送报告 到目前为止我学会了如何获取 PDF 格式的报告 http weblogs asp net srkirkland archive
  • 如何向 Mono.ZeroConf 注册服务?

    我正在尝试测试 ZeroConf 示例http www mono project com Mono Zeroconf http www mono project com Mono Zeroconf 我正在运行 OpenSuse 11 和 M
  • Android NDK 代码中的 SIGILL

    我在市场上有一个 NDK 应用程序 并获得了有关以下内容的本机崩溃报告 SIGILL信号 我使用 Google Breakpad 生成本机崩溃报告 以下是详细信息 我的应用程序是为armeabi v7a with霓虹灯支持 它在 NVIDI
  • Libev,如何将参数传递给相关回调

    我陷入了 libev 中争论的境地 通常 libev 在类似的函数中接收包 接收回调 没关系 但是实际操作中 我们需要派遣一个亲戚 写回调 根据收到的包裹处理具体工作 例如 S RECV MSG pstRecvMsg S RECV MSG
  • 保证复制省略是否适用于函数参数?

    如果我理解正确的话 从 C 17 开始 这段代码现在要求不进行任何复制 Foo myfunc void return Foo auto foo myfunc no copy 函数参数也是如此吗 下面的代码中的副本会被优化掉吗 Foo myf
  • LinkLabel 无下划线 - Compact Framework

    我正在使用 Microsoft Compact Framework 开发 Windows CE 应用程序 我必须使用 LinkLabel 它必须是白色且没有下划线 因此 在设计器中 我将字体颜色修改为白色 并在字体对话框中取消选中 下划线
  • 在 azure blob 存储中就地创建 zip 文件

    我将文件存储在 Blob 存储帐户内的一个容器中 我需要在第二个容器中创建一个 zip 文件 其中包含第一个容器中的文件 我有一个使用辅助角色和 DotNetZip 工作的解决方案 但由于 zip 文件的大小最终可能达到 1GB 我担心在进
  • SQLAPI++ 的免费替代品? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何免费 也许是开源 的替代品SQLAPI http www sqlapi com 这个库看起来
  • Unity3D - 将 UI 对象移动到屏幕中心,同时保持其父子关系

    我有一个 UI 图像 它的父级是 RectTransform 容器 该容器的父级是 UI 面板 而 UI 面板的父级是 Canvas 我希望能够将此 UI 图像移动到屏幕中心 即画布 同时保留父级层次结构 我的目标是将 UI 图像从中心动画
  • 如何高效计算连续数的数字积?

    我正在尝试计算数字序列中每个数字的数字乘积 例如 21 22 23 98 99 将会 2 4 6 72 81 为了降低复杂性 我只会考虑 连续的数字 http simple wikipedia org wiki Consecutive in
  • Streamwriter 覆盖 txt 文件中的文本

    有没有什么方法可以重新打开流写入器而不创建新的写入对象 因为此时 当调用 WriteOdd 时 streamwriter 正在覆盖在它之前调用的 WriteEven public void WriteEven StreamWriter wr
  • 如果将变量设置为等于新对象,旧对象会发生什么?

    假设我们有一个 X 类not有一个超载的operator 功能 class X int n X n 0 X int n n n int main X a 1 an object gets constructed here more code
  • 声明一个负长度的数组

    当创建负长度数组时 C 中会发生什么 例如 int n 35 int testArray n for int i 0 i lt 10 i testArray i i 1 这段代码将编译 并且启用 Wall 时不会出现警告 并且似乎您可以分配
  • ContentDialog Windows 10 Mobile XAML - 全屏 - 填充

    我在项目中放置了一个 ContentDialog 用于 Windows 10 上的登录弹出窗口 当我在移动设备上运行此项目时 ContentDialog 未全屏显示 并且该元素周围有最小的填充 在键盘上可见 例如在焦点元素文本框上 键盘和内

随机推荐

  • 如何在 SwiftUI 中使列表反转

    我是 SwiftUI 的新手 正在尝试制作类似的东西reverse在安卓中LinearLayoutManager messagesRecyclerView view findViewById R id messagesRecyclerVie
  • 如何确定 QTextDocument 的高度?

    给定一个特定的宽度 我想找出一个的高度QTextDocument 换句话说 如果QTextEdit其中包含QTextDocument is w宽 最小高度是多少h为了完全显示文档而不需要滚动条 将 QTextDocument 对象的宽度设置
  • log4net - 想要为每个Web应用程序用户创建一个日志文件[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我们在 Asp Net Web 应用程序中使用 log4net 替换 nLog nLog 有一个有用的功能 允许我们为每个用户创建一个
  • 定位上下文菜单

    我正在尝试使用 jQuery 定位自定义上下文菜单 第一次它出现在正确的位置 鼠标坐标 但随后当前位置与新位置相加 以便菜单从屏幕上消失 这是 JavaScript
  • Div 100% 高度,内嵌显示

    我需要有 2 列divs 右栏将有一个随机内容 可能有 1 行或 100 行 我想在没有 JavaScript 的情况下跟随右列的高度 我正在尝试这个 div div style display inline block width 30
  • 为 python 2.7 安装 scipy

    我似乎无法让 SciPy 在 32 位 Windows XP 平台上为 Python 2 7 工作 我宁愿不构建自己的副本 有谁知道我在哪里可以找到它的安装程序 我试过这个site http www lfd uci edu gohlke p
  • 方括号在 SQL 查询中有效吗?

    我正在看某人写给我的一张便条 它看起来像这样 SELECT Something FROM Foobar WHERE blah blah pulls this too SELECT Something FROM Foobar WHERE so
  • 如何确定时钟的秒针是否位于较大区域或较小区域[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我得到的时间格式如下 hh mm ss 我必须找出在给定的时间内 秒针是否位于时针和分针形成的较大或较小的区域中 我知道
  • 如何从 C 中的浮点数中提取有偏差的指数?

    我在从浮点数中查找有偏差的指数时遇到问题 我不明白为什么我为参数输入的任何数字都返回 0 这是我的代码 iFloat t floatGetExp iFloat t x return x gt gt 23 0x7f800000 浮点数的指数是
  • numpy einsum() 可以执行外加法吗?

    在numpy中 我们可以在两个向量之间执行 外加法 a and b像这样 a np c 1 2 3 b np c 4 5 6 result a b T alternatively this can be a T b 是否可以使用einsum
  • 如何使用预处理器指令区分编译器的版本

    有没有办法区分使用预处理器指令的编译器版本 我在使用新的 Roslyn 编译器时遇到了问题 它生成的代码与旧编译器不同 我需要保持代码与使用 Visual Studio 2013 和 2015 的团队兼容 None
  • 从角度工厂中的 $resource 响应获取数据

    我有这个工厂 factory Member function resource var endpoint http some valid url function generateMemberToken id1 id2 return res
  • 有没有一种简单的方法可以在文本框中进行单击并拖动滚动?

    我有一个 divoverflow auto和滚动条 我希望能够拖动内容进行滚动 我不需要能够选择文本 是否有捷径可寻 一个 jQuery 插件会很好 否则普通的 JavaScript 就可以了 看来我自己说得还不够清楚 有一个具有固定高度的
  • 检查 API 是否受到监控(挂钩?)

    我的应用程序使用一些 API 例如GetProcAddress and CreateProcess这有时会导致防病毒软件将其标记为恶意软件 即使它不是恶意软件 我想做的是检查特定的 API 是否正在被监视或挂钩 如果是 那么我不会调用该部分
  • 远程登录亚马逊(KDP)

    我想自动化 KDP Kindle 桌面出版 的摘要 由于他们似乎没有任何电子邮件通知系统 至少我不知道 我需要通过curl 登录 但这让我发疯 我在用着简单的htmldom http simplehtmldom sourceforge ne
  • 从 .fits 文件构造 pandas 数据框

    我有一个包含数据的 fits 文件 我想从这个特定文件构建一个 pandas 数据框 但我不知道该怎么做 data fits open datafile data info gives No Name Type Cards Dimensio
  • 使用 h5py 压缩现有文件

    我目前正在开展一个有关 HDF5 数据集压缩的项目 最近开始使用 h5py 我遵循了基本教程 并且能够在创建文件时打开 创建和压缩文件 然而 在压缩现有文件时我一直不成功 这是我工作的目的 我尝试使用 r 打开文件 然后压缩分块数据集 但文
  • 使用 Atmosphere 仅向一位客户端广播

    如何使用 Atmosphere Meteor 将消息从一个客户端广播到另一个客户端 我目前有一个基于 Meteor 教程的实现 Override public void doGet HttpServletRequest req HttpSe
  • 允许进程自动继续的消息框

    我希望显示一个消息框 并且程序继续运行 而不是等待我在此消息框中单击 确定 能做到吗 else Debug or messagebox the line that fails MessageBox Show Cols columns Len
  • Botframework v4:Stepcontext 选项

    您好 有人可以解释一下如何使用瀑布stepcontext Option吗 我一直在示例中看到它 但我不太明白如何使用它 以下是来自的示例 and 我计划重构我的整个代码 并且如果可能的话希望使用此选项 感谢 private static a