| name | wxwork-drive |
| description | Manage spaces, folders and files in WeChat Work WeDrive (企业微信微盘) via wiseflow-relay — create space, create folder, upload image/video, list, info, rename, move, delete, and share files via file-level share link. Standard flow 建空间 → 传文件 → file-share 发分享链接给同事. Credentials (corp_id + corp_secret) read from daemon.env and passed per-request; relay is stateless. Space/folder IDs cached locally in spaces.json. |
| metadata | {"openclaw":{"emoji":"💾","requires":{"bins":["python3","curl"]}}} |
WeChat Work WeDrive(企业微信微盘空间 + 文件管理)
经 relay 透传凭据,对微盘做完整管理:建空间 → 建文件夹 → 上传 → 取文件分享链接(file-share)发给同事 是主链路;另有列目录 / 取信息 / 重命名 / 移动 / 删除 / 空间安全设置 / 空间邀请链接等辅助接口。
⚠️ 分享标准用法 = file-share(文件级),不是 space-share(空间级)。应用建的空间默认「邀请链接功能关闭」且 API 打不开(只能管理后台手动开),space-share 在未开启时报 640028。file-share 只要微盘权限就能用,发给同事直接看文件、无需加入空间。默认走 file-share,别白白去试 space-share。详见下文「典型流程」与「特殊用途接口」。
关键约束:往哪传文件
企业微信微盘的权限规则:应用只能往「自己创建的文件夹」或「空间根目录」里传文件,不能往他人/其他应用建的文件夹传。本应用 space-create 建空间后自动成为该空间超级管理员,所以根目录可传;但生产建议先 mkdir 建子文件夹再往里传,便于整理。整个文件夹/文件生命周期由本技能自行管理(relay 不替你记 spaceid/fileid)。
凭据与存储位置
凭据缺失时 Agent 行为
- 若
WXWORK_CORP_ID / WXWORK_CORP_SECRET 未配置:先读同目录 REFERENCE.md,按其中步骤指导用户获取企业 ID + 应用 Secret(含 relay 可信 IP 123.60.18.144 的配置、微盘权限开通)。
- 收到值后,交给 IT engineer 写入
daemon.env 并重启实例(或按 REFERENCE.md 用户自助 + 重启)。
- 若
OFB_KEY 未配置:同样让 IT engineer 在 daemon.env 配置后重启。
命令
通过 PATH 调用 wrapper,无需拼接脚本路径。
wxwork-drive <subcommand> [args...]
空间管理(写 spaces.json)
| 子命令 | 用途 |
|---|
space-create <alias> <space_name> [--default] | 经 relay 创建空间并登记;--default 设为默认 |
space-add <alias> <spaceid> [--default] | 登记一个已有空间 |
space-ls | 列已登记空间 |
space-default <alias> | 设默认空间 |
space-setting <space> [flags] | 空间安全设置(开链接免审批等,见下) |
space-share <space> | 取空间邀请链接(应用建的空间默认对普通用户不可见,把链接发给同事即可加入)。注意:邀请链接功能本身需先在「企业微信管理后台 → 微盘 → 空间安全设置」开启,API(97876)只控制「链接加入是否免审批」,不控制「链接功能是否开启」;未开启时 space-share 报 640028 space setting disable share url |
file-share <fileid> | 取文件级分享链接(发给同事直接看文件,不需加入空间)。不依赖空间邀请链接功能,绕过 640028。优先用这个 |
folder-default <space_alias> <folderid> | 设某空间的默认上传文件夹 |
space-setting flags
| flag | 上游字段 | 说明 |
|---|
--share-url-no-approve | share_url_no_approve=true | 链接加入空间免审批(邀请同事前通常要先开这个,否则链接发出去对方加入会被审批卡住) |
--share-url-default-auth N | share_url_no_approve_default_auth | 邀请链接默认权限:1仅下载 / 2可编辑 / 4仅预览 / 5可上传下载 / 200自定义 |
--enable-watermark | enable_watermark=true | 水印(仅专业版) |
--enable-confidential | enable_confidential_mode=true | 保密模式 |
--default-file-scope N | default_file_scope | 文件默认可查看范围:1仅成员 / 2企业内 |
--ban-share-external | ban_share_external=true | 禁止分享到企业外 |
只把显式传入的字段带上游,未传的字段保持原状。
文件管理(<space> 接受 alias 或裸 spaceid)
| 子命令 | 用途 | 关键参数 |
|---|
mkdir <space> <file_name> [--fatherid F] [--default-folder] | 新建文件夹 | --fatherid 缺省=空间根;--default-folder 把新文件夹记为默认上传文件夹 |
upload <file> <space> [--fatherid F] [--name NAME] | 上传图片/视频 | --fatherid 缺省=该空间 default_folderid |
ls <space> [--fatherid F] [sort_type] [limit] [start] | 列目录 | --fatherid 缺省=空间根;sort_type 1名升2名降3大小升4大小降5mtime升6mtime降 |
info <fileid> | 取文件/文件夹信息 | |
rename <fileid> <new_name> | 重命名 | |
move <fatherid> <fileid> [fileid...] [--replace] | 移动到目标目录 | --replace 重名覆盖 |
delete <fileid> [fileid...] | 批量删除 | |
脚本自动:
- 从
daemon.env 读 corp 凭据 + relay 身份
upload 按类型/大小自动选 upload-image(≤10M 图片)或 upload-video(视频或 >10M,relay 侧分块)
- 每条命令输出一行 JSON 结果(供 Agent 解析链式调用)+ 人类可读摘要
典型流程:从零上传到自建空间,再发文件分享链接
主链路 = 建空间 → 建文件夹 → 上传 → 取文件分享链接发给同事。同事拿到链接直接看文件,不需加入空间。
wxwork-drive space-create main wiseflow素材 --default
wxwork-drive mkdir main 2026-07 --default-folder
wxwork-drive upload ./cover.jpg main
wxwork-drive file-share <上一步 upload 返回的 fileid>
为什么主链路用 file-share 而不是 space-share:应用建的空间默认「邀请链接功能关闭」,且这个开关 API(97876)打不开,只能去企业微信管理后台手动开。space-share 在未开启时报 640028。file-share 是文件级分享,只要微盘权限就能用,绕过这个限制。所以默认走 file-share;只有要让同事加入整个空间协作时才用 space-share(且需先在管理后台开邀请链接功能)。
特殊用途接口(主链路用不到,按需调)
| 子命令 | 何时用 |
|---|
space-setting | 要开链接免审批 / 水印 / 保密模式 / 禁止外分享等空间级安全设置时。注意:它打不开「邀请链接功能」本身(那个只能管理后台开),只控制「链接加入是否免审批」等子项 |
space-share | 要让同事加入整个空间协作(不只是看一个文件)时。前提:已在管理后台开邀请链接功能,否则报 640028 |
ls / info / rename / move / delete | 后续整理:列目录确认、改名、移动、删除 |
返回值
每条命令最后一行 JSON 即 relay 返回的业务包络({ ok, ...字段, detail })。常用字段:
space-create:spaceid
mkdir / upload / rename:fileid
upload:fast_forward: true 表示命中秒传
file-share:share_url(文件级分享链接,发给同事直接看文件)
space-share:space_share_url(空间邀请链接,需管理后台开邀请链接功能)
ls:detail.file_list.item[],每项含 fileid / file_name / file_type(1文件夹/2文件/3文档/4表格/5收集表) / file_size / mtime
info:detail.file_info
move / delete:detail(上游回包)
fileid / spaceid 永久有效(未删除前),可长期引用。
Agent 行为约束
- 上传目标要合法:
fatherid 必须是空间根(spaceid)或本应用 mkdir 拿到的 fileid(或该空间已设 default_folderid)。往他人/其他应用建的文件夹传会 no permission 失败。
- 链式调用时从上一条命令的 JSON 行提取 fileid,不要凭空捏造。
- 优先用 spaces.json 的 alias / default,避免每次让用户重复传 spaceid。
- 视频上传可能耗时较长(100MB 约 1–3 分钟),等待脚本完整返回后再进行下一步,期间告知用户"正在上传..."。
- 禁止手动拼接 curl 命令替代脚本。
Error Handling
| 错误 | 原因 | 处理 |
|---|
WXWORK_CORP_ID / WXWORK_CORP_SECRET 未配置 | daemon.env 缺凭据 | 按 REFERENCE.md 引导用户获取,交 IT engineer 写 daemon.env + 重启 |
OFB_KEY 未配置 | daemon.env 缺 OFB_KEY | 让 IT engineer 配置后重启 |
MISSING_CORP_CREDENTIALS(relay 400) | 请求体缺 corp_id/corp_secret | 检查 daemon.env 是否生效(需重启) |
MISSING_FIELD(relay 400) | 缺必填字段(如 file_name) | 补全参数 |
GETTOKEN_FAILED(relay 502) | corp_secret 错或 corp_id 不存在 | 核对凭据;按 REFERENCE.md 重新获取 |
上游 errcode != 0(relay 400) | 企业微信拒绝,detail 里是原始 errcode/errmsg | 看 errmsg:no privilege→按 REFERENCE.md 开通微盘权限;no permission→fatherid 是他人建的文件夹,改用空间根或自己 mkdir 出来的 fileid |
Notes
- relay 在转发给企业微信前会剥离
corp_id / corp_secret,不下发
- relay 按
(corp_id, corp_secret) 缓存 access_token,client 无需自己管 token
spaces.json 只存 ID(非密),gitignore 是因为实例级、避免跨部署污染
- 接口契约详见
docs/WXWORK-DRIVE-API.md,上游 API 详见企业微信微盘文档
- 空间成员/部门增删、权限、空间重命名/解散属 admin 级,本技能不覆盖;用到再让 relay 加透传路由