如何检测 Botframework v4 中的对话结束?

2023-12-05

我试图在系统中的任何其他对话框完成后启动反馈对话框。我发现这个答案上面说要使用onEndDialog,但这不是 ActivityHandler 中的有效函数,只是onDialog。我的“主对话框”位于扩展 ActivityHandler 的 bot.js 中,这就是我不扩展 ComponentDialog 的原因。鉴于这是如何设置的,有没有办法确定对话何时结束?我尝试检查对话框堆栈onDialog,但它读取为没有来自用户的欢迎消息和初始消息的对话框,之后始终读取为正在运行的对话框。有没有办法修改我的函数/机器人处理程序来检测对话事件的结束?这是我尝试过的 onDialog 函数。

        this.onDialog(async (context, next) => {
            const currentDialog = await this.dialogState.get(context, {});
            if (currentDialog.dialogStack) {
                console.log('Dialog is running');
            } else {
                console.log('Dialog is not running');
            }

            // By calling next() you ensure that the next BotHandler is run.
            await next();
        });

我考虑过在每个对话框的末尾添加一个额外的步骤来调用反馈对话框(可能通过replaceDialog),但我不确定这是否是最佳实践。


这不能完全做到,因为endDialog不会冒泡到任何可以访问的东西ActivityHandler(据我所知)。

但对于解决方法来说,你已经很接近了!将其更改为如下所示:

this.onDialog(async (context, next) => {
    const currentDialog = await this.dialogState.get(context);
    if (currentDialog === undefined) {
        console.log('No dialogs started');
    } else if (currentDialog.dialogStack && currentDialog.dialogStack.length > 0) {
        console.log('Dialog is running');
    } else {
        console.log('Dialog is not running');
    }

    // By calling next() you ensure that the next BotHandler is run.
    await next();
});

你的不太有效只是因为currentDialog被设置为{}如果它不存在,这是真的,所以我们需要检查dialogStack中是否有任何东西currentDialog.dialogStack.length > 0.

currentDialog is undefined如果还没有开始对话,那么currentDialog === undefined or !currentDialog允许初始消息和欢迎消息。拥有这三个独立的分支应该可以让您处理每种情况。


关于“最佳实践”,我想说的是right如果您想在结束时获得反馈,请接近every对话。如果有any如果您不需要反馈,最好在相应对话框结束时调用反馈对话框。

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

如何检测 Botframework v4 中的对话结束? 的相关文章

  • Microsoft Teams:获取用户的时区?

    我正在为 MS Teams 开发一个机器人 我希望了解用户的时区 以便在适当的时间 例如 不是在半夜 传递消息 我没有在机器人框架 REST API 中找到合适的东西 虽然我们收到的消息包含 clientInfo country 属性 这是
  • 无法对已撤销的代理执行“设置”

    我对 JS Node js 很陌生 我遇到了机器人框架的问题 请帮助我解决这个问题 类型错误 无法在已撤销的代理上执行 设置 在 D Bot Archi bot src node modules botbuilder core lib tu
  • 下载在门户上创建的机器人会导致解决方案无效/无法运行

    我去 Azure 门户尝试了 Bot Framework 我按照步骤创建了一个Proactive bot 没有做任何改变 我去了Configure continuous integration并下载了 zip 文件 当我尝试在 Visual
  • 是否可以像来自用户一样向 Bot Framework 发送消息?

    我正在使用 Direct Line 3 0 和 Microsoft Bot Framework 并要求网页将一些表单字段发送到机器人 就像用户发送它们一样 例如 当用户按下 提交 时 电子邮件 电话等字段将被发送到机器人 就像用户这样发送它
  • Rest API附件错误

    我在使用机器人框架 REST API 通过 Skype 通道发送附件时遇到问题 我能够使用这样的 json 消息正确发送图像 type message timestamp 2017 05 22T11 31 36 2281894Z from
  • 简单对话框中的 Stackoverflow 异常

    您好 我在这两个对话框中收到 Stackoverflow 异常 Dialog A正在从主对话框类中调用 对话框A有一个选择去Dialog A child and Dialog A child有选择回去Dialog A 但它遇到了 Stack
  • BotFramework:“状态大小超出了配置的限制。”

    我正在开发一个机器人 每当我在表单流中 PostAsync 英雄卡 50 张英雄卡 时 最后它都会给我一条错误消息 状态大小超出了配置的限制 来自 Microsoft Bot Connector DLL 尝试 setPrivateConve
  • 微软机器人框架自行崩溃[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我收到这个令牌请求 error invalid request error description AADSTS90002 No
  • 我们可以让聊天机器人先说问候语,而不仅仅是作为反应吗

    我正在使用 Microsoftt Bot Framework 和 LUIS 认知服务开发聊天机器人 我想要一条初始欢迎消息 例如 你好 用户 你好吗 我的机器人一启动 在 MessageController 中可以做任何事情 public
  • MS Teams 客户端上内部托管的图像无法访问

    我们已经在我们的企业团队中启用了 Bot Framework 应用程序 并且我们想要使用AdaptiveCards向用户呈现丰富的内容 例如 我们正在发送AdaptiveImage包含指向企业形象店的url 示例代码 new Adaptiv
  • 如何在表单对话框中接收附件?

    我目前有一个机器人对话框 它请求并接收用户的附件 我想将其转换为表单对话框 因为我认为这更适合 请向我发送文档1 直到文档N 您能给我指出一个接收用户附件的表单对话框的示例吗 我读到 FormFlow 现在支持附件 https github
  • Bot Framework v4 中的等待方法

    在 Bot Framework 的版本 3 中 我可以调用卡片并等待用户的响应 context Call new MyHeroCardOptions MyResumeAfter Where 我的英雄卡选项是 HeroCard 类型的卡并且我
  • 尝试使用锐利的 Node.js 调整流图像的大小

    我正在尝试使用锐利功能调整从用户到服务器的输入流图像的宽度和高度 但图像没有任何反应 它保持原来的大小 我应该如何使用锐化功能 以便我可以使图像变小或变大 请帮我 这就是我的代码的样子 use strict const builder re
  • 更改 botframework Formflow 中的确认选项

    我在 botframework 中创建了一个表单流 我想更改确认选项 默认情况下需要 是 和 否 但我希望它继续进行 而不是 是 即使用户输入 确定 是 是 等 我如何添加确认选项 您需要将新条款添加到YesFormBuilder 配置的数
  • 从 MS Graph API 获取联系人时找不到资源

    我尝试了下面的 github 示例进行 Azure AD 身份验证 并成功通过正确的回调 URL 获取访问令牌 https github com Microsoft BotBuilder Samples tree master sample
  • 如何在 Microsoft bot 框架中仅使用图像的 base64 编码字符串显示图像?

    我尝试了下面的代码 这是我在模拟器中得到的输出 message Attachments Add new Attachment ContentUrl data image jpeg base64 xxxx 数据 uri 图像似乎有最大大小 但
  • Compose 扩展抛出错误:找不到 V3 代理

    我是在 Teams 中创建 Compose 扩展的新手 当我将其添加到我的 Teams 时遇到问题 所有配置均已就位 从注册机器人到将其托管为 Azure 上的机器人服务 再到处理代码中的撰写扩展查询 我已在清单中共享了机器人 ID 并为机
  • 在一定时间后取消提示或对话框 - Bot Framework

    我有一个关于如果在一定时间内用户没有输入则取消提示或对话框的问题 我需要一种方法来在提示内暂停 Example 机器人提示用户 你多大了 机器人现在等待用户的响应 但用户从未响应 机器人仍在等待 在我的例子中 机器人应该只等待 20 秒 然
  • 将模型和订阅密钥传递给 LuisDialog,而不是通过属性

    我正在编写一个可以说两种语言的机器人 因此 我需要使用两个单独的 LUIS 应用程序 每种语言一个 Bot Framework 中的 LuisDialog 是这样初始化的 来自 Microsoft 的示例 LuisModel c413b2e
  • 具有多选选项的聊天机器人

    我们有一个聊天机器人 它根据以按钮形式提供的相关查询与用户进行交互 但这里的问题是他只能通过按钮选择一个查询 所以我想要一种用户可以从下拉列表或复选框中选择多个查询的方法 搜索后我发现了这个链接 允许用户在 BotFramework 中多重

随机推荐