资讯动态

Rocket.Chat Apps-Engine 演进指南:从 1.47 到 1.65 的关键特性、修复与运行时架构变化

发布时间:2026/9/9 20:36:20 来源:尧图企业网站定制
Rocket.Chat Apps-Engine 演进指南从 1.47 到 1.65 的关键特性、修复与运行时架构变化【免费下载链接】Rocket.ChatThe Secure CommsOS™ for mission-critical operations项目地址: https://gitcode.com/GitHub_Trending/ro/Rocket.Chatrocket.chat/apps-engine是 Rocket.Chat 官方应用开发运行时与类型定义包负责承载第三方 App 在 Rocket.Chat 内的安装、运行、事件分发与跨进程桥接。CHANGELOG本文唯一主体文档完整记录了该包自 1.47.0 至 1.65.1 共二十余个版本的演进轨迹。本文以该 CHANGELOG 为骨架按联邦化、全渠道Omnichannel、访问控制ABAC、运行时可靠性、日志与可观测性等主题重排全部条目并对照仓库源码说明底层实现帮助 App 开发者与运维人员快速判断某个版本能力是否落地、某个已知问题在哪个版本被修复以及这些变化背后真实的代码形态。一、版本谱系概览该 CHANGELOG 覆盖的发布序列如下其中每个版本都遵循“正式版 -rc.0/-rc.1预发布版”双轨模式且多数修复会先出现在 rc 版本中版本关键主题1.65.1修正 IUser 上的 FederationLookup 类型#413041.64.x为 room / user 对象暴露isFederated与federation字段#407911.63.0清理运行时不可访问文件、允许读取房间 ABAC 属性、按 SIP 分机查用户1.62.0Livechat 访客externalIds、语音通话状态 API、安全热修复1.61.x移除 UiKit 弃用项、ESLint 升级、安全热修复1.60.0多附件消息的文件元数据、嵌套请求日志丢失修复、动态路径 API 修复1.59.x多房间批量查询、移除已弃用 VoIP、私有频道/团队 ABAC、IPreFileUpload内存尖峰修复1.58.0getUserRoomIds转正为稳定桥、用户 bio 修复、debug 日志深度修复、ping 空闲化1.57.x实验性“用户所在房间 ID”API、更新策略防脏写1.56.0Omnichannel Outbound Message、node:原生模块、斜杠命令上报行为1.55.xOutbound 端点、ES2017 语法兼容、启动崩溃修复1.54.0Outbound 通信端点、日志导出按钮、运行时构造失败恢复1.53.x禁用 App 的按钮隐藏、错误对象序列化修复1.52.0/api/apps/logs与日志过滤、移除内部包依赖1.51.0部门状态变更事件、select 设置动态增删选项1.50.0executeLivechatRoomCreatePrevent钩子、getStatus调用削减、错误传播修复1.49.0IPostSystemMessageSent事件、线程过滤、隐藏设置访问1.48.xOmnichannel 联系人档案、运行时超时可配置、子进程防崩溃、重启机制大量修复1.47.0License 附加项交互、Deno 子进程引用、私有 App 更新行为修复二、联邦化Federation能力补全版本 1.64.0PR #40791是联邦化支持的分水岭它为 App 可见的 room 与 user 对象同时新增了两个字段——isFederated与federation。这一改动让 App 首次能够在代码中直接判断目标对象是否来自联邦如 Matrix外部实例从而决定是否执行跨域逻辑。源码层面的落点清晰可见IRoom.ts 中声明了可选的isFederated?: boolean与federation?: FederationLookupIUser.ts 中声明了isFederated?: boolean与federation?: FederationUserLookup。随后 1.64.1 与 1.65.1 连续两个 PatchPR #41304修复了一个容易被忽视的类型一致性问题IUser上错误地被赋予了FederationLookup面向房间的查询类型而实际返回的数据是面向用户的联邦信息。修复后类型与真实数据才保持一致。类型定义本身位于 definition/federation其中 FederationLookup.ts 与 FederationUserLookup.ts 分别承担房间与用户两个维度。对开发者而言这意味着使用 1.64.0 以上版本 SDK 时如果代码中通过user.federation访问跨域数据应确认所引用的编译产物已升级到 1.64.1/1.65.1避免出现“类型声明与运行时字段错位”的编译期假象。三、运行时事件与钩子Events Hooks的扩展Apps-Engine 通过“事件接口 AppMethod 枚举”把生命周期钩子暴露给 App。AppMethod.ts 汇总了全部可被引擎调用的事件方法名本版本区间内新增/修复了多个事件点IPostSystemMessageSent1.49.0PR #35177新增“系统消息发送后”事件。所谓系统消息指不是由用户发出、而是由系统自身生成的消息如成员加入、设置变更等系统通知。接口定义位于 IPostSystemMessageSent.ts回调签名executePostSystemMessageSent(message, read, http, persistence, modify)在消息已分发给其他客户端之后被调用适合做审计、外部同步等后置处理。executeLivechatRoomCreatePrevent1.50.0PR #35486新增用于“阻止 Livechat 会话创建”的钩子使 App 能够在全渠道会话真正落库之前介入拦截。IPreRoomCreateModify持久化修复1.50.0PR #35342修复了在IPreRoomCreateModify钩子中对即将创建房间所做的修改无法被持久化的问题。IPreFileUpload内存尖峰修复1.59.1PR #38068当 App 处理文件上传前事件时引擎不再一次性把整个大文件载入内存消除了内存尖峰。事件超时策略变更1.48.0PR #33690此前Pre前缀事件被硬编码为 1 秒超时现改为遵循全局运行时超时配置见下文“运行时超时”让拦截类钩子拥有更充裕的执行时间。禁用 App 的按钮不再显示1.53.0PR #36169修复了 App 已被禁用但其注册的 action 按钮仍出现在消息/界面中的问题。四、访问控制面向私有频道与私有团队的 ABAC本区间内访问控制能力从“基于角色的粗粒度授权”细化到“属性级”。1.59.0PR #37091为私有频道与私有团队引入 Attribute Based Access ControlABAC。1.63.0PR #40463进一步允许拥有相应权限的 App 读取房间的 ABAC 属性。在仓库中可以找到属性定义的底层契约应用侧只需声明“键 值列表”属性本身的校验与执行发生在宿主侧。例如 AbacAttributes.ts 定义的IAbacAttributeDefinitionkey: string; values: string[]明确标注“校验不在本接口内强制执行须由调用方依据/^[A-Za-z0-9_-]$/规则约束”。实现侧Rocket.Chat 在 ee/packages/abac 下提供了独立的rocket.chat/abac能力包docs 目录中保留了对应用开发场景的说明。因此需要按房间属性而非仅角色做数据过滤的 App在升级到 1.59.0 之后即可依赖宿主侧的 ABAC 判定。五、全渠道Omnichannel与业务触点演进全渠道是本阶段功能增量最密集的领域涉及会话、访客、部门与外呼Omnichannel 联系人档案体系1.48.0PR #32727一次引入多项大型能力——全新的联系人档案页、仅与已知联系人通信、仅与已验证联系人通信、跨渠道合并已验证联系人、封锁联系人渠道、跨渠道注册冲突的联系人信息消解以及高级联系人中心过滤器。这些能力的出现也催生了后续几个版本的 Outbound 与外呼端点。Outbound Message 与外呼端点1.56.0PR #36207正式引入 Outbound Message 特性允许组织从 Rocket.Chat 直接经由客户偏好的消息渠道主动发起会话1.55.0PR #36553新增端点让坐席通过已注册的 App 服务商发送外呼消息1.54.0PR #36377补充一批用于外呼通信的 API 端点。应用侧可在 definition/outboundCommunication 中看到面向外呼的数据契约。Livechat 访客外部标识1.62.0PR #39535为 Livechat 访客对象新增externalIds字段用于对接外部平台的访客身份方便与 CRM/客服系统的外部实体建立映射。部门状态变更事件1.51.0PR #35280允许 App 对全渠道部门的状态变更做出反应配合 AppInterface 中的事件声明。语音 / 电话能力1.62.0PR #40093新增从服务器加载用户当前语音通话状态的 API 端点1.63.0PR #40604允许 App 通过用户的 SIP 分机号反查用户。底层能力在访问器层即可见——IUserRead.ts 的getBySipExtension(extension)返回PromiseIUser | undefined而 IUser.ts 上也已存在可选的sipExtension?: string字段。注意 1.59.0PR #37672已从代码中移除已弃用的全渠道 VoIP相关业务应迁移到上述新版语音 API 之上。六、访问器Accessor与消息 API 的能力扩展App 通过read/modify等访问器与宿主交互本区间内几处 API 变化值得关注getUserRoomIds转正1.58.0PR #37547此前 1.57.0PR #37057先以实验性 API 形式暴露“获取某用户所属全部房间 ID”的能力1.58.0 将其从 experimental bridge 正式毕业到稳定的UserRead访问器实现位于 IUserRead.ts。App 侧可直接调用无需再依赖实验桥。多房间批量读取1.59.0PR #37719Apps-Engine 新增一次性从数据库读取多个房间的方法避免循环单查带来的跨进程往返开销。多附件消息文件元数据1.60.0PR #38099为包含多个附件的消息补充文件元数据App 可枚举每条消息的每个附件。线程过滤1.49.0PR #35013房间已读/未读消息桥接支持按“包含或不包含线程消息”过滤增强消息检索灵活性。用户 bio 缺失修复1.57.1/1.58.0PR #37380此前类型上定义了bio字段但 App 实际永远拿不到用户 bioIUser.ts 的bio?: string该修复补齐了此桥接缺口。MessageUpdater 缺失修复1.62.0PR #39883此前运行期 App 无法获得MessageUpdater该补丁使其在运行时可用。BlockBuilder 更新消息修复1.50.0PR #35603修复了 App 无法使用BlockBuilder更新消息的问题。七、设置SettingsAPI 的灵活性提升两个版本让 App 的设置体系更具动态性1.51.0PR #35644在设置 API 上新增两个方法允许 App 在运行期为select/multi-select类型设置动态增删选项从而支撑更灵活的配置场景例如按外部系统数据刷新下拉选项。1.49.0PR #35199允许把“隐藏设置”纳入权限列表使隐藏配置项也能被 App 通过引擎访问。八、日志、可观测性与日志 API全局日志端点与过滤1.52.0PR #35416改造既有/api/apps/:id/logs端点使其接受过滤参数并新增不带 App id 过滤的/api/apps/logs端点便于运营侧一次拉取全部 App 日志。日志导出按钮1.54.0PR #36403在 App 日志 UI 上新增“导出为文件”按钮方便将日志作为附件下载排查。嵌套请求日志丢失1.60.0PR #38374修复嵌套请求场景中 App 日志丢失的问题。debug 日志深度不足1.57.1/1.58.0PR #37384修复子进程 debug 日志仅展示对象 2 层深度的限制。当前实现已把util.inspect深度调至 10见 BaseRuntimeSubprocessController.ts。错误对象[object Object]问题1.52.1/1.53.0/1.54.0PR #36346修复若干错误对象传给 App 方法调用时只剩[object Object]字符串、丢失真实信息的问题1.50.0PR #35667同期修复了错误未正确传播给已集成 App 的问题。九、运行时架构、子进程管理与可靠性重点改动Apps-Engine 采用“主进程 平台运行时子进程”的隔离架构宿主通过 BaseRuntimeSubprocessController.ts 对每个 App 的 Deno/Node 子进程执行 spawn、kill、重启与存活检测二者之间用 JSON-RPC 消息循环通信桥调用以bridges:开头路由到对应 bridge 实例并有LivenessManager/ProcessMessenger维持心跳消息常量_zPONG。本区间大量 Patch 都指向这一架构的健壮性禁止子进程因未处理异常崩溃1.48.0PR #33997unhandledRejection与uncaughtException现在会被捕获并记录为日志代码路径见 BaseRuntimeSubprocessController.ts而不是任其拖垮整个子进程。重启机制的成批修复1.48.1/1.48.2PR #34106/#34172/#34205/#34858包括——spawn 命令失败时重试重启上次重启失败后不再重试的缺陷部分场景重启例程无法正确重启 App主进程与子进程之间无法重建通信链路app:getStatus请求部分场景超时子进程重启失败错误信息的采集向“总失败 App 数”指标与统计上报错误数据等。ping 行为空闲化1.58.0PR #37496修复 ping 只在 App 变为空闲时才触发避免不必要的子进程重启。减少getStatus调用1.50.0PR #35426削减跨进程管道上对 App 状态的重复查询提升大批量 App 场景的整体性能。状态机行为修正1.58.0PR #37167/#37152不再把每次状态迁移的中间结果都写入数据库这会导致服务器重启/启动时 App 无法恢复到期望状态修复部分情况下 App 误入invalid_installation_disabled状态的问题1.48.0PR #33865修复子进程重启后 App 显示为已禁用的问题1.47.0PR #33417修复更新后先前被禁用的私有 App 被自动启用的问题。启动期崩溃1.55.0PR #36802/#36670修复 App 加载阶段与部分场景下聊天服务器因 unhandled rejection 崩溃的问题。运行时构造失败后的不可恢复态1.53.1/1.54.0PR #36504修复安装过程中若运行时构造失败App 将永久卡在不可恢复状态的问题。Deno 依赖缓存1.50.0PR #35479修复 Docker 镜像构建阶段的 Deno 依赖缓存问题。模块兼容性1.56.0PR #36967修复 App 使用带可选node:前缀的 Node 原生模块时无法构造的问题1.55.0PR #36625修复 App 包内含 ES2017 之后的新语法时安装失败的问题——这提示开发者打包 App 时应注意语法目标版本。安装期脏数据1.56.0PR #36943修复安装期间对象引用泄漏导致无效数据写入数据库的问题1.57.0PR #36990与 1.49.0PR #35120分别调整 App 更新策略阻止把非预期字段变更写回文档。网络权限收紧1.48.0PR #33786修复部分错误场景下向 App 子进程授予网络权限的问题属于安全加固。斜杠命令上报1.55.1/1.56.0PR #36855调整对 App 提供的斜杠命令的严格上报行为放宽误报。十、运行时超时APPS_ENGINE_RUNTIME_TIMEOUT深解1.48.0PR #33690引入环境变量APPS_ENGINE_RUNTIME_TIMEOUT统一控制 App 运行时超时并删除了Pre事件原先硬编码的 1 秒超时。其真实实现值得展开// packages/apps/src/server/runtime/base/BaseRuntimeSubprocessController.ts function getRuntimeTimeout() { const defaultTimeout 30000; const envValue isFinite(process.env.APPS_ENGINE_RUNTIME_TIMEOUT as any) ? Number(process.env.APPS_ENGINE_RUNTIME_TIMEOUT) : defaultTimeout; if (envValue 0) { console.log(Environment variable APPS_ENGINE_RUNTIME_TIMEOUT has a negative value, ignoring...); return defaultTimeout; } return envValue; }要点可归纳如下默认值 30000ms未配置该环境变量时所有请求超时均为 30 秒。解析规则仅当Number(process.env.APPS_ENGINE_RUNTIME_TIMEOUT)是有限数值时才采用否则回退默认值负值会被显式忽略并打印告警日志见 BaseRuntimeSubprocessController.ts。生效范围超时同时约束两条关键路径——等待子进程就绪waitUntilReady超时抛Timeout: app process not ready与等待任意 JSON-RPC 方法响应超时抛Request ... for method ... timed out after ...ms对应代码见 BaseRuntimeSubprocessController.ts。因此当线上出现“App 方法响应超时/子进程未就绪”时应优先检查该环境变量的取值当需临时放宽阻塞型钩子例如文件上传预处理的执行时限时可通过提高该值实现。十一、安装、更新与 Marketplace 生态修复Marketplace 安装失败1.48.2PR #35009与Marketplace App 更新后变为无效安装1.49.0PR #35170均被修复。包依赖收敛1.51.1/1.52.0PR #36007移除对某个内部包的依赖解决了rocket.chat/apps-engine包安装本身失败的问题。License 附加项1.47.0PR #33433支持与 License 中签发的 add-on附加项交互。运行时不可访问文件清理1.63.0PR #40343删除开发期本就不该被 App 访问的文件缩小攻击面。安全热修复1.61.1/1.62.0PR #40125/#40130两次安全补丁随主项目安全公告发布建议部署到生产环境前核对官方安全修复说明。UI 组件与工程化1.61.0 移除 UiKit 相关弃用项PR #39268并升级 ESLint 及配置PR #38989。十二、结语如何用好这份变更记录以该 CHANGELOG 为参照可以沉淀出三条可执行的升级策略按需定位能力需要联邦字段、ABAC、外呼端点、访客外部 ID、getUserRoomIds、系统消息事件等能力时先确认宿主版本所捆绑的 apps-engine 不低于上表对应版本再在 definition 目录确认类型/接口签名已存在。识别修复窗口历史 bug如 bio 取不到、MessageUpdater 缺失、子进程无法重启、debug 深度过浅等都有明确修复版本出现疑似旧病复发时对照上表检查是否运行在修复版之前。关注运行时与运维配置涉及子进程稳定性与超时调优的场景重点核对 BaseRuntimeSubprocessController.ts 的实现并善用APPS_ENGINE_RUNTIME_TIMEOUT、日志导出按钮与/api/apps/logs端点完成排障。Rocket.Chat 的 App 生态正是在这一版版“Minor Patch”中逐步走向成熟从类型层面的联邦化修正到 Omnichannel 业务闭环再到子进程级的高可用加固CHANGELOG 的每一行都对应着仓库中可核验的实现。【免费下载链接】Rocket.ChatThe Secure CommsOS™ for mission-critical operations项目地址: https://gitcode.com/GitHub_Trending/ro/Rocket.Chat创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价