本次更新把 QQ 文件与富媒体收发能力收进 openclaw_qq 插件本体,目标是:普通 OpenClaw 回复、message 工具、自动回复 payload 都可以直接通过 QQ 插件完成图片、语音、视频和普通文件发送,不再依赖外部“发文件 skill”兜底。
name、url、local_path、file_id、busid、size、mime。.txt、.zip、.pdf)默认只作为 <attachments> 元数据进入上下文。MediaPath / MediaPaths,避免 TXT 这类文本附件被 runtime 自动展开全文,造成提示词污染或外部文件注入。local_path 主动读取。outbound.sendMedia 现在会根据文件类型自动分流:
image segmentrecord segmentvideo segmentupload_group_file / upload_private_fileoutbound.sendPayload 会处理 payload.mediaUrl、payload.mediaUrls、payload.files,支持文本 + 多附件同发。file_id 会被作为可读 message id 回传,避免出现 [object Object] 这种错误结果。QQ 文件附件和用户直接上传给模型看的文件不是一回事。
如果插件把普通 QQ 文件的本地路径直接塞进 MediaPath,OpenClaw runtime 可能会把 text/plain / .txt 自动展开成 <file>...</file>。这对“引用人格模板、日志、配置、压缩包说明”等场景很危险:文件内容可能不是用户当前指令,却会直接进入模型上下文。
因此本轮规则改为:
local_path。插件同时兼容几类出站媒体来源:
file:// URLbase64:// 数据mediaReadFile / mediaAccess.readFile普通文件上传时,插件会优先走 OneBot/NapCat 的文件上传接口。对于远端 NapCat 容器无法直接读取的本机文件,插件会尽量使用可被 OneBot 接受的 URL / base64 / 上传路径;如果配置了 sharedMediaHostDir 与 sharedMediaContainerDir,本地文件也会先 staging 到共享目录再交给容器读取。
upload_group_file / upload_private_file;失败后再尝试 OneBot file segment。meta 中标记 mediaKind、transport、fallbackSent、fallbackType 等字段,便于排查。本轮已实测:
.zip 压缩包成功,走 upload_group_file。src/channel.ts
sendMedia 原生图片 / 音频 / 视频 / 文件分流sendPayload 多附件处理upload_group_file / upload_private_file 文件上传src/types.ts
file / record / image segment 的常见字段类型message 工具即可。