在 Teams 平台上更新 BotFramework v4 中的活动

2023-12-02

我有一个使用 NodeJS 使用 Bot Framework v4 开发的机器人,并部署在 Teams 中的多个渠道上。有没有办法更新机器人发送的消息?我尝试在 BotFrameworkAdapter 中实现 updateActivity() 函数。但是,它不会更新活动。

enter image description here

我已将这张卡从机器人发送到 Teams 频道。当有人点击按钮时,有没有办法更新卡片或消息(禁用按钮)?


关键是确保当您使用updateActivity(),您使用由 Teams 频道创建的正确活动 ID。您还需要确保更新的活动获取所有 Teams 数据集。

In onTurn,捕获传出活动,以便您可以轻松保存所有必要的 Teams 渠道数据:

public onTurn = async (turnContext: TurnContext) => {

    turnContext.onSendActivities(async (ctx, activities, nextSend) => {
        activities.forEach(async (activity) => {
            if (activity.channelData.saveMe) {
                this.savedActivity = activity;
            }
        });
        return await nextSend();
    });
  • 注意:可能还有另一种方法可以做到这一点。我发现这是最简单的,因为您需要保存所有channelData, conversation信息,以及activity.id, 最低限度
  • 如何存储该活动以供以后使用取决于您。如果将其存储在构造函数中,它将在每条消息上重新实例化(C# SDK),或者任何用户都可以更改它(JS SDK)。你可能会考虑编写自定义存储.
  • 活动保留所有通道数据。通过指定 saveMe 标志,我们确保保存正确的活动

实例化一些关键变量:

const teamsChannel = '19:[email protected]';
const serviceUrl = 'https://smba.trafficmanager.net/amer/';
  • 注意:获取这些变量的最简单方法是将消息从 Teams 发送到机器人,同时在传入消息上设置断点activity
  • serviceUrl可能因地理区域而异

发送第一个活动并存储 ID:

// This ensures that your bot can send to Teams
turnContext.activity.conversation.id = teamsChannel;
turnContext.activity.serviceUrl = serviceUrl;
MicrosoftAppCredentials.trustServiceUrl(serviceUrl);

// Add the saveMe flag
yourActivity.channelData = { saveMe: true };

const response = await turnContext.sendActivity(yourActivity);
this.activityToUpdateId = response.id;
  • 如何存储该 ID 以供以后使用取决于您。如果将其存储在构造函数中,它将在每条消息上重新实例化(C# SDK),或者任何用户都可以更改它(JS SDK)。你可能会考虑编写自定义存储.

更新您保存的活动:

// New data
const card2 = CardFactory.adaptiveCard(adaptiveCard2);

// Set the saved activity.id and new activity data (an adaptiveCard, in this example)
this.savedActivity.id = this.activityToUpdateId;
this.savedActivity.attachments = [card2];

发送更新:

await turnContext.updateActivity(this.savedActivity);
  • 注意:您可以使用任何内容更新活动。我更换了完全不同的自适应卡

Before:

enter image description here

After:

enter image description here

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

在 Teams 平台上更新 BotFramework v4 中的活动 的相关文章

随机推荐

  • Management Studio 和 TableAdapter 之间存储过程的执行时间差异很大

    对于相同的输入 存储过程如何通过 Management Studio 在 10 秒内运行 但通过 TableAdapter 需要 15 分钟 它是可重复的 这意味着我在每个环境中至少运行了 3 次 并且 Management Studio
  • Java Netty负载测试问题

    我使用文本协议编写了 接受连接和轰炸消息 100 字节 的服务器 并且我的实现能够使用第 3 方客户端发送大约 400K 秒的环回消息 我为这项任务选择了 Netty SUSE 11 RealTime JRockit RTS 但是当我开始基
  • 计算数组中的个数

    我试图在 Verilog 中计算 4 位二进制数中 1 的数量 但我的输出是意外的 我尝试了几种方法 这是我认为应该有效的方法 但事实并非如此 module ones one in input 3 0 in output 1 0 one a
  • 如何在数据库优先方法中进行迁移

    我正在使用实体框架数据库优先方法 并想知道如何管理数据库优先方法中的迁移 我们正在手动更改数据库架构 实体框架有什么方法可以将更改相应地应用到项目中 我想我首先对代码感到困惑existing database and database fi
  • 相当于 Android Studio 中的 Clean & build?

    今天 当从 Android Studio 运行应用程序时 它不是根据我的最新代码构建的 我找了一个清洁和构建选项 但我找不到 所以我的问题是 Android Studio 相当于什么清洁和构建 Android studio是基于Intell
  • 使用远程 FTP 原子包和私钥发出与服务器的连接

    我正在尝试使用原子包 Remote FTP 并使用私钥连接到我的服务器 我在服务器上设置了 SSH 密钥 并且可以使用 putty 成功连接 私钥保存在我的项目文件夹中 并且我有一个现有的 ftpconfig 文件 没有私钥 当我替换文件内
  • 在两个 ggplot 直方图上显示平均值和中位数

    我是新的 stackoverflow 用户 目前无法对原始帖子发表评论来提问 我发现了以前的 stackoverflow 答案 https stackoverflow com a 34045068 11799491 我想知道如何在此图表中添
  • 的巨大高度值不会阻止截断

    我正在尝试申请
  • 检测拨出电话,使用真实设备发出问题

    我有一个奇怪的问题 为了检测拨出电话 我注册了一个广播接收器android intent action PHONE STATE 当状态变为摘机时 则开始通话 它似乎在模拟器上工作 调试器实际上达到了一些代码 但它在真实设备 Acer Liq
  • 程序集 8086 光标放置

    我想将光标放在 论文 之后 等待输入 ENTER 然后将其放在 作者 之后 这两个句子都是打印的已定义变量 insert db Insert new paper 0 0Ah 0Ah 0Ah 0Dh inserttitle db Title
  • AWS代码管道错误致命错误:接近堆限制的无效标记压缩分配失败-JavaScript堆内存不足

    我有在 aws 代码管道上运行的角度应用程序 突然它开始抛出此错误 我做了很多这样的事情 包括 node max old space size 8192 等 但没有任何方法可以解决此错误 有人可以帮我解决这个问题吗 To disable t
  • Selenium Python 在 HTTPS 网站上验证浏览器登录 pupup 对话框

    Folks 我正在开发一个每天运行一次的抓取脚本 我需要重新验证我的帐户 首先我必须登录 然后只有我才能看到该页面 就像正常的页面登录和废弃一样 这不起作用 阅读文章并按照大多数博客和论坛的建议使用下面的代码 这仍然不起作用 It s an
  • 缺少 OpenMP 功能:线程优先级

    任何人都想想吧 OpenMP 具有调整 CPU 能力来处理哑铃的功能 在我对 openmp 的研究中 我们无法设置线程优先级来以强大的力量执行块代码 5 只有一种方法 beginthreadex 或带参数的 CreateThread 函数
  • 如何在javascript中将嵌套集合转换为嵌套数组?

    有以下数据 no 1 name ELECTRONICS depth 0 no 2 name TELEVISIONS depth 1 no 3 name TUBE depth 2 no 4 name LCD depth 2 no 5 name
  • 尝试获取 singleValueExtendedProperties 时收到 400 和 500

    尝试向日历对象添加扩展属性 我可以使用以下有效负载创建日历 Ruby 语法 有效负载以 JSON 形式发送 name build calendar name singleValueExtendedProperties id String S
  • 如何使用 viewmodel 单例进行活动?

    MyApp需要在整个上下文中保存一个User对象 A B C活动的xml使用这个User对象 当A编辑User时 我想要B和C通知Change 如何使用数据绑定 livedata和viewModel处理这个问题 以前我让User class
  • Python Selenium 更改文本大小(缩放?设置?...)

    我有一个网页 我需要先截屏 然后使用 OCR 解析出里面的文本 如果放大 Mac command OCR 的性能会显着提高 所以我想知道如何在Python中使用selenium来放大 缩小 有一个类似的post但他们只有Java和C 的实现
  • 在 colorbox 中的图像下方添加 div

    使用 PHP 和 jQuery 目前使用 Colorbox 显示图像幻灯片 我想在每个图像下方包含一个 DIV 当每个图像显示新内容时会更新 可用于展示相关内容 评论功能等 四处研究但尚未找到任何答案 有人以前这样做过或有任何线索吗 我想我
  • 检测应用程序是否从应用程序“外部”启动/恢复

    我目前正在为应用程序构思一项功能 我希望有一种通用方法 方法来检测应用程序本身是否已从 启动或恢复outside 该应用程序 Outside 在这种情况下 意味着 应用程序由启动器图标启动 恢复 通过按导航栏 按键上的 应用程序按钮 来启动
  • 在 Teams 平台上更新 BotFramework v4 中的活动

    我有一个使用 NodeJS 使用 Bot Framework v4 开发的机器人 并部署在 Teams 中的多个渠道上 有没有办法更新机器人发送的消息 我尝试在 BotFrameworkAdapter 中实现 updateActivity