☰
xiaobei 企业微信朋友圈发布:corp_id / corp_secret 凭据获取与 wxwork-moments 实战指南
2026/9/26 2:28:17 网站建设 项目流程
  • 人工智能
  • AI Agent
  • 大模型
  • AI 应用
  • 媒体生成

【免费下载链接】xiaobei

为OPC/中小微企业量身打造的自媒体获客智能体

项目地址:https://gitcode.com/gh_mirrors/wi/xiaobei
点击查看免费下载

本文面向需要在 xiaobei 智能体上配置「企业微信客户朋友圈(wxwork-moments)」分发能力的 OPC/中小微企业运营者与实施工程师,系统讲解企业微信corp_id/corp_secret凭据的获取、daemon.env的写入与重启生效流程,并基于仓库源码深入剖析经 relay 透传凭据的朋友圈发布链路、四种发布形态(纯文字 / 图文 / 视频 / 图文链接)、附件限制与常见错误处理。读完即可独立完成从"申请凭据"到"成功发出第一条客户朋友圈"的完整闭环。

一、背景:wxwork-moments 技能与 relay 无状态架构

wxwork-moments是 xiaobei 中负责发布企业微信客户朋友圈的技能,技能说明见 crews/main/skills/wxwork-moments/SKILL.md。它的核心设计是:

  • 凭据不在技能侧落盘:企业微信的corp_id+corp_secret存放在实例级的daemon.env中,每次请求时透传给 relay 服务;
  • relay 无状态:relay 只在请求作用域内使用凭据,转发企业微信前会剥离corp_id/corp_secret,并按下发的(corp_id, corp_secret)分桶缓存 access_token(复用 7200 秒,secret 变更后重新获取),客户端无需自行管理 token。

这套设计意味着:同一份凭据同时被wxwork-moments(朋友圈)和wxwork-drive(微盘)使用,一次配置、两处受益。微盘侧的配套文档见 skills/wxwork-drive/SKILL.md,relay 侧的完整接口契约见 docs/WXWORK-DRIVE-API.md 与 docs/API-CONTRACT.md。

涉及的环境变量一览

变量用途存放位置
WXWORK_CORP_ID企业微信企业 IDdaemon.env(朋友圈 + 微盘共用)
WXWORK_CORP_SECRET自建应用的 Secretdaemon.env
OFB_KEYrelay 身份凭据(VIP Club 会员凭证)daemon.env(entrypoint 注入)
RELAY_BASE_URLrelay 服务地址,生产默认https://relay.openclaw-for-business.comdaemon.env(缺省时脚本有内置默认值)

仓库中 docker/docker-entrypoint.sh 展示了daemon.env的加载逻辑:entrypoint 会set -a后 source~/.openclaw/daemon.env,将其中变量注入 gateway 进程环境,随后技能脚本通过os.environ.get(...)读取(见 post_moments.py)。裸机部署下,config/daemon.env.template是运维模板,密钥类变量统一写入~/.openclaw/.env/daemon.env,由 scripts/install.sh 或 Docker entrypoint 首次启动时拷贝。

二、前置条件

在开始获取凭据前,请确认以下两点:

  1. relay 可信 IP:123.60.18.144——这是openclaw-for-business.com的 relay 服务地址(官方增值服务)。后续配置企业微信自建应用的「企业可信 IP」时必须填写该 IP,否则 relay 无法代表你的应用调用企业微信接口;
  2. 管理员身份:操作用户需为企业微信管理员,否则无法在管理后台创建自建应用、配置可信 IP 或开通接口权限。

三、获取企业 ID(corp_id)的完整步骤

  1. 打开 https://work.weixin.qq.com/wework_admin;
  2. 扫码登录企业微信 Web 管理后台;
  3. 在左侧导航栏点击「我的企业」;
  4. 在页面最下方可以看到「企业ID」,复制后交给 Agent(或 IT engineer)即可。

企业 ID 是企业身份的全局标识(形如ww开头的字符串),它在朋友圈与微盘两个技能中通用,务必妥善保管。

四、创建自建应用并配置可信 IP(corp_secret 的来源)

corp_secret来自企业微信的自建应用,具体步骤如下:

  1. 仍在企业微信 Web 管理后台,点击左侧「应用管理」→「应用管理」;
  2. 滚动到最下方「自建」区域,点击「创建应用」,填写应用信息完成创建;
  3. 进入新建的应用详情页,在最下方「开发者接口」中找到「企业可信 IP」,点击「配置」;
  4. 添加可信 IP123.60.18.144;
  5. 回到应用详情页,可以看到Secret(即corp_secret)——该值只显示一次,务必立即复制保存,丢失后只能重置。

从源码实现看,corp_secret的错误会直接表现为 relay 返回 502GETTOKEN_FAILED(corp_secret 错或 corp_id 不存在),详见本文第七节的错误对照表。

五、给应用开通微盘 / 客户联系权限

自建应用创建后,还需要为它开通两项接口权限,否则调用会被企业微信拒绝:

  • 微盘(供wxwork-drive使用):后台 → 左侧「协作」→ 微盘 → 右侧上部的「API」图标(图标很小,仔细看)→ 点开 → 在「可调用接口的应用」里添加上一步创建的应用;
  • 客户联系(朋友圈用):后台 → 左侧「客户与上下游」→ 客户联系 → 右侧上部「API」图标 → 点开 → 在「可调用接口的应用」里添加同一个应用。

权限未开通时,relay 上游会返回no privilege错误(详见第七节)。注意微盘侧的另一个细节:企业微信微盘要求应用只能往「自己创建的空间/文件夹」里上传,wxwork-drive通过space-create建空间后应用自动成为超级管理员,从而获得合法上传目标,具体见 skills/wxwork-drive/SKILL.md。

六、写入 daemon.env 并重启(关键生效步骤)

收到corp_id+corp_secret后,不要直接手改 daemon.env(除非你是运维人员),两条可行路径:

路径 A(推荐):交由 IT engineer 配置把corp_id/corp_secret交给 IT engineer,由其写入daemon.env的WXWORK_CORP_ID/WXWORK_CORP_SECRET,再用gatewayMCP 工具应用配置并重启 Gateway。

路径 B(用户自助):编辑daemon.env在daemon.env中填入:

WXWORK_CORP_ID=<企业ID> WXWORK_CORP_SECRET=<应用 Secret>

然后重启实例(具体重启方式见部署文档或咨询 IT engineer)。

⚠️写入daemon.env后必须重启实例才生效。这是因为 entrypoint 只在启动时加载daemon.env(见 docker/docker-entrypoint.sh),不重启则进程内的环境变量不会更新,relay 侧会一直报MISSING_CORP_CREDENTIALS。

同理,如果OFB_KEY未配置,也由 IT engineer 在daemon.env配置后重启——OFB_KEY是 VIP Club 会员凭证,由 ofb 掌柜签发,脚本在缺失时会明确报错(见 post_moments.py)。

七、发布命令:四种形态一次说清

技能通过 scripts/skill-wrappers.sh 将顶层 wrapper 软链暴露到~/.openclaw/bin/并注入 PATH,因此 Agent 直接以wxwork-moments "<正文>" [附件...]的形式调用即可,无需拼接脚本路径。wrapper 本身只是exec转发(见 wxwork-moments.sh)。

1. 纯文字

wxwork-moments "正文内容"

2. 图文(最多 9 张图)

wxwork-moments "正文内容" /path/to/img1.jpg /path/to/img2.png

支持 jpg/jpeg/png/gif 格式。

3. 视频(1 个,≤ 30 秒,≤ 10MB)

wxwork-moments "正文内容" /path/to/video.mp4

支持 mp4/mov 等格式(脚本同时识别 avi/wmv,见下文源码说明)。

4. 图文链接(必须传封面图)

wxwork-moments "推荐阅读" --link https://example.com/article "文章标题" /path/to/cover.jpg

⚠️ 链接模式必须附封面图,否则发布失败。这是企业微信 link 类附件的硬性要求。

附件限制速查表

附件类型限制
图片(jpg/png/gif)最多 9 个
视频(mp4/mov)最多 1 个,时长 ≤ 30 秒,大小 ≤ 10MB
图文链接最多 1 个,可附 1 张封面图
图片与视频/链接不可同时存在

八、源码级原理:post_moments.py 的完整调用链

发布脚本 post_moments.py 是理解整个链路的最佳入口,它完整处理了凭据读取、素材上传、发布三步,Agent 无需手动执行任何中间步骤。

8.1 凭据读取与环境校验(L44-L57)

脚本从环境变量读取WXWORK_CORP_ID/WXWORK_CORP_SECRET/RELAY_BASE_URL(缺省回退到内置的https://relay.openclaw-for-business.com)/OFB_KEY,任一缺失立即以✗前缀错误退出,并给出"按 REFERENCE.md 引导获取 → 交 IT engineer 写 daemon.env → 重启"的处理指引。

8.2 图片自动规范化(L118-L162)

企业微信朋友圈对图片有严格的分辨率要求,errcode 41081 media's resolution invalid是高频错误。脚本内置auto_resize_image()处理三种情况:

  1. 非 RGB 模式(RGBA/P/CMYK)→ 自动转换为 RGB;
  2. 尺寸过大(任一边 > 1248px)→ 等比缩放到 1200px(Image.LANCZOS高质量重采样);
  3. 尺寸过小(任一边 < 600px)→ 等比放大到两边均 ≥ 600px。

规范化后的图片以 JPEG(quality=92)写入临时文件再上传。若本机未安装 Pillow,则跳过规范化直接上传原图。

8.3 图文链接的封面兜底(L221-L233)

链接模式未显式传封面图时,脚本会尝试抓取目标 URL 的og:image元标签并下载作为封面;抓取不到或下载失败则直接报错,提示手动指定封面。这个兜底逻辑大大降低了链接模式的使用门槛。

8.4 素材上传与发布(L174-L293)

  • 上传:POST {RELAY_BASE_URL}/api/v1/wxwork/media/upload,multipart 携带corp_id+corp_secret+type+media文件,请求头带X-OFB-Key;
  • 发布:POST {RELAY_BASE_URL}/api/v1/wxwork/moments/add,JSON 携带corp_id+corp_secret+text+attachments。纯文字只传text;图片/视频分别以msgtype: image/msgtype: video组装;链接以msgtype: link组装(含title/url/media_id封面)。

两个端点与 docs/API-CONTRACT.md 中的契约完全对应。响应统一为{ success, data, error }包络,脚本的unwrap()同时容忍 flat 与包络两种返回形态。发布成功后输出✓ 发布成功以及moment_id(即add_moment_task的任务 ID,可用于后续在管理后台查询状态)。

8.5 Agent 行为约束(不得跳过)

  1. 等待脚本完整返回后再进行下一步——脚本包含上传和发布两个网络请求,耗时可能超过 10 秒,期间告知用户"正在上传素材 / 正在发布……",禁止在脚本结束前自行拼接其他 curl 命令;
  2. 脚本已处理凭据读取、素材上传、发布等全部步骤,无需手动执行任何中间步骤;
  3. 脚本输出最后一行以✓开头表示成功;以✗开头表示失败,需将错误信息完整告知用户;
  4. 正文中不要包含换行\n,企业微信 API 无法解析\n(脚本实现中也会将换行替换为字面\n字符串,见 L201)。

九、错误处理对照表

错误信息原因处理
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 是否生效(需重启)
GETTOKEN_FAILED(relay 502)corp_secret 错或 corp_id 不存在核对凭据;按本文三、四节重新获取
no privilege应用未开通客户联系权限按本文第五节「客户联系」步骤开通
41081 media's resolution invalid图片分辨率不合规(非 RGB / 过小 / 过大)脚本已自动规范化(RGB 转换 + 分辨率调整),若仍失败检查图片是否损坏
图片最多 9 张超出数量限制减少传入文件数量

十、安全注意事项

  • corp_secret等同于密码,不要贴到聊天群 / issue / 日志里;OFB_KEY同理;
  • relay不落盘凭据,只在请求作用域内使用;tokenCache 按(corp_id, corp_secret)分桶,relay 在转发给企业微信前会剥离corp_id/corp_secret,不下发;
  • 临时素材(media_id)有效期3 天,脚本每次发布时重新上传,无需手动管理。

十一、补充说明

  • 朋友圈任务创建成功后,指定员工会在企业微信中收到一键发布提醒;
  • moment_id可用于后续在企业微信管理后台(客户联系 → 客户朋友圈)查询发布状态;
  • 企业微信朋友圈分发无需执行published-track相关操作(不同于其它平台分发流程,见 crews/main/skills/wxwork-moments/SKILL.md);
  • 微盘侧的权限与接口细节(file-share文件级分享绕过640028等)见 skills/wxwork-drive/SKILL.md 与 docs/WXWORK-DRIVE-API.md,与本文凭据共用一套WXWORK_CORP_ID/WXWORK_CORP_SECRET。

至此,从「打开企业微信管理后台获取企业 ID」到「自建应用 + 可信 IP + 权限开通 + 写入 daemon.env 重启」,再到「四种形态的朋友圈发布命令与错误排查」,整条链路已经完整覆盖。配置一次,朋友圈与微盘双通道即可同时就绪。

  • 人工智能
  • AI Agent
  • 大模型
  • AI 应用
  • 媒体生成

【免费下载链接】xiaobei

为OPC/中小微企业量身打造的自媒体获客智能体

项目地址:https://gitcode.com/gh_mirrors/wi/xiaobei
点击查看免费下载

相关推荐

上一篇:livego中的数据结构选择:提升直播服务效率的关键决策
下一篇:Ollama Copilot核心原理揭秘:一文读懂如何将Ollama大模型转化为智能代码补全工具

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询