跳转至

v2026.8.1: 消息

现在,消息功能可以在人们已经与 Claw 交流的各处保持更完整的对话。Telegram 获得了更丰富的消息和媒体支持,Slack 将实时进度和最终答案放在一起,Discord 新增了可选加入的 Activities 以及能感知在场人员的语音房间,而原生应用则把媒体和待发送内容保留在它们所属的对话中。

在受支持的渠道上,OpenClaw 现在会在受管重启过程中保存已接受的消息,报告连接是可用的、恢复中的还是受阻的,并保留不确定的发送结果,而不是盲目地重新发送。恢复从 OpenClaw 接受消息后开始,每个服务在这一点之外仍控制着自己能确认的内容。

消息投递与恢复

在受支持的渠道上,OpenClaw 已接受的消息 现在会在受管重启期间保持待处理状态,渠道状态会显示连接是可用的、恢复中的还是受阻的。当发送超时且没有确认结果时,OpenClaw 会将该结果保留为不确定状态,并可以在下一次联系时发出警告,而不是制造一条可能重复的消息。恢复在本地接受后开始。

符合条件的单选问题可以在 Telegram、Discord 和 Slack 上使用原生控件,而较长的 Telegram 和 Discord 轮次可以显示简短的状态标题和紧凑的工具活动。多选和自由文本问题继续通过受支持的客户端或文本路径进行,Telegram 的部分回答流式输出仍然是独立的选择加入模式。

来源与完整变更列表

改进

  • 将六项渠道流式传输配置移至嵌套格式 #105709
  • 为受支持的渠道新增统一的隐式提及策略 #108829
  • 在聊天界面中新增结构化的 ask_user 问题 #109922
  • 完成跨 harness、渠道和原生应用的 ask_user #110372
  • 从渠道回复中打开 MCP 应用视图 #111211
  • 将渠道媒体排除在主消息文本之外 #111665
  • 渲染模型编写的可折叠区块 #114556
  • 让模型学会在受支持的界面上使用可折叠详情 #114706
  • 跨 Gateway 聊天管理音频和视频附件 #115842
  • 为十个内置渠道发布权威生命周期状态 #118110
  • 在另外十五个渠道上报告真实生命周期状态 #118298
  • 默认仅将心跳警报路由到配置的所有者 #121988
  • 主机休眠后及时恢复渠道连接 #122489
  • Linux 主机休眠后及时恢复本地 Gateway #122719
  • 为消息发送添加结构化语音控制 #124913
  • feat(channels): 通过 emoji-list 在 Discord、Slack、Telegram 中实现自定义表情符号发现 #128435
  • feat(channels): 当机器人加入群组房间时发布有依据的介绍 #130103
  • 将遗留渠道流式传输键移至仅 doctor 的迁移 #104693
  • 统一 Matrix、Feishu 和 QQBot 的流式传输配置 #105808
  • 立即打开所选渠道的设置 #113197
  • 要求使用嵌套的渠道流式传输配置 #113533
  • 迁移已停用的渠道配置别名并移除孤立的影子试验 #114709
  • 从已完成的渠道回复中移除活动摘要 #124972

Bug 修复

  • fix(channels): 内置渠道拒绝文档中记载的 mediaMaxMb 覆盖值 (#118157) 0bb870a
  • 当投递前回调挂起时释放回复通道 #104256
  • 在不重复重试的前提下处理超时的消息发送 #104632
  • 在配置迁移期间保留流式传输设置 #105054
  • 在轮次后压缩失败时保留已完成的回复 #105156
  • 防止 Codex 进度消息结束活动轮次 #105365
  • 仅对带有模型编写标题的长任务显示进度草稿 #106026
  • 在回复定稿停滞时恢复消息会话 #106792
  • 保持 ack 后的 webhook 处理被受理 #107734
  • 在后续消息到达时保留已完成的回复 #107799
  • 在 Gateway 重启后安全恢复渠道轮次 #108283
  • 在重试和重启期间保持排队的语音回复有效 #108502
  • 为全新安装恢复一个跨渠道 DM 会话 #110225
  • 在 Gateway 聊天中恢复结构化的 ask_user 问题 #110961
  • 恢复失败的入站渠道事件 #111029
  • 防止渠道回显并添加原生登录命令 #111341
  • 从 iMessage、Signal 和 WhatsApp 中移除媒体占位文本 #111800
  • 重启后恢复消息渠道上下文 #112548
  • 拒绝无效的显式渠道账户选择 #113417
  • 防止繁忙的 Gateway 静默丢弃排队中的回复 #114058
  • 阻止无 socket 的渠道陷入重启循环 #114970
  • 当持久化入站不可用时使渠道启动失败 #114998
  • 防止在处理过的轮次后错误地回退为无回复 #115016
  • 将入站投递失效的渠道报告为不健康 #115229
  • 匹配带装饰代理名称的输入群组提及 #115278
  • 在轮次受理后释放入站防抖 #115603
  • 为重启恢复的回复运行渠道回复钩子 #115711
  • 在队列拆除后投递重试的消息 #115891
  • 在纯文本渠道回复中保留 Markdown 代码 #116123
  • 在渠道状态标题下方显示工具进度 #116143
  • 在 Gateway 重启恢复后解除渠道轮次的阻塞 #116728
  • 通过 Matrix 和 Telegram 发送工作区附件 #117711
  • 投递引用简短临时更新的最终回复 #118178
  • 保留可操作的渠道失败状态和 Discord 重试行为 #118251
  • 在 Gateway 崩溃循环窗口清除后恢复渠道自动启动 #118311
  • 标准化渠道生命周期恢复与清理 #118795
  • 让代理在最终消息工具回复之前发送进度 #119605
  • 将 Slack 和 Discord 的评论路由到单一每轮所有者 #121009
  • 在投递路径中保留渠道插件回复抑制 #121159
  • 在不重新发送的情况下让不明确的最终投递丢失可见 #121833
  • 默认将心跳警报投递到最近一次对话 #121892
  • 在渠道中将失败的代理运行显示为错误 #122009
  • 让无头渠道设置快速失败 #122530
  • 阻止 Gateway 使用继承的凭据自动启动渠道 #123174
  • 可见的聊天回复取代同一会话的心跳 #123458
  • 防止失败的发送重新绑定主会话 #124459
  • 在渠道轮次重叠时保留回复 #124623
  • 根据已确定的投递结果决定回复可见性 #124773
  • 保留不明确的消息投递结果 #124825
  • 报告在状态更新后失败的排队回复 #125325
  • 跨 Gateway 重启保留已接受的渠道消息 #125919
  • 防止大型 base64 附件耗尽 Gateway 内存 #126017
  • 在显式多代理集群中恢复排队投递 #126377
  • 阻止路由标识符被当作投递回执 #126385
  • fix(gateway): 将对话投递保持在代理绑定内 #126424
  • 在恢复所有者释放冲突后解除回复阻塞 #126507
  • 防止渠道启动期间 Gateway 就绪状态停滞 #126555
  • 在泵释放后保持持久化入站消息被受理 #126590
  • fix(channels): 重试超时的入站消息 #127090
  • fix(plugins): 将工具投递绑定到当前轮次 #127098
  • fix(channels): 在长轮次期间保持排队消息有效,而不是将其死信化 #127950
  • 修复(频道):为入站轮次保留网关上下文 #127962

    • 修复(定时任务):临时网络故障后定时任务结果消失 #128184
    • 修复(出站):防止远程网关重复发送 #128202
    • 修复(媒体):不再静默跳过具有不透明下载 URL 的附件 #128220
    • 修复(频道):保留长演示文本 #130368
    • 修复(自动回复):澄清未指定收件人的环境房间事件 #130901
    • 修复(配置):保留频道账户策略继承 #131250
    • 修复:恢复中断的投递结算而不产生重复通知 #131380
    • 通过一次受保护的重试恢复未投递的消息工具回复 #99536
    • 修复(频道):捆绑频道拒绝文档记录的 responsePrefix 覆盖 (#118148) 1f2e998
    • 修复(频道):接受上下文可见性设置 (#117287) d8e08e7
    • 将活动消息排除在队列溢出丢弃之外 #103284
    • 按 Unicode 段落分隔符拆分为消息块 #103518
    • 恢复官方 ClawHub 插件的可信启动 #103836
    • 当 Codex 引导无法确认采纳时保留消息 #103916
    • 在出站消息中保留带归属的格式 #104118
    • 使频道 nack 回调幂等 #104919
    • 隔离损坏的频道入口行 #105259
    • 在 Doctor 迁移期间保留继承的 Discord 流媒体设置 #105636
    • 防止同一路由上重复投递生成媒体 #105717
    • 展示仅消息工具的空完成结果 #105765
    • 在群聊轮次中保留发言归属 #107025
    • 在共享对话中隐藏模型回退通知 #107209
    • 减少频道消息工具中的无关字段 #107474
    • 在重试期间保留排队的 MEDIA 附件 #108969
    • 尊重被拒绝的入站对话声明 #109857
    • 防止路由缓存冲突导致选择错误的代理 #110001
    • 让频道设置在超时启动后恢复 #110146
    • 在步骤运行期间锁定频道向导的答案 #110163
    • 将设置向导凭据限定到所选账户 #110969
    • 防止重复的代理间回复 #111012
    • 修复(频道):当停止中止与投递返回竞争时保留最终入口结果 #111347
    • 用结构化事实替换频道媒体占位符主体 #111447
    • 使 configure 和频道设置行为一致 #111720
    • 通过有序附件事实路由入站媒体 #112276
    • 草稿预览在瞬时发送失败后保留最新更新 #112370
    • 保留包含空格且未加引号的媒体路径 #112464
    • 让格式化回复在纯文本频道上可读 #112926
    • 改进 Teams 和 QQ 上的 Markdown 渲染 #113100
    • 对正常路由的频道回复运行出站钩子 #113448
    • 通过单一生命周期路由捆绑的原生命令回复 #113500
    • 恢复不透明插件的对话绑定 #113588
    • 为流式附件保留 MIME 类型 #113762
    • 在启动宽限期结束时运行频道恢复检查 #114275
    • 在报告停止失败前完成同级频道拆除 #114280
    • 防止重写命令后出现重复回复 #114379
    • 保持频道账户选择与凭据替换一致 #114395
    • 防止 NO_REPLY 令牌泄漏到已投递的回复中 #114500
    • 在显式群组提及后显示空回复回退 #114531
    • 在主要回复投递失败后停止重复回复 #114628
    • 在重新链接和重启期间保持频道状态内部一致 #114775
    • 将无回复通知限制在指向机器人的轮次 #114799
    • 让用户轮次越过仅定时回复钩子恢复 #114836
    • 修剪最终回复块中的尾随空白 #114973
    • 让崩溃循环的频道达到其放弃状态 #114976
    • 将委派消息保留在当前频道账户上 #115358
    • 在持久频道回复中保留 CLI 轮次中途文本 #115455
    • 在仅消息工具投递中恢复滞留的 CJK 回复 #115556
    • 在六个频道中将 Webhook 接受标记为持久 #115586
    • 防止重复的 CLI 评论投递 #115596
    • 将内部代理会话排除在消息目的地之外 #115657
    • 为通过身份验证的自动回复遵循配置的默认代理 #115724
    • 将委派回复返回到活动的直接对话 #115756
    • 阻止不健康的频道无限重启 #116089
    • 为代理钩子投递保留账户选择 #116095
    • 在运行前拒绝无效的钩子投递账户 #116264
    • 将流式评论保持在单条进度草稿行上 #116272
    • 在提及为可选时确认显式群组提及 #116303
    • 在频道进度中显示失败的 CLI 命令结果 #116387
    • 使有意的 NO_REPLY 完成结果在频道间保持静默 #116548
    • 在重启恢复期间保留出站策略结果 #116632
    • 在四个捆绑频道中保留投递行为 #116647
    • 在过时终端事件后保持已恢复的频道轮次活动 #116777
    • 在带媒体附件的回复中保留 Markdown 格式 #116786
    • 当单个插件失败时保持频道设置可用 #116824
    • 在频道间保留补充媒体和演示细节 #116884
    • 在最终回复中保留格式错误的括号文本 #116979
    • 在最终回复中保留未匹配的括号尾部 #116983
    • 在频道回退菜单中保留可执行命令 #116990
    • 修复(消息):线程回复投递不被标记为当前来源回复 #117176
    • 在排队轮次中保持频道进度预览一致 #117269
    • 在健康输出中显示新出现的频道探测失败 #117410
    • 将心跳承诺保留在配置的发件人账户上 #117521
    • 保留显式空投递回执而不虚构 ID #118126
    • 保留作者编写的出站消息空白 #118538
    • 跨重启保留 Slack 和 Mattermost 线程参与到期时间 #118630
    • 让手动重启的频道从临时错误中恢复 #118728
    • 为命名外部频道账户接受心跳设置 #118828
    • 在 Windows 上接受混合大小写的本地文件 URL #121226
    • 为自定义使用页脚解析 Windows 主目录路径 #121303
    • 在内部轮次中保留外部线程路由 #121321
    • 在执行过程中保持原生插件命令选择绑定 #121544
    • 防止成功精确发送在重启后被重放 #121587
    • 报告尽力而为的代理投递失败 #121824
    • 当 Doctor 保持配置不变时显示频道警告 #121956
    • 展示部分频道状态失败 #122349
    • 成功后清除虚假的投递不确定性通知 #122438
    • 遵循配置的终端反应保持时间 #122544
    • 报告每个目标广播投递的真实结果 #122605
  • 当标记为 TTS 合成失败时保留文本 #122608

  • 在账户移除后立即刷新 Gateway 健康状态 #122620
  • 将 Slack 和 Discord 系统事件保留在其路由到的 Agent 中 #123316
  • 当策略和持久会话不一致时投递最终回复 #123422
  • 手动重启后保持频道消息继续工作 #123885
  • 保持受管回复媒体可下载且所有权正确 #124048
  • 阻止未送达的 ask_user 提示捕获后续回复 #124148
  • 当频道管理器停止时清理实时线程绑定 #124221
  • 在纯文本回复中保留电子邮件地址 #124249
  • 修复(outbound):防止因已被证实未发送的消息工具故障而重复发送 #124310
  • 在状态刷新失败后保留频道设置 #124383
  • 拒绝无效的定向频道设置请求 #124584
  • 呈现不可用的频道状态检查器 #124600
  • 仅在保存配置后运行频道设置钩子 #124736
  • 在投递过程中保持 Signal 和 iMessage 审批类型化 #124742
  • 将助手投递指令存储为类型化的会话记录事实 #124793
  • 将无目标的私信回复路由回发送者 #124837
  • 将图片获取余量限制在图片大小上限内 #124838
  • 从历史会话中移除投递标记 #124888
  • 在频道解析中遵循显式的 Agent 所有权 #125109
  • 保留 Discord 和 Telegram 降级投递的结果 #125152
  • 在收到经授权的新消息时恢复已归档的频道会话 #125163
  • 保留无目标消息回复的关联性 #125283
  • 验证结构化附件中的每个来源 #125433
  • 修复(auto-reply):在非所有者强制的频道上恢复经频道授权的 /new 和 /reset #125618
  • 让主 Agent 保持对隔离群组对话的感知 #125667
  • 修复(agents):恢复插件信封信号中的 deliveryStatus 检查 #125706
  • 返回完整的 webhook 错误并可靠地排空 Gateway 关闭 #125893
  • 让广播失败对脚本和操作员可见 #125915
  • 对外发附件强制执行发送方的文件读取策略 #125950
  • 修复(cron):仅在成功投递后持久化外发路由 #126145
  • 恢复格式错误的频道入站声明 #126176
  • 在持久投递中保留一次性原生回复 #126205
  • 在工作开始后显示排队回复的失败 #126266
  • 立即结算预先中止的回复投递 #126582
  • 阻止 Nostr 和 Buzz 在关闭期间重用总线 #126637
  • 恢复 npm 安装频道的消息 CLI 发送 #126700
  • 在频道适配器临时中断期间重试排队的投递 #126800
  • 修复(agents):心跳运行不再阻塞可见轮次 #126853
  • 修复(heartbeat):在节奏禁用时投递 exec 完成结果 #126895
  • 修复(acp):在重连协调时恢复最终回复并呈现运行错误 #126909
  • 在预览清理失败时保留已投递的频道回复 #126922
  • 为 CLI 支持的 cron 公告保留所选账户 #126995
  • 在不重启同级账户的情况下恢复已修复的凭据文件账户 #126999
  • 当后续进度从未变成最终回复时显示明确错误 #127070
  • 修复(agents):保留不透明会话键的大小写 #127279
  • 修复:在明确的频道拒绝后停止重试风暴 #127353
  • 修复(outbound):在不确定的网络故障后防止媒体重放 #127841
  • 修复(channels):将入站通道保持在队首,而不是任何重试行上 #127849
  • 修复(gateway):时钟回拨后不健康的频道显示为就绪 #128222
  • 修复:保持手动停止的空闲频道账户处于停止状态 #128237
  • 修复(outbound):防止空切分器静默丢弃回复 #128288
  • 修复(agents):投递失败时流式回复和生成的媒体消失 #128337
  • 修复(agents):从已准入的网关解析最终回复 #128348
  • 修复(tts):在语音运行时冷启动时投递仅语音回复 #128394
  • 修复(agents):当提供者流结束时关闭卡住的推理预览 #128496
  • 修复(plugin-sdk):在空分块后保留文本 #128499
  • 修复(reply):保留流式语音消息顺序 #128558
  • 修复:当数据 URL 包含 MIME 参数或换行 base64 时附件失败 #128823
  • 修复(reply):富回复在静默响应标记旁消失 #129082
  • 修复(agents):保留频道拥有的消息线程身份 #129095
  • 修复(reply):防止去重后的后续消息丢失线程回复 #129123
  • 修复(channels):附件文件名从模型上下文中消失 #129140
  • 修复(outbound):在对话历史中保留仅位置回复 #129197
  • 修复(cli):不成功的消息发送显示为成功 #129202
  • 修复(reply):当回复文本已发送时保留附件和操作 #129230
  • 修复(reply):在投递身份中保留位置和视频呈现 #129278
  • 修复(agents):将流式代码块保持在消息限制内 #129487
  • 修复(channels):遵循支持的群组历史记录限制 #129710
  • 修复(channels):排空大量入站积压而无需绑定每个待处理 ID #129717
  • 修复(reply):在推理和评注更新后保留最终答案 #129893
  • 修复(delivery):当时钟跳变时重新设置队列计时器 #129913
  • 修复(channels):重试已放弃的投递而不惩罚 Telegram 重启 #130077
  • 修复(cli):失败的消息操作显示为成功 #130281
  • 修复:根据解析出的投递线程对回复进行去重 #130510
  • 修复:中断模式无法停止活动中的低级频道回复 #130621
  • 修复:在审批不可用后保留频道答案 #130624
  • 修复(reply):在卡住会话恢复后继续后续工作 #130911
  • 修复(auto-reply):在命令提示中保留频道上下文 #130958
  • 重构(channels):整合账户注销清理 #130976
  • 修复:在活动运行期间投递斜杠命令回复 #131023
  • 修复(auto-reply):限制 fence 重开头部,使分块遵守限制 #131086
  • 修复(media):附件文件名从未到达模型上下文 #131216
  • 修复(delivery):当生产者声明过期时保留重试预算 #131614
  • 修复(message):通过 fs 桥接加载仅远程的沙箱附件 #131616
  • 修复(channels):在关闭后保留入站重试事实 #131962
  • 修复(codex):将工具生命周期排除在频道进度之外 #132321
  • 修复(codex):恢复配置的频道工具进度 #132664
  • 修复(outbound):跳过空 HTML 格式元素的标记 #133103
  • 修复(media):在原生回复边界解码文件 URL #133146
  • 修复(outbound):通过仅支持 sendFormattedMedia 的适配器投递媒体 #133168
  • 修复:保留泄漏的模型令牌周围的标点和粗体格式 #133287
  • 在中止回复中解析响应前缀模板 #45315
  • 按显示宽度对齐 CJK 和 emoji Markdown 表格 #55596
  • 使用 Unicode 感知的边界匹配派生的 Agent 名称 #89864

  • 当频道登录发现未加载的插件时重启网关 #90779

    • 遵循显式的 Telegram 和 Discord 预览流式传输 #97671
    • fix: 在排队清理过程中保留重启投递声明 8b3f7e7
    • 延迟带旁白的进度草稿并移除隐式标题 #105607
    • 提醒外部插件注意旧版标量流式传输设置 #106796
    • 将旧版频道发送失败报告为失败 #109906
    • 在插件发送结果中保持已配置频道的权威性 #110069
    • 当审计日志失败时保留频道设置成功状态 #111504
    • 在消息发送时忽略空白的可选位置 #112013
    • 在配置重载后保持回复功能正常 #112467
    • 按正确的重试计划恢复排队的出站消息 #113700
    • 遵循频道对显式回复标签的退出选择 #114268
    • 在并行探测期间保持频道状态顺序稳定 #114362
    • 在入口启动失败后清理 Slack 和 Feishu #115295
    • 保持仅消息工具的心跳回复为私密 #115629
    • 将智能体完成公告投递到私信会话 #115811
    • 当音频生成失败时保留 TTS 答案 #118690
    • 更正 Doctor 修复报告中的过期插件 ID #119202
    • 移除未启用的 progress-render 设置 #122927
    • 为旧版频道生命周期结算失败的入口声明 #124016
    • 在消息重投递时避免空的后续队列 #124723
    • 暴露出站队列和批次准备失败 #124756
    • 一致地拒绝损坏的批准反应目标 #124942
    • 合并重叠的频道输入开始事件 #127006
    • 清理失败的媒体暂存产物 #127092
    • fix(gateway): 在移除频道插件后清除过期的凭据警告 #127503
    • fix(cron): 在时钟回滚后恢复自动化失败警报 #127731
    • fix(agents): 在排队的后续消息中保留图片附件所有权 #128272
    • fix(outbound): 空媒体列表会静默丢弃有效的频道附件 #128372
    • fix(gateway): 移除的频道插件在重载后仍被错误地标记为健康 #128503
    • fix(reply): 保留不同的流式位置消息 #128846
    • fix(media): 为透明图片附件保留正确的文件名 #128902
    • fix(cron): 当系统时钟跳变时保留 webhook 投递 #129050
    • fix(reply): 保留所有显式和解析混合的附件 #129159
    • fix(channels): 保持仅标题卡片可见并准确统计媒体数量 #129193
    • fix(reply): 从消息中隐藏格式错误的回复指令 #129367
    • fix(channels): 遵循受支持的账户回复线程策略 #129679
    • fix: 保留 data URL 附件的文件名扩展名 #130625
    • fix: 在附件操作上保留显式 MIME 类型 #130714
    • 允许使用零来禁用群聊历史 #65359

    文档

    • 记录频道入口和提及保证 #111069
    • 修复频道发现并防止文档漂移 #118106
    • docs(channels): 将 implicitMentions 覆盖范围限定为读取它们的频道 (#119320) 834fc44
    • 修复 Discord、Slack 和 Google Chat 配置示例 #106188
    • 记录持久化入口重放防护分层 #109799
    • 更正心跳可见性配置示例 #118827
    • 完成进度工作计数器清理 #125011
Telegram

在启用富文本的 Telegram 账户上,智能体可以发送原生详情、表格、清单、数学公式、地图、文件引用、位置、场所以及兼容的圆形视频留言。大型嵌套回复会在 Telegram 的限制内分页,被拒绝的富文本结构会回退到完整的纯文本答案,而不是丢弃有用部分。

繁忙的对话也能更好地保持连贯。活动工作期间的后续消息保持有序,已接受的更新可在重启后恢复,被放弃的投递声明不再冻结聊天,已验证的公开投票活动会返回到其开始的聊天或论坛主题。匿名投票仍仅用于展示,引用文本会以带来源的引用形式传递给 agent,而不是作为活动指令。

<details class="release-source-toggle">
<summary>来源和完整变更列表</summary>

**改进**

- 发送 Telegram 位置、场所和圆形视频笔记 [#105142](https://github.com/openclaw/openclaw/pull/105142)
- 发出原生 Telegram Bot API 富消息块 [#107986](https://github.com/openclaw/openclaw/pull/107986)
- 使 Telegram 消息处理在活跃轮次和重启之间保持持久 [#108924](https://github.com/openclaw/openclaw/pull/108924)
- 标记持久的 Telegram webhook 接受 [#104407](https://github.com/openclaw/openclaw/pull/104407)
- 在 Telegram 富消息中原生渲染 Markdown 列表 [#113158](https://github.com/openclaw/openclaw/pull/113158)
- 在默认日志中显示 Telegram 草稿流故障 [#111065](https://github.com/openclaw/openclaw/pull/111065)

**Bug 修复**

- 防止在对话上下文中出现重复的 Telegram 回复 [#102469](https://github.com/openclaw/openclaw/pull/102469)
- 在热重载和回退期间保持 Telegram 模型选择 [#103510](https://github.com/openclaw/openclaw/pull/103510)
- 防止 Telegram 消息在重启后丢失 [#107288](https://github.com/openclaw/openclaw/pull/107288)
- 向每个运行时传递 Telegram 富格式指导 [#108264](https://github.com/openclaw/openclaw/pull/108264)
- 清理 Telegram 媒体说明并保留可重试的更新 [#111855](https://github.com/openclaw/openclaw/pull/111855)
- 当模型添加位置时投递 Telegram 回复 [#113347](https://github.com/openclaw/openclaw/pull/113347)
- 按递归传输限制对 Telegram 富消息进行分页 [#117020](https://github.com/openclaw/openclaw/pull/117020)
- 在 Telegram agent 输入中保留引用消息的来源 [#117021](https://github.com/openclaw/openclaw/pull/117021)
- 将并发的 Telegram 更新保持在正确的会话中 [#117861](https://github.com/openclaw/openclaw/pull/117861)
- 防止停滞的 Telegram 响应阻塞群组 [#118144](https://github.com/openclaw/openclaw/pull/118144)
- 在模型空回复后恢复定向的 Telegram 轮次 [#118305](https://github.com/openclaw/openclaw/pull/118305)
- 在菜单限制下保持已配置的 Telegram 命令可见 [#119717](https://github.com/openclaw/openclaw/pull/119717)
- 将 Telegram 表情回应和投票答案保留在其原始主题中 [#121231](https://github.com/openclaw/openclaw/pull/121231)
- 在生产 Docker 镜像中保留 Telegram 依赖 [#125580](https://github.com/openclaw/openclaw/pull/125580)
- fix(telegram): 使 ask_user 控件原生且可靠 [#130262](https://github.com/openclaw/openclaw/pull/130262)
- 将 Telegram 公开投票的选票路由到发起的 agent 会话 [#95830](https://github.com/openclaw/openclaw/pull/95830)
- 在关闭失败后继续 Telegram webhook 清理 [#100998](https://github.com/openclaw/openclaw/pull/100998)
- 将机器人自己的 Telegram 摘要消息标记为自身 [#102507](https://github.com/openclaw/openclaw/pull/102507)
- 在不阻塞后续消息的情况下恢复停滞的 Telegram 媒体下载 [#103020](https://github.com/openclaw/openclaw/pull/103020)
- 当新消息到达时保留活跃的 Telegram 轮次 [#103664](https://github.com/openclaw/openclaw/pull/103664)
- 强化持久 Telegram 重放采纳 [#103695](https://github.com/openclaw/openclaw/pull/103695)
- 保护已采纳的 Telegram 轮次免受传输取代 [#103952](https://github.com/openclaw/openclaw/pull/103952)
- 让较新的 Telegram 请求优先于过期轮次 [#103965](https://github.com/openclaw/openclaw/pull/103965)
- 防止为计划摘要发送空的 Telegram 消息 [#104111](https://github.com/openclaw/openclaw/pull/104111)
- 限制 Telegram 用户名查找超时 [#104289](https://github.com/openclaw/openclaw/pull/104289)
- 防止未列出的 Telegram API 调用使投递停滞 [#104526](https://github.com/openclaw/openclaw/pull/104526)
- 让流式 Telegram 页面保持在词边界 [#104608](https://github.com/openclaw/openclaw/pull/104608)
- 在 Telegram 中保留作者编写的文件样式链接 [#105911](https://github.com/openclaw/openclaw/pull/105911)
- 限制停滞的 Telegram 诊断响应读取 [#106035](https://github.com/openclaw/openclaw/pull/106035)
- 报告降级的 Telegram 内联控件 [#107105](https://github.com/openclaw/openclaw/pull/107105)
- 停止 Doctor 重复过期的 Telegram 缓存警告 [#108259](https://github.com/openclaw/openclaw/pull/108259)
- 在引言下方保持 Telegram 工具进度可见 [#108394](https://github.com/openclaw/openclaw/pull/108394)
- 在主动发送中保留 Telegram 词边界 [#108801](https://github.com/openclaw/openclaw/pull/108801)
- 在防抖批次中保留 Telegram 转发来源 [#108985](https://github.com/openclaw/openclaw/pull/108985)
- 安全地重试 Telegram 更新偏移量持久化 [#110068](https://github.com/openclaw/openclaw/pull/110068)
- 在升级期间恢复混合大小写的 Telegram 允许列表 [#110415](https://github.com/openclaw/openclaw/pull/110415)
- 防止 Telegram 空投票导致 CPU 空转 [#111063](https://github.com/openclaw/openclaw/pull/111063)
- 在 DM 之外将 Telegram Web Apps 回退为链接 [#111116](https://github.com/openclaw/openclaw/pull/111116)
- 将 Telegram 消息变更保持在论坛主题中 [#112794](https://github.com/openclaw/openclaw/pull/112794)
- 规范化 Telegram General 主题对话 [#113063](https://github.com/openclaw/openclaw/pull/113063)
- 在推进其偏移量之前暂存隔离的 Telegram 更新 [#113368](https://github.com/openclaw/openclaw/pull/113368)
- 防止跨机器人身份的 Telegram 去重冲突 [#113667](https://github.com/openclaw/openclaw/pull/113667)
- 在流式 Telegram 回复中尊重已禁用的链接预览 [#114125](https://github.com/openclaw/openclaw/pull/114125)
- fix(telegram): 保持长模型名称可选 [#114472](https://github.com/openclaw/openclaw/pull/114472)
- 恢复排队中的 Telegram 回复的进度 [#114590](https://github.com/openclaw/openclaw/pull/114590)
- 在规范化提及处理中保留未提及的 Telegram 群组文本 [#114591](https://github.com/openclaw/openclaw/pull/114591)
- 防止未修改的 Telegram 回复在出站钩子之前闪烁 [#114822](https://github.com/openclaw/openclaw/pull/114822)
- 将 Telegram 照片相册保持在同一个 agent 轮次中 [#115401](https://github.com/openclaw/openclaw/pull/115401)
- 在网关重启后保持 Telegram DM 回复可用 [#115434](https://github.com/openclaw/openclaw/pull/115434)
- 防止错误的 Telegram 空响应回退 [#115588](https://github.com/openclaw/openclaw/pull/115588)
- 防止 Telegram 重试检查丢弃消息 [#115613](https://github.com/openclaw/openclaw/pull/115613)
- 停止为不可达的接收者重试 Telegram 更新 [#115640](https://github.com/openclaw/openclaw/pull/115640)
- 将 Telegram 表情回应保留在其发起的论坛主题中 [#116380](https://github.com/openclaw/openclaw/pull/116380)
- 保留 Telegram 回调操作的所有权 [#116383](https://github.com/openclaw/openclaw/pull/116383)
- 在长任务和引导任务期间保持 Telegram 正在输入状态活跃 [#116721](https://github.com/openclaw/openclaw/pull/116721)
- 验证原生设置命令并保留 Telegram 结果 [#116773](https://github.com/openclaw/openclaw/pull/116773)
- 保留 Telegram 编辑预览和对话上下文 [#116818](https://github.com/openclaw/openclaw/pull/116818)
- 保留 Telegram 相册说明、重试和主题路由 [#116827](https://github.com/openclaw/openclaw/pull/116827)
- 恢复被拒绝的 Telegram 照片并保留媒体文件名 [#116886](https://github.com/openclaw/openclaw/pull/116886)
- 将有效的格式化说明附加到 Telegram 媒体 [#116892](https://github.com/openclaw/openclaw/pull/116892)
- 保留 Telegram 投票和入站格式 [#116898](https://github.com/openclaw/openclaw/pull/116898)
- 在长轮询之前确认 Telegram 轮询 [#116970](https://github.com/openclaw/openclaw/pull/116970)
- 让受管理的 Telegram 网关及时退出 [#116978](https://github.com/openclaw/openclaw/pull/116978)
- 允许清除 Telegram 媒体说明 [#116984](https://github.com/openclaw/openclaw/pull/116984)
- 端到端地遵守 Telegram DM 历史限制 [#116985](https://github.com/openclaw/openclaw/pull/116985)
- 修复针对主题限定目标的 Telegram 变更 [#117001](https://github.com/openclaw/openclaw/pull/117001)
- 当 Telegram 阻止语音消息时回退为文本 [#117022](https://github.com/openclaw/openclaw/pull/117022)
- 随着保存的对话增长,保持 Telegram 线程绑定回复的响应性 [#117081](https://github.com/openclaw/openclaw/pull/117081)
- 在下载跳过之前遵守 Telegram 群组媒体摄取 [#117537](https://github.com/openclaw/openclaw/pull/117537)
- 当运行失败时保留 Telegram 部分回复 [#117603](https://github.com/openclaw/openclaw/pull/117603)
- 停止重试永久的 Telegram 媒体查找失败 [#117798](https://github.com/openclaw/openclaw/pull/117798)
- 防止重复的 Telegram 入站投递结算 [#117812](https://github.com/openclaw/openclaw/pull/117812)
- 在多部分投递回执中保留 Telegram 媒体 [#117863](https://github.com/openclaw/openclaw/pull/117863)
- fix(telegram): 保持 Unicode 表格列对齐 [#117890](https://github.com/openclaw/openclaw/pull/117890)
- 跨按钮布局保留规范化的 Telegram 问题选项 [#118049](https://github.com/openclaw/openclaw/pull/118049)
- 拒绝已退役的 Telegram 按钮输入并提供恢复指导 [#118112](https://github.com/openclaw/openclaw/pull/118112)
- 保留 Telegram 工具前评论 [#118287](https://github.com/openclaw/openclaw/pull/118287)
- 防止 Telegram 持久入站重放循环 [#118357](https://github.com/openclaw/openclaw/pull/118357)
- 在状态中显示有效的 Telegram 频道模型 [#118548](https://github.com/openclaw/openclaw/pull/118548)
- 在拒绝某个块后保留长 Telegram 回复的其余部分 [#119080](https://github.com/openclaw/openclaw/pull/119080)
- 拒绝 Telegram webhook 和健康路由冲突 [#119268](https://github.com/openclaw/openclaw/pull/119268)
- 当 Telegram 斜杠命令最终处理失败时显示回退 [#119530](https://github.com/openclaw/openclaw/pull/119530)
- 恢复按账号的 Telegram 回复模式 [#120527](https://github.com/openclaw/openclaw/pull/120527)
- 在提供商失败后保留可见的 Telegram 草稿恢复 [#120626](https://github.com/openclaw/openclaw/pull/120626)
- 在引用回复中重用已保存的 Telegram 照片 [#120647](https://github.com/openclaw/openclaw/pull/120647)
- 在媒体超时后保持 Telegram 聊天响应 [#120706](https://github.com/openclaw/openclaw/pull/120706)
- 随着会话历史增长,保持 Telegram 消息路由快速 [#120774](https://github.com/openclaw/openclaw/pull/120774)
- 在 watchdog 中遵守 Telegram 轮询冷却时间 [#120841](https://github.com/openclaw/openclaw/pull/120841)
- 跨账号应用根 Telegram 群组规则 [#120880](https://github.com/openclaw/openclaw/pull/120880)
- 清除已移除的 Telegram 命令菜单区域设置 [#120885](https://github.com/openclaw/openclaw/pull/120885)
  • 保持 Telegram 频道 DM 回复在其主题中 #120916

    • 在 source-run 主机上恢复 Telegram Doctor 修复 #120954
    • 当草稿不可用时,保持 Telegram 工具进度为临时状态 #121048
    • 验证 Telegram 命令菜单语言代码并修复区域设置状态 #121098
    • 保留 Telegram 频道 DM 主题身份 #121117
    • 保持 Telegram 命令菜单处于稳定的规范顺序 #121239
    • 在详细模式下保持已禁用的 Telegram 进度隐藏 #121395
    • 忽略已禁用论坛主题中的 Telegram 命令 #121411
    • 当延迟媒体投递失败时,保留已定稿的 Telegram 预览 #121903
    • 跨批量消息保留 Telegram 回复上下文 #121907
    • 保持 Telegram 草稿和最终消息回退行为一致 #121990
    • 防止在已抑制的批准后出现错误的 Telegram 回退 #122091
    • 向插件钩子暴露 Telegram 实时位置更新 #122185
    • 安全重试已证明未开始的 Telegram 发送 #122741
    • fix(telegram): 重新排队已中止的入站声明 #122864
    • 防止多智能体启动时出现错误的 Telegram 迁移阻塞 #122877
    • 使用显式多智能体账户绑定正确启动 Telegram #123029
    • fix(channels/turn): 在错误路径上清除待处理历史 #123193
    • 保留 Telegram 裸 URL 查询分隔符 #123230
    • 重试被放弃的 Telegram 消息,而不是丢弃它们 #123528
    • 将已取消的 Telegram 请求排除在传输健康状态之外 #124588
    • 保持 Telegram 定向命令在正确的路由通道上 #125195
    • 将 Telegram 回复保持在正确的直接消息主题中 #126207
    • 定稿流式 Telegram 问题,且不产生重复回退 #126248
    • 保持 Telegram 房间环境事件静默 #126527
    • 防止终端问题投递失败后出现重复回复 #126603
    • 防止最终工具发送后出现重复 Telegram 回复 #126625
    • fix(telegram): 通过论坛标志缓存解决 General 主题会话初始化重试循环 #126656
    • 使常见 Telegram 表情回应可靠 #126739
    • 保持 Telegram 直接主题自身历史隔离 #127050
    • fix(telegram): 防止附件投递失败后出现重复回复 #128181
    • fix(telegram): 保留入站链接目标和标签 #128297
    • fix(telegram): 在媒体说明问题上显示已回答状态 #128526
    • fix(cron): 在失败消息线程之外投递失败警报 #128610
    • fix(telegram): 保留已投递的富文本回退回复块 #128622
    • fix(cron): 脚本通知到达错误的智能体或主题 #128856
    • fix(reply): 通过块合并保留显式路由 #129271
    • fix(telegram): 保留富消息块限制 #129292
    • fix(telegram): 当仅消息智能体运行失败时显示错误 #129311
    • fix(telegram): 计划回应指向错误的消息 #129932
    • fix(telegram): 防止编辑富消息时发生截断 #130526
    • fix(telegram): 防止投递观察者失败后出现重复发送 #130643
    • fix(telegram): 在面向智能体的正文中显示媒体失败 #130849
    • fix(telegram): 保持 Markdown 列表位于 details 块内 #131078
    • fix(bug): 在 beta.3 上成功终端投递后,telegram 会话仍继续运行约 15 分钟 #132309
    • fix: 当提供商轮次失败时保留可见的部分回复 #132538
    • fix(telegram): 在 sendMessage 操作结果中保留持久回执 #133083
    • fix(telegram): 遵循已配置的模型运行时 #133125
    • fix(markdown): 在频道回复中保留重叠格式 #133161
    • 将 Telegram 最终模式 TTS 作为一条带说明的语音消息发送 #83988
    • 防止时钟更改后出现错误的 Telegram 轮询停滞 #86541
    • 当渲染为空文本被拒绝时保留 Telegram 投递 #88810
    • 在已发送消息台账中记录自动 Telegram 回复 #92420
    • 验证 Telegram 消息落入请求的主题 #97361
    • 清理拆分的 Telegram 推理预览 #97828
    • fix(telegram): 对流式回复遵守人类延迟 (#69022) 15826de
    • 在表情符号边界处保持 Telegram DM 主题标签有效 #101781
    • 缓存逐出后释放陈旧的 Telegram 连接 #101783
    • 在表情符号边界处保持 Telegram 原始更新日志有效 #102567
    • 当 HTML 格式开销填满一个块时保留 Telegram 投递 #102999
    • 在较长的 Telegram 模型标签中保持表情符号完整 #104037
    • 允许最多 12 个选项的 Telegram 投票 #104303
    • fix(telegram): 在单词边界处换行长 HTML 块,而不是在单词中间 #104473
    • 将 Telegram 批准按钮保持在回调限制内 #104942
    • 防止 Telegram 旧版迁移空操作循环 #108744
    • 释放停滞的 Telegram 查找连接 #109007
    • 取消时及时停止 Telegram 启动探测 #109604
    • fix(telegram): 使用共享去重缓存限制无效的 allowFrom 警告去重 #109646
    • 使容量受限的 Telegram 状态迁移安全推进 #109679
    • 拒绝格式错误的 Telegram 表格跨度 #109962
    • 在直接聊天操作中保留 Telegram Web App 按钮 #111416
    • 接受 Telegram 论坛主题名称中的有效表情符号 #111443
    • 统一媒体类型并修复 Telegram 回复图像标签 #112063
    • 更正 Telegram 401 恢复指导 #112492
    • 正确渲染已编写的 Telegram 日期和时间标签 #112911
    • 向插件报告已定稿的 Telegram 预览发送 #116214
    • 在 Telegram 中对 Claude CLI 工具进度去重 #116350
    • 将排队的 Telegram 工具进度保留在一条消息中 #116685
    • 解释无效的 Telegram 队列参数,而不是报告模型失败 #116726
    • 将 Telegram 投递与显式选择的主题关联 #117229
    • 从发现中隐藏已禁用的 Telegram 发送操作 #117241
    • 忽略发送给其他机器人的 Telegram 命令 #118024
    • 在 Telegram 原生命令回复中保留 Markdown 表格 #118257
    • 正确分类 Telegram 媒体大小失败 #120757
    • 在任何启动失败后清理 Telegram webhook 资源 #120788
    • 在启动其工作线程之前获取 Telegram 轮询队列 #120800
    • 防止流式回复中出现重复的 Telegram 附件 #121141
    • 在出站投递中保留结构化 Telegram 控件 #121428
    • 在写回期间保留 Telegram 直接消息主题 #127010
    • fix(telegram): 保留精确的内联回调操作值 #127735
    • fix(telegram): 通过一个冻结的进度所有者路由评论 #128259
    • fix(telegram): 通过其所属账户删除业务回调消息 #128358
    • fix(telegram): 描述回应表情符号语法 #129080
    • fix(telegram): 对状态迁移目标去重 #129096
    • fix(telegram): 保留所选回复引用中的精确空白 #129254
    • fix(telegram): 当必需固定失败时保留已发送回复 #129342
    • fix(telegram): 允许持续最多七天的投票 #129461
  • fix(cli):创建线程时遵循带前缀的频道目标 #129671

    • fix(telegram):显示无按钮的询问用户提示 #130200
    • fix(telegram):历史记录声称被拒绝的语音附件已投递 #130399
    • fix(telegram):保留入站代码中的字面反引号 #130800
    • fix(telegram):在审计中保留论坛准入身份 #131293
    • 使用后清除 Telegram 通用回调按钮 #90169
    • fix(telegram):为论坛话题操作接受 threadName #99505
Discord

Discord 现在支持可选启用的 Activities,可直接在 Discord 内打开已配置的 OpenClaw 组件。语音代理还可以查看房间内有哪些人,为单聊和群聊使用不同的唤醒名称规则,并可选择仅在有真人存在时加入。Activities 需要显式频道配置、Discord 客户端密钥以及公共 HTTPS 路由;占用房间自动加入是独立选项,不会更改现有的始终在线默认设置。

消息重试现在会复用其身份以减少重复,交互回复按顺序完成,过期的回复上下文会被丢弃,并且重复的恢复失败可以在不重启整个 OpenClaw 的情况下恢复。当重试可能导致重复时,论坛线程发送仍然不确定。

来源和完整变更列表

改进

  • 叙述进度草稿并附加 Discord 活动回执 #103463
  • 让 Discord 语音代理感知频道参与者 #107004
  • 添加可选启用的 Discord Activity 组件 #107442
  • 将 Discord 在线到达路由到代理 #107451
  • 根据房间大小调整 Discord 语音唤醒名称 #108696
  • 支持没有 Message Content 意图的 Discord 机器人 #116962
  • 在 Discord 语音房间被占用时自动加入 #125974
  • 通过 Discord Activities 展示规范组件 #126294
  • 在 Discord 中显示后台子代理进度 #95604

Bug 修复

  • 在 Gateway 恢复失败多次后恢复 Discord #103596
  • 在模糊重试期间防止重复 Discord 消息 #103867
  • 防止 Discord 回复使用无关的过期上下文 #114716
  • 使 Discord 交互响应可重试且竞态安全 #117417
  • 使 Discord 语音会话遵循最新生命周期事件 #122479
  • fix(discord):投递仅嵌入和仅组件消息 #128152
  • fix(discord):防止语音回复在播放期间被截断 #130346
  • 使 Discord 网关重启免受迟到错误影响 #101617
  • 在排队轮次之间重置 Discord 进度草稿 #102341
  • 流式传输 Discord 多部分上传,避免急切缓冲 #102972
  • 在推理块之间保留 Discord 代码格式 #103166
  • 遵循 Discord 父频道线程归档设置 #103413
  • 在表情符号边界处保持 Discord 线程角色名称有效 #103543
  • 防止会话冲突期间静默丢失 Discord 消息 #103562
  • 阻止停滞的 Discord 目录查找无限挂起 #104290
  • 在热重载后刷新 Discord 模型选择器状态 #104635
  • 在瞬时故障后重试 Discord 预览清理 #104893
  • 省略无效的 Discord 组件强调色 #105387
  • 限制停滞的 Discord 状态响应读取 #106036
  • 在语音对话中遵循 Discord 命令所有者 #106155
  • 当引用消息被省略时保留 Discord 回复上下文 #106176
  • 保持 Discord 监听器槽位,直到工作真正完成 #106398
  • 在默认 Discord 进度草稿中仅显示代理创建的状态 #107338
  • 防止重连后 Discord 在线状态唤醒洪泛 #107969
  • 将 Discord 在线状态问候限制为频道查看者 #108448
  • 将代理回复投递到指定 Discord 频道 #108584
  • 为基于 CLI 的插件工具保留 Discord 论坛目标 #108628
  • Discord Activities 从打包网关正确加载 #108725
  • 当启动 ID 缺失时打开最新的 Discord Activity #108817
  • 阻止停滞的 Discord webhook 发送无限挂起 #109076
  • 防止 Discord 生命周期监听器在重启之间累积 #109108
  • 在多组件频道中解析 Discord Activity 启动 #109194
  • 将较长的 Discord 代码回复保持在消息限制内 #110148
  • 在分发崩溃之间保留 Discord 消息 #110274
  • 按频道受众授权 Discord 组件 #110522
  • 阻止停滞的 Discord Activity 令牌上传挂起 #110667
  • fix(discord):持续网关突发停止内存增长 #110954
  • 在成功发送后关闭 Discord 语音上传套接字 #111269
  • 从停滞的 Gateway 响应中恢复 Discord Activity 组件 #111380
  • 在详细进度期间保持 Discord 工具活动可见 #111947
  • 保留 Discord 粗体和 Mattermost 原生表格 #113037
  • 在插件收敛之前迁移已发布的 Discord DM 配置 #113280
  • 按发送者可见性过滤 Discord 待处理历史 #113407
  • 当 Discord 允许列表仍允许所有成员时发出警告 #113414
  • 保留 Discord 附件内容类型 #114460
  • 防止 Discord 预览暴露钩子前回复 #114904
  • 将 Discord 推理回复保持在消息限制内 #115092
  • 对特权 Discord 工具操作要求请求者身份 #115260
  • 拒绝 Discord API 响应中的格式错误 UTF-8 #115918
  • 将 Discord 活动回执与已采用的线程回复一起保留 #116119
  • 保留 Discord webhook 超时错误 #116155
  • 将 Discord 论坛媒体保留在一个线程中并保留投递回执 #116750
  • 仅在安全时重试 Discord webhooks 和表情回应 #116821
  • 立即清理已删除的 Discord 线程 #116823
  • 防止重复的 Discord 语音消息回退 #117127
  • 以安全块投递较长的 Discord 线程启动消息 #117354
  • Discord 排队消息清理在结算失败后继续 #117524
  • 恢复 Discord 工作区语音和线程附件 #117767
  • 在部分投递失败后保留已接受的 Discord 回复 #118354
  • 当 Discord 斜杠命令最终响应失败时显示私有警告 #118545
  • 报告正在加热的 Discord 消息索引,而不是虚假成功 #118573
  • 在交互确认之后保留 Discord 回复隐私 #118611
  • 限制 Discord 实时语音中保留的语音 #119250
  • 保留已创建的 Discord 组件顺序 #119506
  • fix(discord):为组件上传保留 MIME 扩展名 #119671
  • 在所有路由代理之间重置 Discord 线程会话 #120259
  • 显示失败的 Discord 附件下载 #120269
  • 使 Discord 进度草稿成为显式可选启用 #120376
  • 跨服务器去重 Discord 目录用户 #120797
  • 将多部分 Discord 论坛回复保留在一个线程中 #120857
  • 保留重复的 Discord 交互操作 #121155
  • 将 Discord 论坛回复批次保留在一个线程中 #121165
  • 在重试耗尽和取消后解除 Discord 消息通道阻塞 #122878
  • 保持重叠的 Discord 语音轮次与正确的说话者一致 #123243
  • fix(discord):将 websocket 握手截止时间移动到共享网关客户端选项中 #123414
  • 离开会话后停止 Discord 语音回复 #124030
    • 保持稳定的 Discord DM 配置可升级 #125359
    • 清理流式 Discord 语音并报告实际回退 #125686
    • 通过规范投递路径路由 Discord 投票 #126250
    • 保留每条 Discord 消息嵌入中的文本 #126752
    • fix(discord): 为在线状态操作解析已配置的默认账户 #127748
    • fix(discord): 每次发送时重新验证投递权限 #128357
    • fix(discord): 遵循显式组件附件文件名 #128401
    • fix(discord): 解析字符串化的消息组件 #128498
    • fix(discord): 失败的斜杠命令会让用户一直看到无法结束的加载指示器 #128630
    • fix(discord): 当普通表情回应已存在时,超级表情回应会消失 #128649
    • fix(discord): 让论坛附件和回执保留在首个线程中 #128765
    • fix(discord): 保留每个按钮的可复用设置 #129068
    • fix(discord): 视频字幕从投递回执中消失 #129134
    • refactor(discord): 集中管理语音资源生命周期 #130415
    • fix(discord): 成功转向后避免空警告 #131006
    • fix(transcripts): 停止将已替换的捕获报告为活动状态 #131344
    • fix(discord): 实时提供商关闭后退役语音会话 #131548
    • 从 Discord 草稿中隐藏失败的工具进度 #92517
    • fix(discord): upload-file 静默丢弃字幕 (#124255) 60136ec
    • fix(discord): 使用 base64 缓冲区的 upload-file 会失败,且未指向 send (#123748) b9b6ca4
    • 为编码文件名保留 Discord 视频字幕 #101815
    • 使用特定路由的超时限制 Discord 语音消息上传 #102863
    • 对隐式线程遵循 Discord 论坛归档默认设置 #103033
    • 限制 Discord PluralKit 查找延迟 #104121
    • 保持 Discord 语音故障诊断有界且可读 #104230
    • fix(discord): 为受保护的网关元数据获取添加超时 #104580
    • 在 Discord 语音转录中保留表情符号 #104896
    • 在 100 条命令上限下保持 Discord 斜杠命令可部署 #105280
    • 尽早拒绝不支持的 Discord 线程归档时长 #107610
    • 在 Discord 语音参与者标签中保留完整表情符号 #108278
    • 防止跨 Gateway 进程重复部署 Discord 命令 #108381
    • 停止 Discord 在静默处理回合时的正在输入闪烁 #108449
    • 中止时立即停止 Discord READY 重试等待 #108561
    • 解析 Discord 论坛线程小部件目标 #108603
    • 在 Discord 中保持 Unicode 模型选择器分桶有效 #109514
    • 释放失败的 Discord Activity OAuth 响应 #109869
    • 当工作被取消时停止 Discord 速率限制重试 #109913
    • 对普通 Discord 消息跳过 PluralKit 查找 #111617
    • 拒绝格式错误的 PluralKit 消息信封 #111712
    • 拒绝 Discord 状态探测中的格式错误 UTF-8 #111734
    • 当水合失败时保留 Discord 机器人提及 #111860
    • 保留 Discord 组件等待器消息所有权 #117492
    • 澄清空的 Discord 消息搜索 #118195
    • 使用私有恢复消息解释 Discord 表单打开失败 #119657
    • fix(agents): 当 CLI 在 start 块发送输入时保留工具参数 #120737
    • 仅移除机器人自己的 Discord 表情回应 #120785
    • fix(discord): 格式错误的网关 HELLO 帧会终止机器人的套接字监听器 #121468
    • 当 Discord 角色投递回退时发出警告 #124650
    • 在错误回复后保留 Discord 进度草稿 #125140
    • 为仅媒体消息保留 Discord 回复上下文 #126204
    • fix(discord): 在文本回退后显示失败的语音留言 #127876
    • fix(discord): 在确认被拒绝后恢复问题回执 #128293
    • fix(discord): 刷新活动线程中过期的起始消息 #128404
    • fix(discord): 一致地分类公告线程 #128568
    • fix(discord): 报告实际已投递的消息 #128575
    • 缓存不可用的 Discord 线程起始消息 #128653
    • fix(discord): 遵循新论坛帖子的显式名称 #129294
    • fix(discord): 防止未完成代码中的意外提及 #129338
    • fix(discord): 遵循静默贴纸和线程回复投递 #129479
    • fix(discord): 在经典降级过程中保留组件附件名称 #129823
    • fix(discord): 保留贴纸投递回执 #129872
    • fix(discord): 重试失败的草稿预览清理 #130006
    • fix(discord): 在临时删除失败后移除迟到的预览 #130392
    • fix(discord): 在文本替换中保持提及标签为字面量 #130778

文档

- 修正 Fly.io Discord 频道示例 [#102129](https://github.com/openclaw/openclaw/pull/102129)
- 修正多智能体示例中的 Discord 频道键 [#106201](https://github.com/openclaw/openclaw/pull/106201)
- 记录 Discord 允许列表和 ambient-room 先决条件 [#113692](https://github.com/openclaw/openclaw/pull/113692)
- 移除已退役的 Discord 子智能体进度运行时 [#117802](https://github.com/openclaw/openclaw/pull/117802)
- 从文档中移除已退役的 Discord 配置键 [#118216](https://github.com/openclaw/openclaw/pull/118216)

</details>
Slack

Slack 进度现在从第一条状态到最终答案都保持在同一个对话中,将实时评论、工作步骤和答案保留在一条流式消息内,除非操作员选择更紧凑的替代方式。图表和表格也可以原生渲染,当 Slack 无法使用原生形式时,会保留可读文本。

一个组织安装的应用程序也可以服务于 Slack 授予它的 Enterprise Grid 工作区,消息、操作、审批和主动投递都会绑定到正确的工作区。当前对话之外的目标需要显式工作区,未经验证工作区身份的请求会被拒绝,中继模式以及组织级界面仍不受支持。

来源和完整变更列表

改进

  • 支持 Slack Enterprise Grid 组织级安装 #102372
  • 添加支持原生 Slack 渲染的可移植图表 #102635
  • 添加可移植表格展示块 #103583
  • 添加 Slack Agent View 支持,并兼容 Assistant View #103895
  • 加固 Slack 原生图表和表格投递 #104539
  • 添加可选的 Slack 在线状态问候 #108510
  • Slack 进度草稿使用共享实时状态和全新最终回复 #109336
  • 添加可选的 Slack 用户身份 #109837
  • 将 Slack 进度更新转为最终回复 #119480
  • 添加工作区范围的 Slack Grid 审批 #120942
  • 添加工作区范围的 Slack Grid 表情回应和置顶监听器 #120944
  • 按工作区路由 Slack Enterprise Grid 操作和事件 #121014
  • 添加自动的工作区安全 Slack Enterprise Grid 支持 #121373
  • 使实时 Slack 会话卡片成为默认 #122552
  • 将 Slack 进度统一到一条流式消息中 #122976
  • 添加仅评论的紧凑 Slack 进度 #126480
  • 在 Slack 音频片段中接受口语提及 #103416
  • 将 Slack 进度草稿转为最终回复 #119376
  • fix(slack): 允许从消息工具打开群组 DM #132928
  • 记录 Slack 正在输入表情回应失败 #103303

错误修复

  • 防止消息读取回退到错误的对话 #108637
  • 保留重复的 Slack 事件并重试瞬时失败 #116384
  • 保留 Slack 线程读取、编辑格式和完整回复 #116915
  • 在瞬时启动失败后恢复 Slack 身份 #117253
  • 将 Slack 交互绑定隔离到正确的对话 #118662
  • 按工作区路由 Slack Enterprise Grid 消息 #120087
  • 接受组织范围的 Slack 用户 ID #122934
  • 让 Slack 多方 DM 保持在同一个对话会话中 #102811
  • 在 API 边界保留 Slack ID #103214
  • 安全地停止停滞的 Slack 文件上传 #103442
  • 在交互后保留无关的 Slack 操作行 #103445
  • 使用读取范围的 Slack 查询获取对话元数据 #103468
  • 防止格式错误的 Slack 投递签名中断协调 #105492
  • 当机器人身份缺失时报告降级 Slack 健康状态 #105556
  • 为禁用的 Slack 频道记录结构化警告 #105790
  • 限制停滞的 Slack 启动身份检查 #105893
  • 限制 Slack 用户名缓存增长 #105978
  • 限制 Slack 目录和允许列表查询 #106643
  • 当 API 停滞时限制 Slack 读取操作 #107103
  • 保留排队的 Slack 回复 #107820
  • 让 Slack 健康检查保持在期限内 #107835
  • 使 Slack 事件准入在 Bolt 和中继之间持久化 #109910
  • 释放未读的 Slack 所有权检查响应 #111231
  • 防止 Slack CJK 文本中暴露 Markdown 强调标记 #111575
  • 在出站交接中保留原生 Slack 表格 #111955
  • 为旧版会话键恢复 Slack 线程上下文 #114009
  • 为智能体保留 Slack 附件类型和大小 #114502
  • fix(slack): 并发调度独立路由的线程 #114552
  • 限制停滞的 Slack 只读 API 调用 #115018
  • 防止较长的 Slack 编辑失败 #115027
  • 限制 Slack response_url 正文检查 #115093
  • 保留具有自定义身份的 Slack 预览 #115114
  • 在入站消息中保留粘贴的 Slack 表格 #115163
  • 去重同一帖子的 Slack 消息和提及事件 #115302
  • 防止重复的 Slack 群组 DM 提及 #115468
  • 防止重复的 Slack 群组 DM 提及回复 #115528
  • 在 Gateway 启动重放期间恢复 Slack 回复 #115991
  • 私下说明 Slack 频道允许列表拒绝 #116618
  • 在 Slack 群组 DM 线程后续中保留上下文 #116660
  • 在瞬时启动身份验证失败后恢复 Slack 身份 #117060
  • 重试 Slack 线程查询,而不是静默丢弃消息 #117135
  • 防止停滞的 Slack 在线状态检查阻塞关闭 #117478
  • 恢复 Slack 工作区相对附件 #117728
  • 保留完整的 Slack 原生数据回退 #117809
  • 将 Slack 模态框提交和关闭投递给智能体 #118123
  • 最终确定实际已投递的 Slack 问题卡片 #118450
  • 在回退后清理部分启动的 Slack 流 #118617
  • 使用隔离的信任边界恢复 GovSlack 媒体 #118695
  • 在应用限制之前授权 Slack 读取 #118736
  • 渲染 Slack 进度 Markdown,避免多余的反斜杠 #119373
  • 为未命名的 Slack 上传添加文件扩展名 #119399
  • 让 Slack 回复保持在较新的人类消息之下 #119832
  • 隔离 Slack 线程缓存并安全持久化频道重命名 #120022
  • 当 Codex 插件被禁用时保持 Slack 轮次运行 #120312
  • 防止 Slack 目录分页循环 #120445
  • 防止 Slack 授权在游标循环上挂起 #120686
  • 为 Enterprise Grid 启用团队范围的 Slack exec 审批 #120874
  • 当 Slack 转发图像不可用时告知智能体 #122108
  • 在瞬时授权查询后重试 Slack 成员事件 #122356
  • 将 Slack 表情回应事件投递给线程范围的轮次 #122363
  • 防止重复的 Slack Socket Mode 连接 #122624
  • 为强制 Slack 上传保留原始图像字节 #122667
  • 停止在活跃对话中重复 Slack 故障通知 #122782
  • 防止 Slack 进度卡片卡在 Working #122816
  • 将更新后的全局设置应用于新的 Slack 消息 #123373
  • 为结构化消息保留 Slack 调度保管 #123710
  • 从已完成的 Slack 进度卡片中移除工具调用回执 #123851
  • 恢复 Slack Enterprise Grid 上的机器人消息投递 #125009
  • 要求已确认的 Slack 消息身份才能投递成功 #125762
  • fix(slack): 保留较长的旧版交互式文本 #127994

    • fix(slack): 让失败消息的重试保留在原始线程中 #128182
    • fix(slack): 统一频道账户就绪状态 #128322
    • fix(slack): 防止长消息编辑时静默丢失文本 #128613
    • fix(slack): 在推理轮次之间保持部分预览稳定 #128626
    • fix(slack): 让已编辑和已删除的消息保留在原始线程中 #128768
    • fix(slack): 拒绝在请求的会话之外下载文件 #128903
    • fix(slack): 在子代理完成后唤醒已让出的父级 #129023
    • fix(slack): 防止直接附件和转发附件之间出现重复文件 #129065
    • fix(slack): 让显式回复落入请求的线程 #129069
    • fix(slack): 防止重复的问题按钮和多余消息 #129445
    • fix(slack): 停止向 HTTP 入门流程提供无效的 Socket 清单 #130234
    • fix(slack): 在富文本提及中保留用户名 #130816
    • fix(slack): 记录失败和被省略附件的原因 #130857
    • fix(slack): 在编辑和预览中保留表格格式 #130979
    • fix(slack): 停止将已消费的媒体泄漏到卡片和文本发送中 #131586
    • fix(slack): 标记部分不可用的线程文件 #131896
    • 防止重复的 Slack 回复控件 #101474
    • 在 App Home 中显示当前活动的 Slack 命令 #102340
    • 在不破坏独立消息线程的情况下修正 Slack 回复元数据 #102905
    • 将 Slack 评论与工具进度分开 #103995
    • 保留规范的 Slack 块投递回执 #104563
    • 优先使用已配置的 Slack 斜杠命令 #104736
    • 隐藏房间事件中具有误导性的 Slack 正在输入指示器 #105813
    • 在传输阶段中强制执行 Slack 上传超时 #106496
    • 当环境变量覆盖为空时使用默认 Slack 转发器 #110675
    • 防止 Slack 目录分页挂起 #115056
    • 让 Slack 出站钩子先于预览执行 #115357
    • 停止 doctor 中错误的 Slack 消息丢失警告 #115563
    • 在 App Home 中保持已配置的 Slack 斜杠命令一致 #118735
    • 保留 Slack 文件上传的说明文字 #121047
    • 让已加入的 Slack 线程在 24 小时后仍保持活动 #121708
    • fix(slack): 从流式回复中移除 Exec 失败痕迹 #122827
    • 让 Slack 线程回复保持在路由到的代理上 #123202
    • 保持缓存的 Slack 身份和允许列表实时有效 #123403
    • 移除 Slack 传输层的 NO_REPLY 特殊情况 #124561
    • 减少 Slack 原生任务卡片中的重复文本 #125168
    • 在静默轮次后移除过期的 Slack 进度 #125494
    • 防止部分投递失败后出现重复 Slack 内容 #127130
    • fix(slack): 让私有菜单回复保留在原始线程中 #128341
    • fix(slack): 遵循 HTTP 设置凭据 #128659
    • fix(slack): 多部分回执将溢出文本误分类为媒体 #129089
    • fix(slack): 在下载旁边保留不可用的附件 #129708
    • fix(slack): 重试过期的草稿清理 #129819
    • fix(slack): 保留所有多部分操作发送回执 #130606

    文档

    • 说明 Slack 群组 DM 机器人成员资格要求 #101944
    • 修正 Slack 频道配置示例 #103491
    • 修正 Slack Socket Mode 调优和清理指南 #119328
    • docs(slack): 使用规范的 postAs 键 #128448
WhatsApp

WhatsApp 现在可以从已链接的账户列出群组,而无需让人翻找日志或邀请链接;当 OpenClaw 已经拥有该账户时,它会避免打开竞争连接。如果 OpenClaw 在接受传入消息后重启,待处理工作可以继续,而后续事件不会抢先执行;多部分回复会保留实际成功的部分和回执,而不是在某一部分失败后重放整个响应。

来源与完整变更列表 **Bug 修复** - 从已链接的账户中发现 WhatsApp 群组 [#109886](https://github.com/openclaw/openclaw/pull/109886) - 在重启后保留 WhatsApp 入站消息 [#110418](https://github.com/openclaw/openclaw/pull/110418) - 保持 WhatsApp 投递结果和回执一致 [#118114](https://github.com/openclaw/openclaw/pull/118114) - 保持连接前的 WhatsApp 消息可重放 [#104450](https://github.com/openclaw/openclaw/pull/104450) - 保留底层的 WhatsApp 断开连接错误 [#105399](https://github.com/openclaw/openclaw/pull/105399) - 在 WhatsApp 负载中支持复数媒体选择 [#105576](https://github.com/openclaw/openclaw/pull/105576) - 使用共享媒体辅助函数加固 WhatsApp 媒体发送 [#107017](https://github.com/openclaw/openclaw/pull/107017) - 迁移没有通道配置的旧版默认通道允许列表 [#108453](https://github.com/openclaw/openclaw/pull/108453) - 防止 WhatsApp 关闭在预先中止的停止上挂起 [#109903](https://github.com/openclaw/openclaw/pull/109903) - 同时支持 WhatsApp 文本提及和成员标签 [#110412](https://github.com/openclaw/openclaw/pull/110412) - 在运行时重载期间保留活动的 WhatsApp 连接 [#110762](https://github.com/openclaw/openclaw/pull/110762) - 在 WhatsApp 消息中正确渲染 CommonMark [#113010](https://github.com/openclaw/openclaw/pull/113010) - 保留可操作的 WhatsApp 远程登出状态 [#114445](https://github.com/openclaw/openclaw/pull/114445) - 阻止相同的 WhatsApp 回复抑制其他聊天 [#115574](https://github.com/openclaw/openclaw/pull/115574) - 以原生格式发送仅包含文件名的 WhatsApp 媒体 [#115725](https://github.com/openclaw/openclaw/pull/115725) - 在投递前保留排队中的 WhatsApp 消息 [#116179](https://github.com/openclaw/openclaw/pull/116179) - 当输入状态失败时发送 WhatsApp 消息 [#116739](https://github.com/openclaw/openclaw/pull/116739) - 保留 WhatsApp 选择和原生媒体类型 [#116816](https://github.com/openclaw/openclaw/pull/116816) - 恢复 WhatsApp 交互式提及、投票、视频笔记和引用媒体 [#116901](https://github.com/openclaw/openclaw/pull/116901) - 保留 WhatsApp 消息信封行为 [#116989](https://github.com/openclaw/openclaw/pull/116989) - 防止在已接受投递后出现重复的 WhatsApp 回复 [#117198](https://github.com/openclaw/openclaw/pull/117198) - 防止 WhatsApp 自身回声触发重复工作 [#117228](https://github.com/openclaw/openclaw/pull/117228) - 保留 WhatsApp 群组参与者元数据 [#117234](https://github.com/openclaw/openclaw/pull/117234) - 保持 WhatsApp 附件失败日志安全脱敏 [#117939](https://github.com/openclaw/openclaw/pull/117939) - 停止 WhatsApp 在重试耗尽后重新连接 [#118659](https://github.com/openclaw/openclaw/pull/118659) - 在长时间活动轮次期间保持输入状态可见 [#120337](https://github.com/openclaw/openclaw/pull/120337) - 阻止 WhatsApp 丢弃具有重复文本的不同消息 [#122785](https://github.com/openclaw/openclaw/pull/122785) - 在插件替换后重新加载 WhatsApp 运行时代码 [#126867](https://github.com/openclaw/openclaw/pull/126867) - fix(whatsapp): 为附件上传保留文件名和媒体类型 [#128186](https://github.com/openclaw/openclaw/pull/128186) - fix(whatsapp): 当 Markdown 格式化未返回任何块时保留文本 [#129275](https://github.com/openclaw/openclaw/pull/129275) - fix(whatsapp): 在带说明的替换中保留未匹配的附件 [#131672](https://github.com/openclaw/openclaw/pull/131672) - 在表情符号边界附近保持 WhatsApp 回声诊断有效 [#102603](https://github.com/openclaw/openclaw/pull/102603) - 准确报告 WhatsApp 登出无操作 [#105929](https://github.com/openclaw/openclaw/pull/105929) - 防止 WhatsApp doctor 检查挂起 [#109243](https://github.com/openclaw/openclaw/pull/109243) - 为仅 LID 发送者恢复 WhatsApp 群组表情回应 [#110053](https://github.com/openclaw/openclaw/pull/110053) - 防止并发 WhatsApp 源账户启动失败 [#111094](https://github.com/openclaw/openclaw/pull/111094) - 在当前会话中恢复 WhatsApp 表情回应 [#113178](https://github.com/openclaw/openclaw/pull/113178) - 当引用文本不可用时保留 WhatsApp 回复引用 [#115517](https://github.com/openclaw/openclaw/pull/115517) - 使 WhatsApp QR 登录对语法受限模型可用 [#115656](https://github.com/openclaw/openclaw/pull/115656) - 跨 PN 和 LID 别名渲染引用的 WhatsApp 自聊天回复 [#116814](https://github.com/openclaw/openclaw/pull/116814) - 为自创建消息恢复 WhatsApp 表情回应 [#117697](https://github.com/openclaw/openclaw/pull/117697) - 安全地清除并迁移每个 WhatsApp 凭据类 [#118610](https://github.com/openclaw/openclaw/pull/118610) - 在不影响群组的情况下支持已禁用的 WhatsApp 自聊天 [#118711](https://github.com/openclaw/openclaw/pull/118711) - 在登出 WhatsApp 账户前进行确认 [#122437](https://github.com/openclaw/openclaw/pull/122437) - fix(whatsapp): 防止成员资格变更后出现过时的群组提及 [#128283](https://github.com/openclaw/openclaw/pull/128283) - fix(whatsapp): 避免在未终止的行内代码中出现提及 [#129281](https://github.com/openclaw/openclaw/pull/129281) - 向已发送消息钩子报告 WhatsApp 原生回复 [#97728](https://github.com/openclaw/openclaw/pull/97728) **文档** - 澄清 WhatsApp 输入状态清理时机 [50cc620](https://github.com/openclaw/openclaw/commit/50cc620) - 记录如何检查和验证 wacli 消息 [#116410](https://github.com/openclaw/openclaw/pull/116410) - docs(whatsapp): 记录规范的确认表情回应键 [#118161](https://github.com/openclaw/openclaw/pull/118161)
Signal

Signal 回复在启用引用时,会在普通、分块、媒体和持久化投递中保留其原生引用块。崩溃前刚刚收到的消息可以从本地存储恢复,投递失败的接收者会被报告,而不是消失在虚假的成功状态中。群发在任一成员收到消息后仍保持保守策略,因此单个接收者失败不会导致整条回复被重复发送给其他人。

来源和完整变更列表

缺陷修复

  • 在 Signal 中保留原生引用回复 #105347
  • 在临时会话冲突后重试 Signal 消息 #103218
  • 在监控进程关闭期间保留已接受的 Signal 消息 #103967
  • 防止停滞的 Signal 响应挂起操作 #104122
  • 在输出块之间保留 Signal 守护进程诊断信息 #104152
  • 在路由和发送期间保留 Signal 用户名目标 #107365
  • 在容器握手停滞后重新连接 Signal #107386
  • 在活动运行期间保持 Signal 控件响应 #107422
  • 通过请求超时限制缓慢的 Signal REST 响应 #109047
  • 在接收至分发崩溃后恢复 Signal 消息 #109907
  • 在防抖的 Signal 消息中保留换行 #110090
  • 保留 Signal 反向代理路径前缀 #110495
  • 在关闭期间保持 Signal 重试的所有权 #110629
  • 保留 Signal 入口交接和命名账户频道设置 #111449
  • 显示失败的 Signal 接收者投递 #111960
  • 在保存前拒绝格式错误的 Signal 附件 #114883
  • 保留 Signal 附件的原始文件名 #115107
  • 修复 Signal 账户健康状态、表情回应所有权和跳过消息历史 #116914
  • 在模糊失败后防止重复的 Signal 引用消息 #117134
  • 通过 Signal 投递已授权的工作区附件 #117895
  • 防止跨发送者别名重复处理 Signal #118970
  • 在关闭期间保留已接受的 Signal 消息 #118975
  • 在后续回复块失败后保留 Signal 提示 #126160
  • fix(signal):保留在繁忙通道后重新投递的消息 #128093
  • fix(signal):在临时 Gateway 失败后重放审批表情回应 #130134
  • 让 Signal 群组提及可靠地唤醒机器人 #96738
  • 清理并解除 Signal CLI 发布安装的阻塞 #103339
  • 尽早拒绝不支持的 Signal 消息操作 #104788
  • 及时释放失败的 Signal CLI 下载连接 #109442
  • 干净地处理格式错误的 Signal CLI 发布元数据 #110824
  • 将 Signal 表情回应保留在路由目标上 #112607
  • 将多行 Signal 预览保留在一行日志中 #114881
  • 在非交互式设置期间验证并规范化 Signal 账户 #118932
  • fix(signal):在启动前报告受管守护进程端口冲突 #124015
  • 在 UUID 和电话别名之间保持 Signal 配对 #78022

文档

  • 记录 Signal 非交互式设置标志 #102114
iMessage 和 BlueBubbles

iMessage 现在是官方可安装插件,在从核心移出时保留现有配置和状态。符合条件的审批请求可以使用原生 Messages 投票,而旧版桥接、SMS 和失败的投票发送仍保留现有的文本、表情回应或命令回退。

远程 Mac 配置也会将附件保留在正确的现有聊天中,并且可以在不与运行 OpenClaw 的机器共享文件系统的情况下使用受支持的远程路径和操作,同时崩溃前已存储的传入消息可以重放。新配置仍需要在已登录的 Mac 上安装插件和 imsg,并且它与 iOS 和 macOS 上的 OpenClaw 聊天应用保持独立。

来源和完整变更列表

改进

  • 添加原生 iMessage 审批投票 #112714
  • 将 iMessage 从核心迁移到官方插件 #117101
  • 在投票模式下统一 iMessage 审批详情的样式 #116221

错误修复

- 在 Gateway 崩溃时保持 iMessage 投递 [#110409](https://github.com/openclaw/openclaw/pull/110409)
- iMessage 附件到达正确的现有聊天 [#115006](https://github.com/openclaw/openclaw/pull/115006)
- 保留 iMessage 传输、失败和语音意图 [#116889](https://github.com/openclaw/openclaw/pull/116889)
- 在 iMessage 回复中保留带围栏的角色键 [#117159](https://github.com/openclaw/openclaw/pull/117159)
- 在聊天数据库替换后回退 iMessage 游标 [#117788](https://github.com/openclaw/openclaw/pull/117788)
- 使基于 SSH 的 iMessage 发送和操作可靠 [#121038](https://github.com/openclaw/openclaw/pull/121038)
- 从权威历史记录修复无锚点的 iMessage 路由 [#104218](https://github.com/openclaw/openclaw/pull/104218)
- 保留拆分后的 iMessage 权限诊断 [#107393](https://github.com/openclaw/openclaw/pull/107393)
- 将 iMessage 操作保留在当前会话中 [#107773](https://github.com/openclaw/openclaw/pull/107773)
- 防止快速模式进度进入 iMessage 聊天历史 [#110052](https://github.com/openclaw/openclaw/pull/110052)
- 防止延迟回退发送后出现重复 iMessage [#110853](https://github.com/openclaw/openclaw/pull/110853)
- 修正 iMessage 出站 Markdown 格式 [#113138](https://github.com/openclaw/openclaw/pull/113138)
- 向 agent 显示完整的 iMessage 投票选择 [#114714](https://github.com/openclaw/openclaw/pull/114714)
- 保留 iMessage 附件的原始文件名 [#117197](https://github.com/openclaw/openclaw/pull/117197)
- 保留 iMessage 附件名称和已接受的送达回执 [#117238](https://github.com/openclaw/openclaw/pull/117238)
- 保留 iMessage 送达回执和结果 [#117282](https://github.com/openclaw/openclaw/pull/117282)
- 启动明确启用的 iMessage 账户 [#118944](https://github.com/openclaw/openclaw/pull/118944)
- 仅对真正共享的 iMessage 监听器去重 [#118974](https://github.com/openclaw/openclaw/pull/118974)
- fix(imessage): 拒绝格式错误的 base64 附件缓冲区 [#120216](https://github.com/openclaw/openclaw/pull/120216)
- 防止 iMessage 回声保护丢弃真实回复 [#120260](https://github.com/openclaw/openclaw/pull/120260)
- 保留 iMessage 附件和语音消息标识 [#120739](https://github.com/openclaw/openclaw/pull/120739)
- 保留可重试安全的 iMessage 未发送结果 [#122672](https://github.com/openclaw/openclaw/pull/122672)
- 将自动 iMessage 回复保持在入站 SMS 路由上 [#125633](https://github.com/openclaw/openclaw/pull/125633)
- 拒绝模糊的 iMessage 接收者 [#126564](https://github.com/openclaw/openclaw/pull/126564)
- fix(imessage): 防止自聊天去重触发循环限制器 [#126856](https://github.com/openclaw/openclaw/pull/126856)
- fix(imessage): 防止普通引用消息消失 [#129450](https://github.com/openclaw/openclaw/pull/129450)
- fix(imessage): 在线程回复中保留原始消息上下文 [#129917](https://github.com/openclaw/openclaw/pull/129917)
- fix(imessage): 在临时 Gateway 故障后重放批准反应 [#130893](https://github.com/openclaw/openclaw/pull/130893)
- 从 iMessage 回复中移除内部工具痕迹 [#101430](https://github.com/openclaw/openclaw/pull/101430)
- 保持 iMessage CLI 错误尾部为有效 Unicode [#102626](https://github.com/openclaw/openclaw/pull/102626)
- 在其辅助进程关闭后让 iMessage 关闭尽快完成 [#108909](https://github.com/openclaw/openclaw/pull/108909)
- 当 HOME 为空时检测 iMessage 远程包装器 [#111715](https://github.com/openclaw/openclaw/pull/111715)
- 解释不支持的 iMessage 私密状态探测 [#115526](https://github.com/openclaw/openclaw/pull/115526)
- 当 CAF 暂存失败时保留 iMessage TTS 回退 [#126378](https://github.com/openclaw/openclaw/pull/126378)
- fix(imessage): 保留 dunder 引用链接 [#130547](https://github.com/openclaw/openclaw/pull/130547)
- fix(imessage): 在设置期间保留非 Homebrew 的 imsg [#131429](https://github.com/openclaw/openclaw/pull/131429)

**文档**

- 移除已退役的 OpenClaw iMessage 拆分发送合并 [#108436](https://github.com/openclaw/openclaw/pull/108436)
- 使 iMessage 恢复文档与持久化 SQLite 入站保持一致 [#111002](https://github.com/openclaw/openclaw/pull/111002)

</details>
Feishu 和 Lark

在 Feishu 中,agent 可以重新发送该机器人账户之前收到的贴纸,并且当操作员添加标签时,可以通过关键词找到正确的贴纸。已接受的 Feishu 消息和评论也可以在重启后恢复,流式卡片会保留最新已接受版本,不支持的图片格式仍可作为文件附件保留,而不是被丢弃。贴纸操作和标签为可选启用,不会追溯整理现有集合;贴纸和评论功能专门针对 Feishu 进行了验证,而不是所有 Lark 路径。

来源和完整变更列表

改进

  • feat(feishu): 允许 agent 重新发送已收到的贴纸 #130374
  • feat(feishu): 通过已配置关键词查找已收到的贴纸 #130498
  • 将 Feishu 重放保护迁移到核心去重 #104384
  • 可选启用 Feishu 机器人间会话 #89783
  • 添加可选启用的 Feishu VC 会议邀请自动加入 #92340

错误修复

  • 防止重复的 Feishu 流式卡片快照 #103915
  • 在重启之间保留 Feishu 入站消息 #110864
  • 使 Feishu 投递和媒体处理准确 #117023
  • 将 Feishu 原生卡片保留在主题线程中 #102804
  • 遵守 Feishu 流式卡片的已配置超时 #102948
  • 限制 Feishu 发送者名称缓存 #103513
  • 恢复 Feishu WebSocket 存活检测 #103763
  • 加固 Feishu 文档图片和 Markdown 处理 #104663
  • 在 Form 模式下安全渲染 Feishu 群组策略 #107336
  • 通过会话投递 Feishu 私信回复 #109637
  • 在身份故障期间保持 Lark Drive 评论提及可用 #112807
  • 在原生最终化后结算 Feishu 投递钩子 #113152
  • 从转发的 Feishu 卡片恢复可读内容 #115136
  • Feishu 群组卡片按钮通过提及门控 #116105
  • 保留 Feishu 消息创建时间 #116156
  • 保留完整的 Feishu 反应上下文 #116918
  • 防止多部分附件出现重复 Feishu 回复 #117196
  • 保留 Feishu 出站投递进度和回复目标 #117223
  • 为自定义 Feishu API 域保留端口和路径 #117278
  • fix(feishu): 通过正确的 SDK 方法路由富文本帖子编辑 #117414
  • 通过 Feishu 投递已批准的工作区附件 #117778
  • fix(feishu): 停止重复的文档子项分页 #121124
  • fix(feishu): 提升发送附件别名而不是静默丢弃 #125664
  • fix(feishu): 保留所有已接受的语音回退内容 #128130
  • fix(feishu): 当消息回执缺失时报告已投递回复 #128213
  • fix(feishu): 当卡片回执缺失时防止空白重复回复 #128274
  • fix(feishu): 当看似语音媒体是文件时保留字幕 #128771
  • fix(feishu): 在文档评论中投递演示文稿 #129843
  • fix(feishu): 使用已配置渲染投递长消息工具回复 #129902
  • fix(feishu): 在消息卡片中保留不可用控件 #130641
  • fix(feishu): 标记服务器转写的音频,以便核心跳过重复 ASR #130953
  • fix(feishu): 拆分超大 Markdown 卡片而不丢失内容或回执 #131106
  • fix(feishu): 当 root_id 缺失时在入站防抖键中包含 thread_id #131183
  • 通过已配置代理路由 Feishu SDK 流量 #86386
  • 恢复 Feishu 文件和图片附件投递 #95514
  • 防止 Feishu 媒体回退引用泄露 #98251
  • 防止 Feishu 媒体回复消失 #98320
  • 保留 Feishu Markdown 帖子中预期的换行 #99394
  • 报告意外的 Feishu 身份恢复失败 #102185
  • 使用 Feishu Auto-TTS 语音留言保留一条可读文本回复 #103781
  • 限制停滞的 Feishu 应用注册请求 #105549
  • 防止停滞的 Feishu 媒体下载挂起消息 #106541
  • 添加隐私安全的 Feishu 消息解析诊断 #107947
  • 当账户停止时停止 Feishu 评论重试 #108408
  • 缓存无法访问的 Feishu 发送者名称查询 #111700
  • 检查规范的 Feishu doctor 转录 #115148
  • 保持有意设置的 Feishu NO_REPLY 轮次静默 #115530
  • 保留有效的空 Feishu 入站消息 #115583
  • 及时关闭被拒绝的 Feishu 流式卡片连接 #117312
  • 使用真实的 Feishu 消息 ID 进行反应主题水合 #117685
  • 将已禁用的 Feishu 账户排除在模型工具路由之外 #126412
  • fix(feishu): 保留已接受的文档评论投递身份 #128284

    • fix(feishu): 在文档评论回复中保留附件 #129259
    • fix(feishu): 按顺序投递富文本帖子附件且不重复下载 #129472
    • fix(feishu): 在线程回复中投递附件别名 #130023
    • fix(feishu): 在选定的回退卡片中保留命令 #130515
Mattermost

Mattermost 现在可以在操作员启用该功能后,从机器人已经可以访问的频道中读取有界、分页的历史记录。会重写或取消回复的集成现在会在投递前完成该工作,防止早期预览暴露钩子移除或更改的内容。已完成的发送还会在预览、操作、媒体和持久化路径中保留真实的 Mattermost 帖子身份。

来源和完整变更列表

改进

  • 添加受保护的 Mattermost 频道历史记录读取 #110875
  • 添加按聊天类型可选的 Mattermost 私信线程 #98111
  • 重新加载时仅重启已更改的 Mattermost 账户 #99312

错误修复

  • 防止 Mattermost 钩子泄露重写前预览 #114968
  • 保留 Mattermost 出站投递结算 #116142
  • 为 Mattermost REST 请求添加截止时间 #102027
  • 发送带有空白附件占位符的 Mattermost 文本 #108281
  • 将 Mattermost 表情回应保留在所选会话中 #108634
  • 在工具警告后保留已确定的 Mattermost 回复 #109555
  • 在重启之间保留已接收的 Mattermost 帖子 #110386
  • 保留符合策略的 Mattermost 群组历史 #115773
  • 在 Mattermost 消息信封中遵循已配置时区 #116145
  • 按发送者隔离 Mattermost 消息 #124531
  • fix(mattermost): 将机器人提及匹配锚定到用户名边界 #129555
  • fix(mattermost): 下载失败时保留服务器文件名 #129556
  • fix(mattermost): 普通回复静默丢弃按钮和展示内容 #129579
  • 保留 Mattermost 块流式文本和工具帖子 #87449
  • 将 Mattermost 私有频道线程保留在一个会话中 #96645
  • 接受 Mattermost 命令文本模式并修复 CI 2c95bd2
  • 在 Mattermost 调试预览中保持表情符号完整 #101630
  • 限制 Mattermost 查找缓存 #101740
  • 保持 Mattermost 斜杠命令诊断 Unicode 安全 #102607
  • 限制 Mattermost 不透明目标缓存增长 #103258
  • 阻止停滞的 Mattermost 附件阻塞消息 #104575
  • 遵循已配置的 Mattermost 回调绕过路径 #104618
  • 保留 Mattermost 私有会话来源 #115726
  • 防止 Mattermost 消息到达错误团队的频道 #118622
  • 为未命名的 Mattermost 上传保留文件扩展名 #119535
  • fix(mattermost): 上传失败时代理媒体回复静默丢弃附件 #125338
  • fix(mattermost): react 操作拒绝原始表情符号字形 #125370
  • fix(mattermost): 带退避地显示 websocket 身份验证失败 #129501
  • 拒绝不安全的 Mattermost API 路径段 #98390
Matrix

Matrix 回复现在可以使用原生剧透、下划线、表格,以及最多 100 个可发现的房间或个人自定义表情。更重要的是,当加密不可用时,加密房间现在会明显失败,而不是悄悄回退到纯文本、附件、文件名或媒体元数据。大表格仍可选择自己的可读格式回退,而不会削弱房间的保密边界。

来源和完整变更列表

改进

  • 添加原生 Matrix 剧透、下划线和表格 #113199
  • Matrix 自定义表情发现和缓存的 Discord 表情列表 #128518
  • 将 Matrix 重放保护迁移到共享去重系统 #104391
  • 添加更安全的 Matrix 恢复密钥输入,并拆分 E2EE QA 所有权 #107828

Bug 修复

- 迁移 Matrix 去重状态,而无需重新扫描旧数据库 [#113487](https://github.com/openclaw/openclaw/pull/113487)
- 阻止向加密房间发送明文 Matrix 消息 [#118609](https://github.com/openclaw/openclaw/pull/118609)
- 在关闭期间停止 Matrix 启动身份重试 [#110115](https://github.com/openclaw/openclaw/pull/110115)
- 保留 Matrix 线程分页令牌 [#111243](https://github.com/openclaw/openclaw/pull/111243)
- 在旧版快照升级期间保留 Matrix 加密密钥 [#112919](https://github.com/openclaw/openclaw/pull/112919)
- 在已稳定的重启中跳过历史 Matrix 根节点 [#113489](https://github.com/openclaw/openclaw/pull/113489)
- 渲染 Matrix 历史并折叠流式编辑 [#115014](https://github.com/openclaw/openclaw/pull/115014)
- 当出站钩子可能修改回复时隐藏 Matrix 草稿 [#115240](https://github.com/openclaw/openclaw/pull/115240)
- 防止私有推理到达 Matrix 房间 [#115553](https://github.com/openclaw/openclaw/pull/115553)
- 报告 Matrix 自动回复投递结算 [#116271](https://github.com/openclaw/openclaw/pull/116271)
- 保留 Matrix 线程和会话所有权 [#116802](https://github.com/openclaw/openclaw/pull/116802)
- 修复 Matrix 音频时长、反应分页和成员名称 [#116890](https://github.com/openclaw/openclaw/pull/116890)
- 在丢失成功响应后恢复 Matrix 持久发送 [#117008](https://github.com/openclaw/openclaw/pull/117008)
- 回复有效的纯文本 Matrix 提及 [#117764](https://github.com/openclaw/openclaw/pull/117764)
- 保留完整的 Matrix 多部分投递回执 [#118128](https://github.com/openclaw/openclaw/pull/118128)
- 保留缩进的 Matrix 代码而不发送提及 [#118497](https://github.com/openclaw/openclaw/pull/118497)
- 使 Matrix 加密客户端关闭具有确定性 [#119570](https://github.com/openclaw/openclaw/pull/119570)
- 跨账户隔离共享 Matrix 客户端 [#119667](https://github.com/openclaw/openclaw/pull/119667)
- 在附件扇出中保留 Matrix 投递身份 [#121006](https://github.com/openclaw/openclaw/pull/121006)
- 当替换失败时保持 Matrix 流式回复可见 [#122850](https://github.com/openclaw/openclaw/pull/122850)
- fix(matrix): 拦截格式错误的投票答案,而不是抛出 TypeError [#123231](https://github.com/openclaw/openclaw/pull/123231)
- 接受无后缀的 Matrix Room v12 ID [#123931](https://github.com/openclaw/openclaw/pull/123931)
- 在断开同步重启后恢复 Matrix 提供者 [#125362](https://github.com/openclaw/openclaw/pull/125362)
- 在延迟操作完成后恢复 Matrix 重试 [#126712](https://github.com/openclaw/openclaw/pull/126712)
- fix(matrix): 防止投票历史在重复游标上挂起 [#128214](https://github.com/openclaw/openclaw/pull/128214)
- fix(matrix): 保留转义字符、链接和图片标签 [#128382](https://github.com/openclaw/openclaw/pull/128382)
- fix(matrix): 当附件列表为空时发送回退媒体 [#128479](https://github.com/openclaw/openclaw/pull/128479)
- fix(matrix): 在回复和线程上下文中显示已编辑消息 [#128763](https://github.com/openclaw/openclaw/pull/128763)
- fix(matrix): 让后续消息引导活动轮次 [#128907](https://github.com/openclaw/openclaw/pull/128907)
- fix(matrix): 当线程功能禁用时保留显式回复 [#129415](https://github.com/openclaw/openclaw/pull/129415)
- fix(matrix): 在 Gateway 故障后保留批准反应 [#129879](https://github.com/openclaw/openclaw/pull/129879)
- fix(matrix): 在房间历史中保留附件标记 [#130123](https://github.com/openclaw/openclaw/pull/130123)
- fix(matrix): 自动回复丢失原生表格格式 [#130820](https://github.com/openclaw/openclaw/pull/130820)
- fix(sessions): 在规范化更新期间保留不同房间 [#132242](https://github.com/openclaw/openclaw/pull/132242)
- 保留 Matrix 反向代理 homeserver 路径 [#93516](https://github.com/openclaw/openclaw/pull/93516)
- 当解密密钥迟到时恢复 Matrix 消息 [#94416](https://github.com/openclaw/openclaw/pull/94416)
- 保持截断的 Matrix 文本 UTF-16 安全 [#102395](https://github.com/openclaw/openclaw/pull/102395)
- 正确解析混合大小写的 Matrix JSON 响应类型 [#105470](https://github.com/openclaw/openclaw/pull/105470)
- 在 Matrix 引导诊断中保留有效 UTF-8 [#105475](https://github.com/openclaw/openclaw/pull/105475)
- 恢复排队后续消息的 Matrix 草稿预览 [#108094](https://github.com/openclaw/openclaw/pull/108094)
- 拒绝过大的管道 Matrix 恢复密钥 [#108120](https://github.com/openclaw/openclaw/pull/108120)
- 当响应清理失败时保留 Matrix 重定向 [#111105](https://github.com/openclaw/openclaw/pull/111105)
- 接受文档中描述的自动 Matrix 批准模式 [#115676](https://github.com/openclaw/openclaw/pull/115676)
- 在投递后显示 Matrix 输入刷新失败 [#117059](https://github.com/openclaw/openclaw/pull/117059)
- 忽略无效的 Matrix 环境账户转义 [#120428](https://github.com/openclaw/openclaw/pull/120428)
- 当 mediaMaxMb 为零或负数时允许 Matrix 发送媒体 [#120466](https://github.com/openclaw/openclaw/pull/120466)
- 在报告成功之前对 Matrix 通道探测进行身份验证 [#123766](https://github.com/openclaw/openclaw/pull/123766)
- 在干净关闭期间保留 Matrix 线程活动 [#125039](https://github.com/openclaw/openclaw/pull/125039)
- fix(matrix): 等待持久化关闭 [#129605](https://github.com/openclaw/openclaw/pull/129605)
- fix(matrix): 保留媒体 URL 为空的加密附件 [#129739](https://github.com/openclaw/openclaw/pull/129739)
- fix(matrix): 接受带有共享默认别名的 env SecretRefs [#132352](https://github.com/openclaw/openclaw/pull/132352)
Microsoft Teams

已配置的 Microsoft Teams 审批人可以在请求发起的聊天或频道线程中,通过原生 Adaptive Card 批准或拒绝符合条件的 exec 和插件请求,并在同一张卡片上查看已记录的结果。引用回复、附件、流式结果和重复处理也会保持绑定到原始会话。这些卡片仅覆盖已配置的 exec 和插件请求,并且需要有效的身份验证、权限、租户授权和路由。

来源与完整变更列表

改进

  • feat(msteams):为 exec 和插件审批提供原生 Adaptive Card 批准/拒绝 #129997

Bug 修复

  • fix(channels):对不可用的凭据文件进行降级处理 #127539
  • 在 Microsoft Teams 回复中恢复引用消息上下文 #101856
  • 在空白折叠后保留 Teams 流式数据块 #102357
  • 识别大小写混合的 Microsoft Teams 附件 #102431
  • 限制停滞的 Microsoft Teams 文件同意上传 #104120
  • 限制 MS Teams SharePoint 文件发送,并在共享错误时失败关闭 #104288
  • 为 Microsoft Teams 令牌获取设置截止时间 #106386
  • 忽略空白的 Microsoft Teams 证书路径 #109112
  • 在确认前保留 Microsoft Teams 活动 #110357
  • 保留同名的 Teams SharePoint 上传 #113560
  • 防止 Microsoft Teams 预览绕过出站钩子 #115551
  • 防止 Teams 流式传输失败后出现重复的长回复 #115669
  • 恢复 Microsoft Teams 会话允许列表 #115746
  • 防止重复的 Microsoft Teams 最终回复 #116398
  • 保留已确认的 Microsoft Teams 流式结束处理 #116515
  • 将 Microsoft Teams 卡片和投票保留在频道线程中 #117516
  • 在 Microsoft Teams 中投递已批准的工作区附件 #117776
  • 可靠地释放频道投递资源 #117855
  • 遵守 Teams 频道对入站附件的限制 #122315
  • 保留 Microsoft Teams 投票中不同的选项 #123070
  • 在投递失败状态不确定时避免重复 Teams 回复 #125127
  • 在持久化重放后保留 Microsoft Teams 回复上下文 #126169
  • fix(msteams):恢复缺失的频道线程上下文 #128901
  • fix(msteams):在迁移确认存活数据前保留旧存储 #131284
  • 安全恢复 Microsoft Teams 频道和群聊文件 #90738
  • 限制 Microsoft Teams 群组查找缓存 #102814
  • 在核心和插件之间共享 HTML 实体解码 #107235
  • 为 URL 托管的 Microsoft Teams 附件显示可读文件名 #115127
  • 识别带提供商前缀的 Microsoft Teams 目标 ID #115609
  • 在接受联合身份验证凭据后启用 Microsoft Teams #118931
  • 对不兼容的 Teams 探测模式返回无效请求错误 #121975
  • 在投递结束后最终化 Microsoft Teams 已发送事件 #82354
  • 将 Microsoft Teams 附件回复保留在频道线程中 #94348
Google Chat

OpenClaw 接受的 Google Chat webhook 事件现在会在重启期间保持排队,在每个 space 内保持顺序,并在 Google 的重试造成重复工作之前识别这些重试。恢复从 Gateway 接纳事件时开始;Google 从未投递的事件仍不在该恢复路径内。

来源与完整变更列表

Bug 修复

  • 在重启之间保留 Google Chat webhook #110833
  • 防止停滞的 Google Chat 请求无限挂起 #102227
  • 将 Google Chat 关闭模式下的回复保持在线程之外 #104402
  • 在 doctor 迁移期间保留 Google Chat 流式传输 #106018
  • 限制 Google Chat 身份验证请求 #106178
  • 在线程目标无效时投递 Google Chat 回复 #108324
  • 在仅状态请求后释放 Google Chat 套接字 #111290
  • 在 Google Chat 中正确渲染出站 Markdown #113024
  • 停止部分和重复的 Google Chat 回复 #115638
  • 将 Google Chat 回复块保持在同一个回退线程中 #117053
  • 将 Google Chat Doctor 修复保留在规范账户设置中 #118972
  • 在超大附件后保持 Google Chat 通道继续运行 #118986
  • 拒绝 Google Chat 响应中的格式错误 UTF-8 #120239
  • 保留部分 Google Chat 投递证据 #122760
  • fix(googlechat):显示不支持且未处理的附件 #130870
  • 默认限制 Google Chat 媒体下载 #98425
  • 限制 Google Chat 审批注册表 #101744
  • 限制 Google Chat webhook 证书获取 #102924
  • 及时关闭超大的 Google Chat 身份验证响应 #115873
  • 在投递回执中保留规范的 Google Chat 线程 ID #116717
  • 将无效的 Google Chat webhook URL 报告为已阻止 #117986
  • 停止过期的 Google Chat 审批卡片重试 #118225
  • 在启动时阻止不可用的 Google Chat webhook 配置 #118968
LINE

LINE 将混合富回复、其快捷操作和媒体保持在一起,当响应适合时,最多使用五条消息通过回复路径发送,而不是不必要地消耗 Push API 配额。无法放入 Flex 卡片的长代码会回退为普通分块,不支持的媒体仍会作为链接可见,空白或被拒绝的富结构不再导致整个回复丢失。

在需要提及的群组中,指向机器人的斜杠命令现在会作为命令执行,引用其最近由 Gateway 发送的消息即可在不进行第二次提及的情况下指定它。日期、时间和富菜单选择会传递给代理,受支持的操作和选项会作为原生控件返回,对于 LINE 无法渲染的内容会显示可见文本。

机器人实际加入允许的群组时,也可以发布一条房间专属介绍,同时尊重渠道级和按账号的退出选择。Webhook 事件会在确认之前先存储,使 OpenClaw 已接受的工作在重启后能够继续。经历过短暂 pre-drain 队列过渡的受影响安装实例会在投递恢复前迁移符合条件的已接受行,真正不匹配的行保持隔离,已移除账号的消息会等待直到该账号恢复。

来源和完整变更列表

改进

  • feat(channels):添加 Matrix 和 LINE 加入介绍 #131128
  • 将 LINE 富消息迁移到类型化结构化输出 #124755

Bug 修复

  • 保持 LINE 富回复和快捷操作完整 #109011
  • 防止 LINE Webhook 事件被静默丢失 #109655
  • fix(line):升级时将 pre-drain 暂存行迁移到规范队列契约 #110058
  • 防止重复接受 LINE 和 Mattermost 消息 #117024
  • fix(line):执行随机器人提及发送的群组斜杠命令 #131838
  • 避免内部工具跟踪出现在 LINE 回复中 #101708
  • 防止格式错误的 LINE 日程和设备卡片被丢弃 #105381
  • 当模板字段为空时保留 LINE 回复 #105520
  • fix:保持 LINE 群组允许列表的作用域 [AI] #106056
  • 发送可播放的 LINE 视频和音频回复 #106515
  • 防止内联斜杠文本绕过 LINE 群组提及 #107230
  • 在并发提及轮次中保留 LINE 群组上下文 #107367
  • 在内容仍在准备时重试 LINE 媒体 #108351
  • 从验证错误中隐藏 LINE 媒体 URL #108657
  • 限制 LINE 发送者资料缓存增长 #109750
  • 在重启和分发失败期间保留 LINE Webhook #109819
  • 关闭时等待延迟的 LINE 入站释放 #110104
  • 重试瞬态 LINE 入站媒体下载 #110921
  • 防止 LINE 重载因停滞的投递而挂起 #110971
  • 防止超大的 LINE 操作导致回复丢失 #113081
  • 标记已持久接受的 LINE Webhook 投递 #115796
  • 保留 LINE 提供商投递回执和部分发送进度 #116879
  • 防止不确定投递后出现重复 LINE 回复 #117126
  • 保留更长的 LINE 卡片和模板描述 #117280
  • 保留超大 LINE 表格的投递顺序 #117335
  • 保留 LINE Markdown 表格中的所有行 #117481
  • 当位置字段为空时保留 LINE 回复 #118064
  • fix(line):防止无限制的提供商响应缓冲 #119099
  • 防止非正数的 LINE 媒体限制导致附件丢失 #121184
  • 重试 LINE 推送而不产生重复消息 #124464
  • 防止 LINE 入站媒体下载挂起 #124606
  • fix(line):在 LINE 限制内保留完整的 Flex 操作标签 #128712
  • fix(line):保留富消息源顺序 #129916
  • fix(line):在被拒绝的富消息后保留快捷回复 #130076
  • fix(line):/card 会在其数据内的逗号处拆分操作、列表项或回执条目 #131195
  • fix(line):永久拒绝的消息会被重放而不是结算 #131285
  • fix(line):阻止空白卡片字段导致整个回复丢失 #131854
  • fix(line):将 postback 携带的选择提供给代理 #132014
  • fix(line):允许通过引用机器人在群组中指定它 #132055
  • fix(line):向代理提供 LINE 已知的名称,而不是原始 ID #132108
  • fix(line):停用轮换所替换的凭据 #132150
  • fix(line):投递代理回复提供的控件 #132479
  • fix(line):按其 URL 证明的类型发送出站媒体 #132551
  • fix(line):投递 Flex 卡片无法容纳的代码块 #132558
  • 在 LINE 无效接收者错误中保持表情符号完整 #104109
  • 启用聊天内 LINE 允许列表编辑 #106638
  • 在批量和自动回复发送前验证 LINE 媒体 #108917
  • 保留 LINE 消息中的链接和样式 #112921
  • 保留结构化的 LINE Webhook 错误详情 #113606
  • 保留完整的 LINE Flex 替代文本 #117217
  • 保留 LINE 围栏代码卡片中的缩进 #117996
  • 完全移除默认 LINE 账号 #118055
  • 将不可渲染的 LINE 位置作为文本投递 #126298
  • fix(line):根据 LINE 实际发送的内容描述入站贴纸 #131872
  • fix(line):应用群组配置的技能范围 #132501
  • fix(line):使用对该事件当前生效的配置处理每个事件 #132592

文档

- docs(line):记录入站持久性、重试策略和死信恢复 [#115702](https://github.com/openclaw/openclaw/pull/115702)

</details>
使用 Twilio 的 SMS、MMS 和 RCS

基于 Twilio 的通道 现在可以发送和接收 MMS,并显示最近的提供商或运营商状态,例如已发送、已送达、失败或冲突,而无需保留消息正文或电话号码地址。OpenClaw 已接受的 SMS 和 RCS 消息可以在重启后按发送者顺序保留,而重放保护会失败关闭,而不是接受它已无法防止重复的任务。

投递观察结果会保留 30 天,并反映 Twilio 或运营商报告的最新状态,该状态可能与收件人可见的投递状态不同。如果重放缓存已满,新事件会被拒绝,而不是在没有重复保护的情况下被接受,并且 Twilio 默认不会重试该响应。

来源和完整变更列表

改进

  • 为 SMS 通道添加 Twilio MMS 支持 #118664
  • 跟踪 SMS 的 Twilio 投递结果 #118665

缺陷修复

  • 在确认 Webhook 之前持久化排队 Twilio 消息 #109866
  • 在高 SMS 流量下保持 Twilio 重放保护 #101107
  • 为 SMS 路由规范化 Twilio RCS 发送者 #102373
  • 保护有效的 SMS 回调免受无效 Webhook 流量影响 #103620
  • 按发送者隔离 Twilio SMS Webhook 配额 #104862
  • 防止零 SMS 分块限制导致逐字符发送文本 #118158
  • 重试瞬态 Twilio MMS 附件下载 #118994
  • 重试在响应头之后停滞的 Twilio MMS 下载 #119002
  • 授权通过 SMS 接收的文本斜杠命令 #90998
  • 忽略空白的 Twilio SMS 账户回退 #109149
  • 接受 SMS 电话前缀后的空格 #111111

文档

  • 添加 Twilio A2P 设置和投递故障排除指南 #88743
ClickClack

ClickClack 可以将团队讨论放置在 OpenClaw 会话旁边,让人们有一个围绕工作进行协调的地方,而无需将代理的主转录变成会议室。引导式和命令行设置、可读的讨论名称、原生命令菜单、附件、可选的群组提及规则以及可选启用的进度,使该房间更易于使用,同时保持最终答案可见。

打开讨论仍然需要授权操作员和可访问的 ClickClack 部署。生成的名称仍为尽力而为,且提及门控或机器人到机器人的对话必须被明确启用。

来源和完整变更列表

改进

  • 为 ClickClack 添加原生命令菜单 #107907
  • 添加引导式和命令行 ClickClack 设置 #108271
  • 添加 ClickClack 会话讨论通道 #111503
  • 根据会话标题为 ClickClack 讨论命名 #114711
  • 在打开 ClickClack 讨论之前生成标题 #114740
  • 添加 ClickClack 群组提及门控 #115484
  • 在 ClickClack 中显示可选启用的原生代理进度 #116683
  • 为 ClickClack 添加受保护的机器人到机器人工作流 #119278
  • 验证 ClickClack 设置并显示正确的下一步 #108332
  • 使用一次性设置代码配置 ClickClack #109398
  • 支持在私有 HTTP 服务器上使用 ClickClack 设置代码 #109429
  • 分离 ClickClack 的公共和私有端点 #111724
  • 将会话变更投递到插件服务 #114813

缺陷修复

  • 投递 ClickClack 附件并遵守模型输出预算 #105775
  • 使 ClickClack 会话讨论能够在真实部署中打开 #111685
  • 限制 ClickClack 入站 WebSocket 帧 #102480
  • 防止 ClickClack 历史在重启后重放 #102486
  • 在投递前清理 ClickClack 助手文本 #103142
  • 在重连延迟期间及时停止 ClickClack #108145
  • 防止 ClickClack 重连跳过入站事件 #108577
  • 支持 ClickClack v1 精确设置声明 URL #111927
  • 防止 ClickClack 线程回复消失 #117225
  • 保留 ClickClack 管理的讨论绑定 #118851
  • 在会话变更中保持 ClickClack 讨论房间 #119358
  • 从停滞的 WebSocket 握手中恢复 ClickClack 监视器 #106485
  • 在 macOS 仪表板中显示 ClickClack 讨论 #111883
  • 对全局 ClickClack 讨论使用已配置的默认代理 #113997
  • 为未命名的 ClickClack 上传保留文件扩展名 #119646
  • 明确 ClickClack 命令菜单启动错误 #126802
  • fix(clickclack):在账户关闭后停止排队消息 #128672
Reef

Trusted Claws 可以直接通过 Reef 进行通信,这是 OpenClaw 内置的端到端加密代理通道,使用好友码配对、终端注册和好友关系控制,以及可让外部对端与本地线程保持区分的发现机制。操作员现在可以为自己的敏感主题和指定好友添加自然语言的入站和出站共享规则,同时针对密钥和凭据的确定性拒绝仍然生效,并且更改规则会使旧策略下的待处理批准失效。

当入站消息需要所有者审核时,该已记录的决策现在将负责后续重投,而不是在答案改变之前反复重新运行 guard,同时后续收件箱消息在等待期间仍可继续流转。临时入站 guard 故障会将该项挂起以便再次尝试,而不是拒绝它;已批准的投递会接受最后一次 guard 检查,出站发送仍然快速失败。

当对端拒绝一条消息时,发送方代理会收到有限反馈,并有一次受控机会重新措辞,然后停止并等待所有者指导,而不是陷入循环争论。

来源和完整变更列表

改进

  • 添加无头 Reef 注册和好友关系 CLI d361b4c
  • 捆绑 Reef 加密代理间通道 #106232
  • 显示 Reef 拒绝并允许常规代理协作 #109160
  • 将外部会话与本地代理会话分离 #109411
  • feat(reef): 为 guard 提供操作员可配置的共享规则 #131167
  • 当投递仍未确认时通知 Reef 发送方 #110938

Bug 修复

  • 在首次联系前发现受信任的 Reef 对端 #109905
  • 在通道崩溃后停止 Reef 重连循环 #110870
  • fix(reef): 已挂起的所有者审核负责入站投递,而不是重新运行 guard #132420
  • 限制 Reef 中继 JSON 响应读取 #106456
  • 通过已连接的 Gateway 发送 Reef 消息 #107373
  • 为 Reef 中继请求添加截止时间 #108333
  • 在启动时拒绝空白的 Reef guard 凭据 #109667
  • 将首轮对话绑定到目录发现的 Reef 对端 #110029
  • 在 Gateway 重启后恢复 Reef 收件箱 #110100
  • 防止已接受的 Reef 回执阻塞收件箱投递 #110177
  • 在启动中继限流期间保持 Reef 运行 #110918
  • 在 Reef 和 Zalo Personal 回复中隐藏内部工具痕迹 #112621
  • 在线程化对话后绑定已发现的对端 #125514
  • 在短暂的 Reef 重连期间保持 Gateway 就绪状态稳定 #126151
  • fix(reef): 停止暴露已退役的账户运行时 #129131
  • 恢复 Reef 通道配置发现 2d5803a
  • 限制 Reef 收件箱 WebSocket 帧 #108886
  • 停止停滞的 Reef 收件箱握手 #109052
  • refactor(reef): 移除手动维护的 manifest schema 副本 #131292

文档

  • 添加 Reef 通道设置和插件文档 4a7f8c5
使用 A2A 的代理间消息传递

OpenClaw 现在可以通过 A2A v1.0 协议 将选定代理暴露给明确受信任的外部代理系统。已配置的对端可以发现这些代理,提交并轮询经过身份验证的任务,以工件形式接收回复,并交换文本或结构化数据;而未配置的插件则完全不会注册任何发现或任务路由。

此首个版本支持一个账户,将任务保存在内存中,并且尚未提供流式传输、推送通知或取消功能。经过身份验证的对端当前作为受信任调用方运行,而不是通过常规命令策略决策,因此这是为已知对端设计的有意互操作路径,而不是公共代理端点。

来源和完整变更列表

改进

  • feat(a2a): 添加 A2A v1.0 代理互操作通道插件 #130008

Bug 修复

  • fix(a2a): 限制出站 JSON 响应体 #132273
  • fix(a2a): 在出站发送后关闭请求连接 #130873
Buzz

Buzz 现在是 OpenClaw 用于团队房间的官方通道,提供引导式设置,可将不同房间路由到不同代理,并通过实时目录向这些代理提供当前房间和成员名称,同时不会替换用于自动化的稳定 UUID。一个 Gateway 现在可以运行命名 Buzz 账户,具有独立的机器人身份、凭据、房间、路由和生命周期,同时保留旧版根账户和环境回退,并且更新一个账户不会不必要地断开健康的同级账户。

回复可以使用原生提及和线程,操作员可以选择扁平自动回复和正在输入状态,而显式消息工具和 CLI 目标保持显式。提及门控房间可以将少量近期已授权上下文带入下一轮,而无需对每条后台消息运行模型。

设置只有在验证 Bot 角色成员身份后才会完成;房间名称必须唯一解析后才能安全使用;原生提及上限为 50;被动上下文仍为可选且严格受限。

<details class="release-source-toggle">
<summary>来源和完整变更列表</summary>

**改进**

- 添加官方 Buzz 团队房间频道 [#113419](https://github.com/openclaw/openclaw/pull/113419)
- 添加实时 Buzz 目录以及可识别的发送者和房间名称 [#116799](https://github.com/openclaw/openclaw/pull/116799)
- 添加原生 Buzz 提及和房间名称定向 [#117927](https://github.com/openclaw/openclaw/pull/117927)
- feat(buzz):为已接受的轮次保留有界的被动上下文 [#130509](https://github.com/openclaw/openclaw/pull/130509)
- feat(buzz):在添加命名账户时保留机器人身份 [#132226](https://github.com/openclaw/openclaw/pull/132226)
- 提升 Buzz 消息保真度 [#116096](https://github.com/openclaw/openclaw/pull/116096)
- 在 Buzz 回复期间显示正在输入指示器 [#116194](https://github.com/openclaw/openclaw/pull/116194)
- feat(buzz):在每个房间中授权不同的发送者 [#129655](https://github.com/openclaw/openclaw/pull/129655)
- feat(buzz):限制机器人之间的房间对话 [#130488](https://github.com/openclaw/openclaw/pull/130488)
- feat(buzz):支持扁平自动回复和正在输入状态 [#130511](https://github.com/openclaw/openclaw/pull/130511)

**Bug 修复**

- 重连后恢复完整的 Buzz 消息积压 [#116925](https://github.com/openclaw/openclaw/pull/116925)
- fix:Buzz 机器人恢复中继停滞并拒绝已撤销的发送者 [#130467](https://github.com/openclaw/openclaw/pull/130467)
- fix(buzz):Gateway 停机期间发送的消息在重启后被丢弃 [#117259](https://github.com/openclaw/openclaw/pull/117259)
- fix(buzz):限制 NIP-11 中继信息响应 [#119182](https://github.com/openclaw/openclaw/pull/119182)
- fix(buzz):阻止命名账户设置替换现有机器人身份 [#129663](https://github.com/openclaw/openclaw/pull/129663)
- fix(buzz):将代理回复保持在线程根 [#124884](https://github.com/openclaw/openclaw/pull/124884)
- fix(buzz):在非交互式设置期间持久化账户名称 [#131997](https://github.com/openclaw/openclaw/pull/131997)

**文档**

- 简化 Buzz 插件设置指南 [#114156](https://github.com/openclaw/openclaw/pull/114156)

</details>
QQ Bot

QQ Bot 已迁移到腾讯的完整性固定外部插件,同时保留公开的 qqbot 频道 ID,并在 Tencent 2.0 能够安全表示时,携带现有凭据、账户选择、允许列表、审批限制、流式行为和群组工具策略。如果旧策略无法在不削弱其强度的情况下转换,Doctor 会停止并等待显式修复,而不是悄悄更改规则。已接受到本地队列的入站信封也可以在重启后恢复。

来源和完整变更列表

改进

  • 将 QQBot 迁移到腾讯的外部插件 #107295

Bug 修复

  • 为 QQBot 添加持久入站重放 #110844
  • 停止停滞的 QQBot 语音转写请求 #102028
  • 安全地封装 QQ Bot 审批命令 #102119
  • 不区分大小写地分类 QQ Bot 媒体类型 #102753
  • 为 QQBot 图像保留规范 MIME 类型 #102795
  • 在 QQBot 中使用核心正在输入保活循环 #104438
  • 将较长的 QQBot 回复保持在被动发送限制内 #104634
  • 停止 QQBot 令牌刷新监听器堆积 #105886
  • 对停滞的 QQBot 频道 API 响应体设置超时 #108895
  • 忽略空白的 QQBot 应用 ID #109460
  • 防止重放的 QQBot 命令两次清除存储 #110904
  • 将 QQBot 访问策略应用于引用消息上下文 #114136
  • 保持 QQBot 路由使用实时运行时配置 #114227
  • 当心跳 ACK 停止时重连 QQBot #114902
  • 恢复一次性 QQBot 提醒和周期性 QQBot 提醒 #115488
  • 保持 QQBot 频道 API 调用使用活动账户 #118575
  • 防止部分 QQBot 凭据编辑恢复过期备份 #120028
  • 在畸形 gateway HELLO 帧后保持 QQBot 连接 #121031
  • 限制停滞的 QQBot 令牌请求 #102897
  • 防止 QQBot 媒体下载在响应头之前挂起 #103018
  • 对停滞的 QQBot 响应体设置超时 #103855
  • 在投递完成后清除 QQBot 语音发送定时器 #105885
  • 从停滞的 WebSocket 握手中恢复 QQBot #106484
  • 正确路由混合大小写的 QQBot 群组和频道目标 #109008
  • 拒绝空白的 QQ Bot client-secret 环境变量值 #109815
  • 限制 QQ Bot client-secret 文件读取 #110002
  • 及时返回 QQ Bot 媒体下载错误 #119466
  • 移除具有误导性的 QQBot 数据目录诊断 #119849
  • 保留 QQ Bot 群组公告路由 #98053

文档

- 更正 QQBot 安装包文档 [#122417](https://github.com/openclaw/openclaw/pull/122417)

</details>
Zalo 和 Zalo Personal

Zalo Bot 和 Zalo Personal 现在使用独立的恢复路径,在重启后保留已接受的消息。Zalo Bot 会在确认 webhook 之前记录它,而 Zalo Personal 会从账户队列恢复已接受的套接字消息,而不会让一个延迟的会话阻塞无关的聊天。轮询和 webhook 模式仍然互斥,并且目标定位、表情回应、格式、投递错误和部分回执仍然特定于处理该消息的路径。

来源和完整变更列表

改进

  • 在本地崩溃后恢复已接受的 Zalo Personal 消息 #110916

Bug 修复

  • 防止 Zalo webhook 在确认之后丢失消息 #110630
  • 从 Zalo 回复中隐藏内部工具痕迹 #103377
  • 为 Zalouser 共享保留偏移量的文本块范围 #105842
  • 限制停滞的 Zalo Bot API 请求 #111636
  • 使 ZaloUser 强调格式遵循 CommonMark 规则 #113134
  • 使 ZaloUser 块级格式与 CommonMark 保持一致 #113590
  • 当可选媒体为空时发送 Zalo 文本 #114450
  • 显示 Zalo 投递失败并保留部分发送回执 #117864
  • 将 Zalouser 表情回应路由到正确的会话 #118536
  • fix(zalo): 限制停滞的入站媒体头等待 #104578
  • 中止时立即停止 Zalo 轮询退避 #106498
  • 正确报告不支持的 Zalo 消息操作 #108434
  • 区分 Zalouser 探测超时与缺少身份验证 #111336
  • 当 Gateway 关闭已抢先完成时停止 Zalo 启动 #115763
  • 将 Zalo 消息投递到带前缀的私聊和群组目标 #115814
  • 报告 ZaloUser 投递失败并保留部分回执 #117860
  • 当其大小限制为非正值时恢复 Zalo 媒体 #120988
  • 将失败的 Zalo HTTP 探测报告为不健康 #124593
Tlon 和 Urbit

Tlon 现在会在确认之前保存已接受的 Urbit 消息,因此已被 OpenClaw 接纳的工作可以在重启后恢复,而不会立即放弃服务器游标。回复支持原生 Markdown 列表,并且过大的 SSE 事件或 JSON 负载会在内存无限增长之前被阻止。

存在一个硬性恢复限制。如果 Eyre 已确定删除某个频道,OpenClaw 可以创建并订阅另一个频道,但旧游标及其服务器端历史将不复存在。

来源和完整变更列表

改进

  • 在重启之间保留已接受的 Tlon 消息 #110910
  • 在 Tlon 回复中原生渲染 Markdown 列表 #112968

Bug 修复

  • 限制 Tlon SSE 事件以防止内存耗尽 #101274
  • 将内部工具痕迹排除在 Tlon 消息之外 #103450
  • 限制长时间运行的 Tlon 监控跟踪 #103658
  • 在连接失败后清除 Tlon SSE 定时器 #104585
  • 将带有片段的 Tlon 图像 URL 作为媒体发送 #104853
  • 在监控结束后停止 Tlon 重连 #108168
  • 限制 Tlon 登录响应的内存使用 #109697
  • 关闭失败的 Tlon 上传响应流 #110442
  • 释放未读取的 Tlon HTTP 和 SSE 主体 #111275
  • 防止启动期间 Tlon 监控关闭挂起 #114940
  • 在 Tlon 摘要中遵循已配置时区 #117429
  • 关闭失败的 Tlon 连接且不泄漏套接字 #117475
  • fix(tlon): 当数据行省略空格时保持 Urbit SSE 流正常工作 #130048
  • fix(tlon): 等待持久化邀请副作用 #130329
  • 清理 Tlon 身份验证重试监听器 #101661
  • 使用明确截止时间限制停滞的 Tlon 文件上传 #102903
  • 限制停滞的 Tlon 媒体头等待 #104132
  • 修复 Tlon 自定义 S3 端点解析 #107567
  • 关闭未读取的 Tlon 账户探测响应流 #111081
  • 防止 Tlon 关闭清理泄漏拒绝 #111106
  • 使 Tlon 探测遵循适配器超时 #113646
  • 实时应用 Tlon 频道发现设置 #114949
  • 将较长的 Tlon 消息拆分为有界块 #117438
  • 当入站图像不可用时告知 Tlon 代理 #122783
  • fix(tlon): 在确认之前等待消息持久化 #129090
Nextcloud Talk

Nextcloud Talk 现在可以并发处理不同房间,同时保持每个房间内的消息顺序。最多可同时有 32 个投递处于活动状态,超出部分会排队,并且对无响应的自托管或远程服务器的发送或表情回应现在会在有限时间内失败,而不是无限期挂起。

来源和完整变更列表

错误修复

  • 在 Nextcloud Talk 回复中隐藏内部工具痕迹 #101712
  • 允许跨 Nextcloud Talk 房间并行投递 #118692
  • 限制挂起的 Nextcloud Talk 消息和表情回应发送 #102025
  • 限制停滞的 Nextcloud Talk 房间查找 #102859
  • 保持 Nextcloud Talk 错误片段 Unicode 安全 #102949
  • 将 Nextcloud Talk 操作限制为受支持的表情回应 #104906
  • 接受混合大小写的 Nextcloud Talk 目标前缀 #105818
  • 释放失败的 Nextcloud Talk 响应体 #110441
  • 拒绝不受支持的 Nextcloud Talk 设置 URL #111054
  • 阻止已禁用的 Nextcloud Talk 账户发送表情回应 #112675
  • 在插件升级期间保留 Nextcloud Talk 当前房间别名 #113432
  • 防止共享代理 Nextcloud Talk webhook 锁定 #126251
  • fix(nextcloud-talk): 在监控停止时释放 webhook 认证速率限制器 #126908
  • fix(nextcloud-talk): 为丢弃的入站事件记录无结果 #130974
Nostr

当某个中继无法连接时,Nostr 私信可以切换到下一个已配置的中继;当所有中继都失败时,返回真实的连接错误;并暴露成功中继的真实事件 ID,而不是合成时间戳。命名账户、受保护密钥、个人资料导入、回复目标和有序加密块也会更一致地关联到所选账户。

来源和完整变更列表

错误修复

  • 当中继无法连接时故障切换 Nostr 发布 #110007
  • 保持 Nostr 回复与其私信关联 #110085
  • 拒绝格式错误的 Nostr 个人资料字段而不崩溃 #110684
  • 当其队列无法打开时报告 Nostr 入站不可用 #115313
  • 避免将私有工具痕迹包含在 Nostr 消息中 #115769
  • 将较长的加密 Nostr 回复作为有序块投递 #115816
  • 保留使用 SecretRefs 配置的 Nostr 账户 #126934
  • fix(nostr): 一致地验证私钥 #130305
  • 在设置和私信中接受大写的 Nostr 密钥 #109878
  • 在 Nostr 发送回执中报告中继事件 ID #110006
  • 安全地拒绝非对象类型的 Nostr 个人资料元数据 #110330
  • 仅在成功后报告 Nostr 中继连接 #110878
  • 接受带前缀的 Nostr 目标和允许列表身份 #110881
  • 在设置期间保留命名 Nostr 账户 #111134
  • 使 Nostr 个人资料导入在中继之间具有确定性 #111798
  • 停止将正常 Nostr 关闭报告为中继错误 #111905
Synology Chat

Synology Chat 现在会在返回成功之前记录入站 webhook 工作,使已接受的消息能够在重启后恢复。如果本地写入失败,OpenClaw 会返回错误,以便发送方重新投递,而上游重试仍由 Synology 控制。较长的 Unicode 回复会保持顺序,查找和响应都有边界,不确定的出站发送会保持未解决状态,而不是被重放为重复消息。

来源和完整变更列表

改进

  • 在重启期间保留 Synology Chat webhook #110899

错误修复

  • 防止 Synology Chat 发送内部工具痕迹 #102925
  • 限制 Synology Chat 用户列表响应 #105089
  • 以有序块投递较长的 Synology Chat 回复 #116645
  • 报告被拒绝的 Synology webhook 投递 #118558
  • 防止不确定发送后出现重复的 Synology Chat 消息 #119539
  • 防止失去保管后出现重复的 Synology Chat 发送 #123953
  • 按客户端隔离 Synology webhook 限流 #103619
  • 保留 Unicode Synology 回复接收者 #108019
  • 将 Synology 用户查找限制为 15 秒 #109111
  • 限制 Synology Chat 出站响应截止时间 #110520
  • 停止报告伪造的 Synology Chat 消息 ID #110770
Twitch

已接收进 Twitch 本地队列的聊天可以在进程崩溃后继续。停滞的用户查询可以被取消,即使较早的连接尝试延迟完成,已停止的账户也会保持停止状态,并且普通回复会保留规范化后的附件链接,而内部工具跟踪和 XML 脚手架会在到达聊天之前被移除。

来源和完整变更列表

Bug 修复

  • 在本地崩溃后恢复已接受的 Twitch 聊天 #110852
  • 防止内部工具跟踪出现在 Twitch 聊天中 #103109
  • 在较长的 Twitch 回复中保留表情符号 #104030
  • 限制停滞的 Twitch 用户查询 #105883
  • fix(twitch): 在延迟启动后防止已停止的账户重新连接 #128909
  • fix(twitch): 普通代理回复会静默丢弃附件 #129644
  • fix(twitch): 将空发送记录为非结果,而不是投递回执 #131689
  • 中止停滞的 Twitch 用户查询 #107360
  • 在 Twitch 标识符和 URL 中保留下划线 #108548
  • 防止已退役的 Twitch 聊天管理器重新连接 #127103
  • fix(twitch): 在执行审计中保留原生发送者身份 #130730
IRC

已接收进 IRC 的频道消息在重启后可以按顺序恢复,而不会将机器人自己的回复回显到房间中。私信恢复仍与接受它的连接绑定,如果该身份发生变化则停止;提及遵循 IRC 昵称规则,Markdown 会变为可读的纯文本,内部工具跟踪不会出现在频道中。

来源和完整变更列表

改进

  • 为 IRC 消息添加持久化本地入口 #110914

Bug 修复

  • 从 IRC 回复中隐藏内部工具跟踪 #109012
  • 接受文档中记录的 IRC configWrites 设置 #112392
  • 向 IRC 发送可读纯文本,而不是 Markdown 源 #112961
  • 对 IRC 机器人提及应用 RFC 1459 昵称匹配 #116758
Android 聊天

Android 现在会在使用网络之前将文本、图片和语音笔记写入其发件箱,并在离线期间和重启后保留它们,直到会话历史确认投递。如果结果仍不确定,该条目会保持可见,并提供明确的“重试”和“删除”控件,且不会自动再次发送。

支持的音频和视频可内联播放,视频使用原生上传流程,通知回复会返回到确切的已保存会话,否则失败。较旧的 2026.7.x OpenClaw 安装使用简化的兼容路径。

来源和完整变更列表

改进

  • 使 Android 聊天发送在离线使用和重启后保持持久 #104089
  • 在 Android 聊天中播放音频和视频 #115916
  • 在 Android 上添加内联媒体播放和视频上传 #116037
  • 添加带有内联回复的 Android 会话通知 #120389

Bug 修复

  • 阻止 Android 静默重放模糊的发送 #103273
  • 恢复针对旧网关的 Android 聊天发送 #126540
  • fix(android): 对对端消息显示频道发送者名称,而不是“你” #119864
  • 取消 Android 链接预览网络调用 #101853
  • 保持 Android 离线聊天操作可读 #107404
  • fix(android): 当前分支的排队输入在重连后失败 #132954
iOS 和 macOS 聊天

iOS 和 macOS OpenClaw 应用可以在聊天中播放受支持的托管音频和视频,从原生编辑器上传视频,并将当前附件交给系统“正在播放”控件。缓慢的已接受回复在实时状态和已保存历史协调期间会保持可见的待定状态,因此较晚的历史不会仅仅因为第二个到达就清除较新的回合。

真正没有产生输出的运行最终会释放编辑器,而不会编造回复。原生视频上传保留 20 MB 限制,并且这些聊天应用仍与 iMessage 频道插件保持分离。

来源和完整变更列表

改进

  • 在原生聊天中渲染可折叠详情 #115641
  • 为 Apple 聊天添加内联音频和视频播放 #115903
  • 完善 Apple 媒体播放和视频上传 #116051

Bug 修复

- 在 iOS 上正确渲染 Markdown 列表和分隔线 [#111223](https://github.com/openclaw/openclaw/pull/111223)
- 在慢速 Apple 聊天回复完成协调前保持其待处理状态 [#97722](https://github.com/openclaw/openclaw/pull/97722)
- 在 Apple 聊天中渲染可访问的 Markdown 标题层级 [#103404](https://github.com/openclaw/openclaw/pull/103404)
- 保持可见的推理标题在视觉上低调 [#103436](https://github.com/openclaw/openclaw/pull/103436)
- 当另一个运行完成时保留活动原生聊天 [#113786](https://github.com/openclaw/openclaw/pull/113786)
- 防止工具运行后出现重复的原生聊天回复 [#115678](https://github.com/openclaw/openclaw/pull/115678)
- 防止 Apple 聊天发送在旧版网关上停滞 [#126559](https://github.com/openclaw/openclaw/pull/126559)
- 在 iPhone 和 iPad 上显示完整的多行 Markdown 列表项 [#112723](https://github.com/openclaw/openclaw/pull/112723)
- fix(apps): 防止所有权更改后出现过期的 Now Playing [#128381](https://github.com/openclaw/openclaw/pull/128381)

</details>
Control UI、WebChat 和 TUI

Control UI 聊天 现在会为受支持的生成文档以及受管理的音频和视频提供各自命名的卡片,而不是暴露原始附件指令,或将每个文件都当作下载处理。就绪的视频可以在对话上方展开,兼容的已交付媒体可以内联播放,并且每个尝试的附件都会保留一个可见的命名结果,并附带可操作的失败指引。处于活动状态或未知的文件格式仍保持不可用,而不是变为可下载;浏览器无法准备的媒体则保留其下载操作。

在 Control UI、WebChat 和 TUI 中,当多个客户端共享同一对话或在不同时间重新连接时,Prompt、实时工作、附件和回复会保持对齐。延迟的 Prompt 不再跳到其实时回复下方,终端用户在答案旁边以及历史重新加载后都会保留一个隐私安全的附件警告。

这些是 OpenClaw 自己的聊天客户端,而不是外部消息服务;当实时更新与刷新后的历史不一致时,已保存的对话仍为最终记录。

来源和完整变更列表

改进

  • 在 Control UI 中添加引导式频道设置 #106469
  • 在聊天客户端中显示实时运行遥测 #113084
  • 在 Control UI 聊天中添加一等音频和视频卡片 #115764
  • 在 Control UI 聊天中添加内联音频和视频播放 #116115
  • 在侧边栏中显示 Discord 和 Slack 会话头像 #125668
  • feat(ui): 在媒体覆盖层中展开视频附件 #132131

Bug 修复

  • 防止过期的聊天窗格发送到已切换的分支 #113073
  • 保持 WebChat 消息和实时工作在正确的回合中 #113266
  • 使 TUI 错误安全,并使流式回复按时间顺序排列 #114869
  • 保持共享的 Control UI 和 TUI 聊天同步 #115066
  • 在负载下保持共享的 Web 和 TUI 聊天同步 #115191
  • 保持延迟的共享聊天 Prompt 在正确的 TUI 顺序中 #115219
  • fix(ui): 按类型结构化聊天转录附件 #127076
  • 在终端中保留 Matrix 和 Signal 会话身份 #113800
  • 在 Control UI 聊天回复中遵循出站钩子 #114351
  • 保持大小写不同的频道会话隔离 #114638
  • 当 TUI 回滚缓冲区满时保留共享 Prompt #115165
  • 为 Slack、Buzz 和 Matrix 会话显示人类名称 #117680
  • 在保存终态之前保持失败的聊天运行处于活动状态 #126183
  • 防止历史刷新后出现重复的助手气泡 #126364
  • fix: 当前聊天附件在发送确认后失败 #127737
  • fix(gateway): 保留排队的 WebChat 溢出回复投递 #129971
  • fix(webchat): 将生成的文档渲染为附件 #130402
  • fix(tui): 重连后保持已完成的运行处于空闲状态 #131487
  • fix: 在延迟 Prompt 之后保留实时回复 #131641
  • fix(webchat): 隐藏附件管道阶段 #131812
  • fix(webchat): 为失败的附件显示命名卡片 #131826
  • fix(webchat): 恢复已交付音频和视频的播放 #131831
  • fix(webchat): 在长回复之前通告附件失败 #132102
  • fix(tui): 保持失败的附件在回复旁边可见 #132115
  • fix(webchat): 在初始转录事件中隐藏受管理的媒体 #132508
  • fix(tui): 在阻止提交后保留大型粘贴草稿 #132528
  • fix(ui): 稳定就绪验证和媒体播放 #132832
  • fix(gateway): 在发布源回复之前提交媒体所有权 #133237
  • 在导入的 CLI 会话历史中保留重复消息 #113703
  • 在附件旁边隐藏重复的原始图像 Markdown #125674
  • 在重启排空期间保留 WebChat 失败状态 #125985
  • fix: 在网关重启之间保留 message-tool 图像 #127729
  • fix: 显示来自活动运行的 WebChat 附件 [AI-assisted] #127879
  • fix: 在发送失败过程中保持消息身份稳定 #129127
  • fix(webchat): 在媒体转录重写期间移除回复指令 #131859
语音通话

Voice Call 可以选择加入代理的主转录,当操作员希望电话和桌面对话共享历史时,而默认仍保持每部电话一个会话。实时代理可以说出最后的话并请求挂断,并且启动失败、运营商挂断或媒体静音现在会关闭不可用的会话,而不是让它保持活动直到最大持续时间。

选择主转录会将原始通话轮次放入主要历史中。运营商仍可能拒绝请求的挂断,并且运营商、provider-media、Discord、Talk 和 Meet 通话会保留各自的凭据和生命周期,而不是被视为一个可互换的语音系统。

来源和完整变更列表

改进

  • 允许 Voice Call 共享代理的主会话 #124708
  • 允许实时语音代理结束活动通话 #125525
  • feat(talk):添加 macOS 实时 Gateway 中继 #128204

Bug 修复

  • 在实时启动失败后挂断运营商通话 #118699
  • 为实时语音保留路由代理的凭据 #125111
  • 在 Gateway 重启期间保持语音通话可用 #125458
  • 在挂断或媒体静音后结束实时语音通话 #125463
  • 优化实时语音播放和电话流式传输 #125620
  • 当替换设置失败时保持活动语音通话存活 #117960
  • 保持实时语音关闭有界且转录状态持久 #118025
  • 停止已被取代的实时 Voice Call 咨询 #118301
  • 在 Gateway 重启期间保持 Voice Call 运行时所有权安全 #120289
  • 识别代理范围的 OpenAI 浏览器 Talk 凭据 #125142
  • 为实时电话通话使用每个路由代理的凭据 #125144
  • 解析 Discord 实时语音 SecretRefs #125443
  • 通过 Tailscale 暴露语音通话音频流 #125468
  • 在短暂重连期间保持实时语音通话存活 #125469
  • 保留运营商确认的语音通话终止 #125717
  • 在 OAuth 浏览器 Talk 中启用活动代理咨询 #126363
  • fix:实时电话通话使用错误的音频格式并保持打开 #133018
  • 在 Twilio 通话完成后重新拨打 Google Meet #120807
  • 停止失败的 Google Meet 语音网关连接 #120822
  • 保留 Discord 语音查找错误和代理范围的实时身份验证 #125069
  • 保持离线 Voice Call 状态为只读 #125354
  • 在 Google Meet CLI 中使用类型化的 Gateway 回退错误 #125495
  • 允许 Voice Call 使用备用 Tailscale HTTPS 端口 #125552
  • fix(ui):在 WebKit 上解释不可用的麦克风 #132904
  • fix:OpenAI 登录后浏览器语音仍不可用 #133048
Raft

Raft 设置现在会明确说明运行 OpenClaw 的机器找不到 Raft 可执行文件,而不是将已配置的通道显示为健康。探测通过仅表示命令行工具在那一刻可用,并不表示之后的连接或消息已经成功。

来源和完整变更列表

Bug 修复

  • 在通道状态中报告缺失的 Raft CLI #123140

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw