ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

xiaobei 企业微信微盘管理技能实战:基于 relay 透传的空间、文件与分享链路全解析

xiaobei 企业微信微盘管理技能实战:基于 relay 透传的空间、文件与分享链路全解析 人工智能AI Agent大模型AI 应用媒体生成【免费下载链接】xiaobei为OPC/中小微企业量身打造的自媒体获客智能体项目地址https://gitcode.com/gh_mirrors/wi/xiaobei点击查看免费下载导读本文围绕 xiaobei 项目公共技能wxwork-drive系统讲解如何通过 openclaw Agent 对「企业微信微盘」做完整管理——建空间、建文件夹、上传图片/视频、取文件级分享链接发给同事以及列目录、重命名、移动、删除等整理操作。读者读完后将掌握wxwork-drive的全部子命令用法、凭据配置与获取路径、spaces.json缓存机制、relay 接口契约以及file-share与space-share的正确选型可直接在 main / content-producer 等 crew 中落地「内容素材 → 微盘 → 同事协作」的自动化链路。一、技能定位一条以 relay 为核心的微盘管理链路wxwork-drive是 xiaobei 仓库中一个公共技能位于 skills/wxwork-drive/SKILL.md按 skills/README.md 的说明公共技能会安装到~/.openclaw/skills/对main与content-producer两个 crew 可见。它的核心链路非常清晰建空间 → 建文件夹 → 上传 → 取文件分享链接file-share发给同事在这一主链路之外还提供列目录 / 取信息 / 重命名 / 移动 / 删除 / 空间安全设置 / 空间邀请链接等辅助接口。整个技能建立在relay 透传的架构之上Agent 侧脚本scripts/drive.py不直接调用企业微信 OpenAPI而是把corp_idcorp_secret随每个请求一起 POST 给 relay生产地址https://relay.openclaw-for-business.com路径前缀/api/v1由 relay 负责与企业微信交互。relay无状态它不落盘凭据只在请求作用域内使用且按(corp_id, corp_secret)缓存 access_token复用 7200 秒secret 变了重取所以 client 无需自己管理 token。这一点在 docs/WXWORK-DRIVE-API.md 的「通用约定」中有明确记录。从源码结构看技能由三层组成docs/d21-symlink-skill.md 中也列出了该技能的 wrapper → py 映射wxwork-drive.shskills/wxwork-drive/wxwork-drive.sh顶层薄转发 wrapper被软链到~/.openclaw/bin后即可通过 PATH 直接调用内部用exec python3 $SCRIPT_DIR/scripts/drive.py $转发不改语义scripts/drive.py全部子命令的实现负责读环境变量、解析参数、调 relay、解包响应、维护spaces.jsonspaces.jsongitignore 的实例级 ID 缓存与REFERENCE.md凭据获取指引。二、关键约束能往哪里传文件企业微信微盘的权限规则有一个硬约束应用只能往「自己创建的文件夹」或「空间根目录」里传文件不能往他人或其他应用建的文件夹里传。本技能space-create建空间后应用自动成为该空间的超级管理员因此空间根目录可以传文件但生产环境建议先mkdir建子文件夹再往里传便于整理归档整个文件夹/文件生命周期由本技能自行管理relay 不替客户端记 spaceid / fileid所有 ID 由 client 侧维护。这条约束与 docs/WXWORK-DRIVE-API.md 开头交代的背景一致relay 之所以补全「建空间 / 建文件夹」接口正是因为此前只有upload-image/upload-videoclient 拿不到合法的spaceid/fatherid上传必失败。三、凭据与存储位置3.1 三类关键数据数据来源说明WXWORK_CORP_IDWXWORK_CORP_SECRETdaemon.env企业微信凭据实例级朋友圈wxwork-moments与微盘共用同一份OFB_KEYRELAY_BASE_URLdaemon.envrelay 身份与地址由 entrypoint 注入spaces.json本技能目录下空间/文件夹 ID 缓存已 gitignore实例级、非密spaces.json的存放路径为skills/wxwork-drive/spaces.json其结构以 skills/wxwork-drive/spaces.example.json 为参考{ default_space: main, spaces: [ { alias: main, spaceid: s.wwxxxxxxxxxxxx.xxxxxxxxxxxxx, default_folderid: fid_xxxxxxxxxxxxx } ] }要点space参数统一接受alias 或裸 spaceid。源码中resolve_space()scripts/drive.py会先在spaces.json中按 alias 查找命中则返回其spaceid与default_folderid未命中则把参数本身当作裸 spaceid 使用写入spaces.json时脚本会chmod 0o600见save_spaces()保证仅属主可读写它只存 ID非密gitignore 是因为实例级、避免跨部署污染。3.2 凭据缺失时 Agent 的行为当环境变量缺失时技能规定了明确的降级路径同样体现在load_env()中若WXWORK_CORP_ID/WXWORK_CORP_SECRET未配置先读同目录 skills/wxwork-drive/REFERENCE.md按其中步骤指导用户获取企业 ID 应用 Secret含 relay 可信 IP123.60.18.144的配置、微盘权限开通收到值后交给 IT engineer写入daemon.env并重启实例或按 REFERENCE.md 让用户自助配置 重启若OFB_KEY未配置同样由 IT engineer 在daemon.env配置后重启。3.3 凭据获取步骤REFERENCE.md 摘要REFERENCE.md 给出面向最终用户的自助获取流程Agent 在用户缺少凭据时应据此引导企业 IDcorp_id登录 企业微信 web 管理后台 → 「我的企业」→ 页面最下方「企业ID」→ 复制自建应用 可信 IPcorp_secret 来源「应用管理」→「自建」→「创建应用」→ 进入应用后「开发者接口」→「企业可信 IP」→ 添加 relay 服务 IP123.60.18.144→ 应用详情页复制 Secret只显示一次注意保存开通微盘权限后台「协作」→ 微盘 → 右侧上部「API」图标 → 「可调用接口的应用」里添加刚才的应用写入daemon.envWXWORK_CORP_ID企业ID、WXWORK_CORP_SECRET应用 Secret写入后必须重启实例才生效安全要求corp_secret 等同于密码不要贴到聊天群 / issue / 日志里。需要说明的是项目内的 AGENTS.md如 crews/main/AGENTS.md进一步约定main crew 不直接编辑daemon.env任何环境变量写入含OFB_KEY一律 spawn IT engineer 执行并重启 gateway。因此本文中「写入 daemon.env」均指由 IT engineer 代为完成或用户自助完成。四、命令体系全览通过 PATH 调用 wrapper无需拼接脚本路径wxwork-drive subcommand [args...]4.1 空间管理写入 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取空间邀请链接应用建的空间默认对普通用户不可见把链接发给同事即可加入file-share fileid取文件级分享链接发给同事直接看文件不需加入空间优先用这个folder-default space_alias folderid设某空间的默认上传文件夹关于space-share有一条容易踩坑的限制邀请链接功能本身需先在「企业微信管理后台 → 微盘 → 空间安全设置」手动开启API97876只控制「链接加入是否免审批」不控制「链接功能是否开启」未开启时space-share会报640028 space setting disable share url。file-share则完全不依赖空间邀请链接功能只要微盘权限就能用因此成为分享的标准用法。space-settingflags 与上游字段映射flag上游字段说明--share-url-no-approveshare_url_no_approvetrue链接加入空间免审批邀请同事前通常要先开这个否则链接发出去对方加入会被审批卡住--share-url-default-auth Nshare_url_no_approve_default_auth邀请链接默认权限1 仅下载 / 2 可编辑 / 4 仅预览 / 5 可上传下载 / 200 自定义--enable-watermarkenable_watermarktrue水印仅专业版--enable-confidentialenable_confidential_modetrue保密模式--default-file-scope Ndefault_file_scope文件默认可查看范围1 仅成员 / 2 企业内--ban-share-externalban_share_externaltrue禁止分享到企业外脚本只把显式传入的字段带上游未传的字段保持原状见 scripts/drive.py 中逐字段的if args.xxx is not None判断。4.2 文件管理space接受 alias 或裸 spaceid子命令用途关键参数mkdir space file_name [--fatherid F] [--default-folder]新建文件夹--fatherid缺省空间根--default-folder把新文件夹记为默认上传文件夹upload file space [--fatherid F] [--name NAME]上传图片/视频--fatherid缺省该空间default_folderidls space [--fatherid F] [sort_type] [limit] [start]列目录--fatherid缺省空间根sort_type1 名升 / 2 名降 / 3 大小升 / 4 大小降 / 5 mtime 升 / 6 mtime 降info fileid取文件/文件夹信息rename fileid new_name重命名move fatherid fileid [fileid...] [--replace]移动到目标目录--replace重名覆盖delete fileid [fileid...]批量删除脚本自动完成的事情从daemon.env读 corp 凭据 relay 身份load_env()缺失即die并给出引导upload按类型/大小自动选端点upload-image≤10M 图片或upload-video视频或 10Mrelay 侧分块每条命令输出一行 JSON 结果供 Agent 解析链式调用 人类可读摘要。五、典型流程从零上传到自建空间再发文件分享链接主链路 建空间 → 建文件夹 → 上传 → 取文件分享链接发给同事。同事拿到链接直接看文件不需加入空间。# 1. 建空间首次并设为默认 wxwork-drive space-create main wiseflow素材 --default # 2. 在空间根建文件夹并记为默认上传文件夹 wxwork-drive mkdir main 2026-07 --default-folder # 3. 上传自动用 default_folderid wxwork-drive upload ./cover.jpg main # 4. 取文件分享链接发给同事即可直接看文件不依赖空间邀请链接功能 wxwork-drive file-share 上一步 upload 返回的 fileid # → share_url发给同事为什么主链路用file-share而不是space-share应用建的空间默认「邀请链接功能关闭」且这个开关 API97876打不开只能去企业微信管理后台手动开。space-share在未开启时报640028。file-share是文件级分享只要微盘权限就能用绕过这个限制。所以默认走file-share只有要让同事加入整个空间协作时才用space-share且需先在管理后台开邀请链接功能。5.1 上传端点的自动选择逻辑源码佐证从 scripts/drive.py 可以看到upload的具体实现IMAGE_MAX_BYTES 10 * 1024 * 1024 # relay upload-image 上限 10M超过走 upload-video VIDEO_EXTS (.mp4, .mov, .avi, .wmv) ... size os.path.getsize(file_path) is_video file_path.lower().endswith(VIDEO_EXTS) use_video is_video or size IMAGE_MAX_BYTES endpoint upload-video if use_video else upload-image即.mp4/.mov/.avi/.wmv扩展名或大于 10MB 的文件自动走upload-videorelay 侧负责分块、SHA 与三步流程否则走upload-imagemultipart 上传relay 转成上游要求的 JSON base64。同时脚本在--fatherid未指定时会回退到该空间的default_folderid两者都没有则直接报错提示用folder-default或显式--fatherid。5.2 秒传与响应包络upload-video的响应中若fast_forward: true表示命中秒传脚本会打印「秒传」标记。所有 relay 接口统一使用响应包络{ ok, ...业务字段, detail }ok:false时带error/code这一点在 docs/WXWORK-DRIVE-API.md 的「通用约定」中定义。六、特殊用途接口主链路用不到按需调子命令何时用space-setting要开链接免审批 / 水印 / 保密模式 / 禁止外分享等空间级安全设置时。注意它打不开「邀请链接功能」本身那个只能管理后台开只控制「链接加入是否免审批」等子项space-share要让同事加入整个空间协作不只是看一个文件时。前提已在管理后台开邀请链接功能否则报640028ls/info/rename/move/delete后续整理列目录确认、改名、移动、删除从 docs/WXWORK-DRIVE-API.md 的推荐流程看这些接口的典型配合是space-create拿到spaceid应用自动成为该空间超管→space-setting打开share_url_no_approve→ 可选space-share拿邀请链接 →create-folderfatherid填spaceid即根目录→ 上传 → 可选list-files确认 → 可选rename/move/delete整理。其中「fatherid在根目录时填空间的spaceid本身」是关键细节。七、返回值与链式调用每条命令最后一行 JSON 即 relay 返回的业务包络{ ok, ...字段, detail }常用字段space-createspaceidmkdir/upload/renamefileiduploadfast_forward: true表示命中秒传file-shareshare_url文件级分享链接发给同事直接看文件space-sharespace_share_url空间邀请链接需管理后台开邀请链接功能lsdetail.file_list.item[]每项含fileid / file_name / file_type(1文件夹/2文件/3文档/4表格/5收集表) / file_size / mtimeinfodetail.file_infomove/deletedetail上游回包fileid/spaceid永久有效未删除前可长期引用。API 契约层面见 docs/WXWORK-DRIVE-API.md还补充了ls的分页约定start首次填 0后续填上次返回的detail.next_startlimit≤ 1000。脚本实现中ls缺省sort_type1, limit100, start0并会打印has_more提示与类型映射type_map {1:文件夹, 2:文件, 3:文档, 4:表格, 5:收集表}。八、Agent 行为约束上传目标要合法fatherid必须是空间根spaceid或本应用mkdir拿到的 fileid或该空间已设default_folderid。往他人/其他应用建的文件夹传会no permission失败链式调用时从上一条命令的 JSON 行提取 fileid不要凭空捏造优先用 spaces.json 的 alias / default避免每次让用户重复传 spaceid视频上传可能耗时较长100MB 约 1–3 分钟等待脚本完整返回后再进行下一步期间告知用户「正在上传...」。脚本侧 HTTP 超时上限TIMEOUT_S 300见 scripts/drive.py与这条约束配套禁止手动拼接 curl 命令替代脚本虽然 docs/WXWORK-DRIVE-API.md 给出了 curl 直连 relay 的示例但 Agent 统一走 wrapper。九、Error Handling错误码与处置错误原因处理WXWORK_CORP_ID / WXWORK_CORP_SECRET 未配置daemon.env 缺凭据按 skills/wxwork-drive/REFERENCE.md 引导用户获取交 IT engineer 写 daemon.env 重启OFB_KEY 未配置daemon.env 缺 OFB_KEY让 IT engineer 配置后重启MISSING_CORP_CREDENTIALSrelay 400请求体缺 corp_id/corp_secret检查 daemon.env 是否生效需重启MISSING_FIELDrelay 400缺必填字段如 file_name补全参数GETTOKEN_FAILEDrelay 502corp_secret 错或 corp_id 不存在核对凭据按 REFERENCE.md 重新获取上游errcode ! 0relay 400企业微信拒绝detail里是原始 errcode/errmsg看 errmsgno privilege→按 REFERENCE.md 开通微盘权限no permission→fatherid 是他人建的文件夹改用空间根或自己 mkdir 出来的 fileid这些错误码与 docs/WXWORK-DRIVE-API.md 的「错误码」表一一对应属于 relay 契约的一部分认证失败无X-OFB-Key则为 401。十、Notes机制细节与边界relay 剥离凭据relay 在转发给企业微信前会剥离corp_id/corp_secret不下发同时不落盘、不记日志只在请求作用域内使用token 缓存relay 按(corp_id, corp_secret)缓存 access_tokenclient 无需自己管 tokenspaces.json只存 ID非密gitignore 是因为实例级、避免跨部署污染接口契约详见 docs/WXWORK-DRIVE-API.md不在本技能覆盖范围空间成员/部门增删、权限、空间重命名/解散属 admin 级本技能不覆盖用到再让 relay 加透传路由即可docs/WXWORK-DRIVE-API.md 的「未覆盖」一节同样明确剩余空间管理与回调通知不在「建空间 → 建文件夹 → 上传 → 发文件链接」链路内。十一、部署与安装说明wxwork-drive作为公共技能随仓库分发无需单独安装运行依赖为python3与curl见 SKILL.md 的metadata.openclaw.requires.bins。wrapper 通过软链进入~/.openclaw/bin后即可经 PATH 直接调用skills/wxwork-drive/wxwork-drive.sh 中exec python3 $SCRIPT_DIR/scripts/drive.py $。环境变量方面RELAY_BASE_URL与OFB_KEY由 entrypoint 从 config/daemon.env.template 渲染出的daemon.env注入drive.py在RELAY_BASE_URL为空时回退到默认生产地址https://relay.openclaw-for-business.com仅当用户自建 relay 时才需要在daemon.env覆盖。运行数据openclaw.json、daemon.env、workspaces统一存放在~/.openclaw/程序与数据分离升级不会触碰用户数据详见 README.md 的目录职责说明。十二、实践建议速查分享永远优先file-share文件级分享不依赖空间邀请链接功能绕过640028同事直接看文件空间级协作才用space-share且前提是已在管理后台开启邀请链接功能上传前先mkdir建子文件夹并--default-folder或folder-default登记避免长期把文件堆在空间根邀请同事加入空间前先space-setting --share-url-no-approve否则对方加入会被审批卡住链式调用只信上一条命令的 JSON 输出fileid/spaceid 永久有效可长期复用凭据变更后必须重启实例GETTOKEN_FAILED/MISSING_CORP_CREDENTIALS时优先检查 daemon.env 是否生效。赞分享人工智能AI Agent大模型AI 应用媒体生成【免费下载链接】xiaobei为OPC/中小微企业量身打造的自媒体获客智能体项目地址https://gitcode.com/gh_mirrors/wi/xiaobei点击查看免费下载相关推荐企业微信微盘WeDrive开发实战基于 EasyWeChat 5.x 的空间、文件与权限管理完整指南企业微信微盘WeDrive开发实战基于 EasyWeChat 5.x 的空间、文件与权限管理完整指南 企业微信「微盘」为企业提供文件存储与管理能力支持空后端即时通讯EasyWeChat实战企业微信微盘文件管理架构设计与性能优化EasyWeChat实战企业微信微盘文件管理架构设计与性能优化 企业微信微盘作为企业级文件存储与协作平台在数字化转型浪潮中扮演着重要角色。然而直接对接企业后端即时通讯企业微信微盘开发实战用EasyWeChat简化文件管理在日常的企业微信开发中微盘文件管理往往是让开发者头疼的环节。复杂的API签名、繁琐的加密流程、难以调试的错误信息...这些问题是否也曾困扰过你今天我将分享后端即时通讯上一篇解放双手的明日方舟智能管家MAA自动化助手终极指南下一篇GTA5线上小助手终极免费工具轻松掌控洛圣都创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表