本文件记录项目的所有重要变更。
格式参考 Keep a Changelog。
- 升级脚本适配OpenClaw 2026.4.9版本:
- 修复独立版插件安装失败问题。
- 修复独立版与融合版兼容问题。
- 新增通道配置自动修复(
additional properties校验错误)
OpenClaw 2026.4.5 对通道配置引入了严格的合法性校验,流式输出、群聊等独立插件扩展的新增的配置字段会被判定为非法属性,导致 gateway 无法启动。升级脚本已自动备份原配置并移除不被识别的字段以恢复启动。如需使用流式输出、群聊等独立插件专属能力,建议将 OpenClaw 降级到 2026.4.2 及以下版本。
- 命令执行审批:AI 执行命令前通过 QQ 消息发送带按钮(✅ 允许一次 / ⭐ 始终允许 / ❌ 拒绝)的审批请求,用户点击按钮即可完成审批。
/bot-approve指令:新增审批配置管理指令,支持on(打开白名单模式审批)、off(关闭审批)、always(严格模式)、reset(恢复默认)、status(查看配置)。
- 消息引用优化:支持解析 QQ 消息事件中新增的引用消息字段,换设备也支持引用,使 AI 能够感知用户在回复哪条消息,从而在对话中准确理解引用上下文、实现更连贯的回复。
qqbot-upgradeSkill:新增插件升级引导 Skill,支持自然语言触发版本更新;优化 Skill 升级交互体验。
- Windows 文件路径编码异常:修复 Windows 下路径编码异常导致文件无法正常发送的问题。
- 升级脚本重构 v4:重构降级架构,兼容OpenClaw 2026.3.31版本,提升升级流程的稳定性与兼容性。
OpenClaw 于 2026.3.31 版本起已内置 QQBot 插件。若直接将 OpenClaw 升级到最新版,可能与独立插件产生冲突,导致新增功能不可用。
解决方案(二选一):
方案一:使用升级脚本更新本插件到最新版(推荐)
本版本已适配内置插件冲突,升级后自动接管优先级:
curl -fsSL https://raw.githubusercontent.com/tencent-connect/openclaw-qqbot/main/scripts/upgrade-via-npm.sh | bash方案二:通过配置禁用内置版本
可通过以下命令禁用 OpenClaw 内置的 QQBot 插件:
openclaw config set plugins.entries.qqbot.enabled false- 多账户提醒投递失败:修复 cron 任务 delivery 缺少
accountId,导致多账户场景下提醒消息无法通过正确的机器人账户发送。accountId改为必填,使用getRequestAccountId() || "default"确保永不为空;delivery 结构迁移到 job 顶层。 - 升级脚本与
/bot-upgrade改进:完善--version参数解析逻辑,优化版本检查流程;升级脚本(npm/source)增强兼容性。 postinstall-link-sdk脚本优化:改进安装后 SDK 链接脚本的健壮性。
执行此指令可以升级为最新版:
curl -fsSL https://raw.githubusercontent.com/tencent-connect/openclaw-qqbot/main/scripts/upgrade-via-npm.sh | bash
⚠️ v1.6.6 及以下版本暂不支持通过/bot-upgrade执行热更新,请使用上述命令进行升级。
- 大文件分片上传:新增
chunked-upload.ts模块,支持对大文件自动分片并行上传,包含分片级重试、进度回调和超时控制。同时支持 C2C 和群聊场景。 /bot-clear-storage指令:新增存储清理指令,可清理插件本地缓存数据。- 文件下载 SSRF 防护:新增
ssrf-guard.ts模块,下载远程文件前对 URL 做 DNS 解析并校验 IP,拒绝内网/保留网段地址,防止模型输出的恶意链接触达内网服务。
- 下载目录按账户/对话隔离:附件下载路径从统一的
~/.openclaw/media/qqbot/downloads/改为downloads/{appId}/{peerId}/,按账户和对话隔离,避免多账户文件互相覆盖。 - 附件下载失败提示优化:下载失败时区分"超时"和"失败",给模型更明确的上下文提示。
OpenClaw 3.23 在 CLI 启动时引入了严格配置校验——任何 openclaw 子命令(包括 plugins install、plugins update、gateway stop)执行前都会校验整个 openclaw.json。由于 channels.qqbot 是本插件注册的(非内置 channel id),当插件尚未加载时执行这些命令会报 "Config invalid: unknown channel id: qqbot" 直接失败(鸡生蛋问题)。
本版本对所有升级路径进行了 3.23+ 适配:
- CLI 命令前配置暂存/恢复:
upgrade-via-npm.sh和upgrade-via-source.sh在执行任何 openclaw CLI 命令前临时移除channels.qqbot,完成后恢复。 - 安装前预停 Gateway:
upgrade-via-source.sh在plugins install前先停止 gateway,防止 chokidar 在配置中间状态(channels.qqbot已移除)时触发 restart,避免同样的校验错误。
- 启动问候 marker 路径:修复 marker 目录使用
$CMD变量替代硬编码路径,支持多 CLI 环境。
- 静默非升级启动问候:启动问候仅在
/bot-upgrade热更新触发时发送,常规 gateway 重启不再发送,减少消息干扰。
- 一键热更新指令
/bot-upgrade:在私聊中直接完成版本升级,无需登录服务器。支持--latest(升级到最新)、--version X(指定版本)、--force(强制重装)参数。升级前自动校验版本是否存在于 npm。 - 频道 API 代理工具
qqbot_channel_api:AI 可直接调用 QQ 开放平台频道 HTTP 接口,自动 Token 鉴权,内置 SSRF 防护。支持频道/子频道管理、成员查询、论坛发帖、公告发布、日程管理等操作。 - 凭证备份保护:新增
credential-backup.ts模块,热更新前自动备份appId/clientSecret到独立文件。isConfigured增加备份兜底检查——配置丢失但备份存在时仍可启动并自动恢复凭证。 - 指令用法查询:所有斜杠指令支持
?后缀查看详细用法(如/bot-upgrade ?)。
- 版本检查改为实时查询:
getUpdateInfo()从同步缓存改为async实时请求 npm registry,每次调用/bot-version或/bot-upgrade都拿最新数据。 /bot-logs支持多日志源聚合:超长日志自动截断并附带说明。
switchPluginSourceToNpm写后校验:写回openclaw.json前验证channels.qqbot数据未被破坏,防止竞态写入导致凭证丢失。- 升级脚本增加凭证备份逻辑:
upgrade-via-npm.sh和upgrade-via-source.sh升级前自动保存凭证快照。
- 版本检查改用 HTTPS 原生请求 + 多 registry 兜底:使用 HTTPS 直接请求 npm registry API 替代
npm viewCLI 调用;支持 npmjs.org → npmmirror.com 自动降级,解决国内网络环境下版本检查失败的问题。 - 升级脚本多 registry 兜底:
upgrade-via-npm.sh现在依次尝试 npmjs.org → npmmirror.com → 默认 registry,提升受限网络下的升级可靠性。
- Markdown 感知文本分块:使用 SDK 内置
chunkMarkdownText替代自定义分块函数,支持代码块自动关闭/重开、括号感知等。 - 启用块流式(blockStreaming):设置
blockStreaming: true,框架收集流式响应后通过deliver回调统一发送。 - 降低文本分块上限:
textChunkLimit从 20000 调整为 5000,提升消息可读性。 - 静默媒体发送错误:图片/语音/视频/文件发送失败时仅写日志,不再向用户展示错误提示。
- 引用内容不再截断:移除存储引用消息时的
MAX_CONTENT_LENGTH截断,保留完整消息原文。
- 移除
user-messages.ts中的MSG常量和formatMediaErrorMessage函数——插件层不再生成面向用户的错误提示。
- 升级脚本自动重启:
upgrade-via-npm.sh升级完成后自动重启网关,使新版本立即生效。 - 提高文本分块上限:
textChunkLimit从 2000 提升至 20000,允许更长的消息不被拆分发送。 - 移除主动推送更新通知:不再在检测到新版本时主动推送通知给管理员,版本信息仅通过
/bot-version和/bot-upgrade指令被动查询,减少消息打扰。
- 移除
update-checker.ts中的onUpdateFound回调和formatUpdateNotice辅助函数(主动推送移除后不再需要)。
- 斜杠指令体系:新增
/bot-ping、/bot-version、/bot-help、/bot-upgrade、/bot-logs五个插件级指令。 - 版本检查:后台定时检查 npm 最新版本,
/bot-version展示更新状态,/bot-upgrade提供升级指引。 - 启动问候语:区分首次安装与普通重启,发送不同问候语。
- 日志下载:
/bot-logs打包最近 2000 行日志发送文件给用户。
- 统一富媒体标签:将
<qqimg>、<qqvoice>、<qqfile>、<qqvideo>统一为<qqmedia>标签,系统根据文件扩展名自动识别媒体类型。
- 问候语防抖:60s 内重复重启不再重复发送问候语(解决升级过程中刷屏问题)。
- 主动消息 48h 过滤:发送启动问候前过滤超过 48h 未交互的用户,减少无效 500 错误。
- Token 缓存刷新阈值:从硬编码 5 分钟改为
min(5min, remaining/3),修复短有效期 token 缓存失效导致每分钟重复请求的问题。 - 精简上下文注入:优化注入给 OpenClaw 的上下文信息,减少冗余内容,降低 token 消耗。
- 新增 QQ
REFIDX_*引用消息上下文链路:从入站事件解析引用索引,缓存入站/出站消息摘要,并将引用内容注入 agent 上下文。 - 新增引用索引持久化存储(
~/.openclaw/qqbot/data/ref-index.jsonl):采用内存缓存 + JSONL 追加写,支持重启恢复、7 天 TTL 淘汰与 compact 压缩。 - 新增结构化引用附件摘要(图片/语音/视频/文件、local path/url、语音转录来源),提升引用回复语义完整性。
- 机器人回复在可用时自动挂载对当前用户消息的引用,提升 QQ 会话串联可读性。
- 新增语音输入汇总日志,包含 STT/ASR/fallback 来源计数和 ASR 文本预览,便于调试语音处理链路。
- 新增
asr_refer_text兜底支持——当 STT 未配置或转写失败时,使用 QQ 平台内置 ASR 文本作为低置信度兜底。 - 向 agent 上下文传递语音相关元数据(
QQVoiceAsrReferTexts、QQVoiceTranscriptSources、QQVoiceInputStrategy等)。 - README 新增定时提醒(主动消息)功能说明及演示截图。
- 统一
appId解析逻辑,同时支持数值和字符串类型(涵盖运行时和主动消息脚本)。
- 修复语音 prompt 提示,区分 STT 已配置/未配置状态,并增加 ASR 兜底和语音转发引导说明。
- 新增
npm-upgrade.sh脚本,支持通过 npm 包安装和升级插件。- 支持
--tag和--version选项,默认安装@alpha。 - 自动处理通道配置备份/恢复、旧插件清理(包括
qqbot、@sliverp/qqbot、openclaw-qqbot、"@tencent-connect/openclaw-qqbot" 等历史版本)、网关重启。 - 安装前临时移除
channels.qqbot配置,避免unknown channel id校验错误。
- 支持
- 修复插件 ID 与包名不一致导致插件加载失败的问题。
- 修复
normalizeTarget返回类型——现在返回结构化的{ok, to, error}对象。 - 修复
pull-latest.sh和upgrade.sh中过时的仓库 URL 引用。 - 修复
proactive-api-server.ts/send-proactive.ts中硬编码的配置文件路径。 - 修复
set-markdown.sh的read命令缺少超时参数,在非交互式环境下导致挂起的问题。
- 脚本现已完全兼容多种 CLI(openclaw / clawdbot / moltbot),支持自动检测配置文件路径。
upgrade-and-run.sh首次运行时若缺少 AppID/Secret,现在会显示清晰的提示。upgrade-and-run.sh升级前后现在会显示 qqbot 插件版本号。
- 修复多账户并发模式下的 Token 冲突——将全局 Token 缓存从单一变量重构为按
appId隔离的Map,解决多机器人同时运行时的11255 invalid request错误。 - 按实例独立刷新后台 Token——
clearTokenCache()和stopBackgroundTokenRefresh()现在接受appId参数,实现各账户独立管理。 - 修复非默认账户使用
openclaw message send发送失败的问题——不指定--account时accountId始终回退到"default",导致向其他机器人的 OpenID 发消息时返回 500 错误。
- 多账户配置文档——在 README 中新增"多账户配置"章节。
- 增强调试日志——
channel.ts中的日志添加[qqbot:channel]前缀,覆盖账户解析、消息发送和网关启动流程。 - API 日志前缀——所有 API 请求日志现在包含
[qqbot-api:${appId}]前缀,方便多实例调试。
- 优化富媒体标签解析逻辑,提高识别成功率。
- 修复文件编码和特殊路径处理问题导致无法发送文件的问题。
- 修复消息 seq 号重复导致的间歇性消息丢失问题。
- 升级脚本现在会在升级过程中自动备份和恢复 qqbot 通道配置。
- 更新 README,添加富媒体使用说明和插件配置/升级教程。
- 语音/文件发送能力,支持 TTS 文字转语音。
- 富媒体增强:上传缓存、视频支持、失败自动重试。
- 默认启用 Markdown 消息格式。
- 独立升级脚本,支持用户选择前台/后台启动。