
1. 企微自建应用接入 OpenClaw 后到底能不能给其他成员发消息先把结论说清楚能但发消息这件事不是 OpenClaw 直接干的而是你那个企微自建应用干的。OpenClaw 只是帮你把后端逻辑写出来、把请求发出去真正落到同事手机上的那条消息走的是企业微信的「应用消息」接口。所以整条链路能不能通取决于三件事应用可见范围有没有覆盖到目标成员、应用有没有拿到发消息的接口权限、以及调用时的 access_token 是不是有效。我一开始也以为把 CorpID 和 Secret 丢给 OpenClaw 就完事了结果第一次调用直接返回 60020not allow to access from your ip第二次返回 81013user not exist折腾了半天才明白企微的权限是分层的企业级、应用级、成员级各管一段任何一层没配对消息就发不出去。这篇就按「先核对权限再走 TaoToken 统一 Key 通道完成鉴权最后逐条验证」的顺序写。适合两类人一是已经建好企微自建应用、想用 OpenClaw 自动发通知的开发者二是手里有 OpenClaw 但不确定企微这边要开哪些开关的同学。核心检索词就是企微自建应用发消息、OpenClaw 接入企业微信、TaoToken 统一 Key 通道这几个下面会反复落到具体配置上。需要提前说明的是企微的接口权限和可见范围是在管理后台配的OpenClaw 改不了这部分它只能改后端调用逻辑。所以别指望给 OpenClaw 发一句「帮我给张三发消息」就自动生效前置的授权动作必须人工在后台点完。2. 接入前必须核对的企微权限与 TaoToken 统一 Key 通道准备2.1 企微侧要拿到的三样东西进入企微管理后台work.weixin.qq.com用管理员账号操作。第一样是企业 IDCorpID在「我的企业」→「企业信息」最下面形如wwxxxxxxxxxxxxxxxx。第二样是自建应用的 AgentId 和 Secret在「应用管理」→「自建」→ 点进你的应用AgentId 是纯数字Secret 点「查看」会发到管理员企微上。第三样最关键应用可见范围。在应用详情页的「可见范围」里必须把要接收消息的同事加进去否则接口会报 81013。这里有个容易忽略的点可见范围分「部门」和「成员」两种添加方式如果你只加了部门但同事不在该部门照样发不到。我试过把整个「研发部」加进去结果新入职还没分配部门的同事收不到后来单独把他加进成员列表才行。2.2 消息接口权限确认自建应用默认有「发送应用消息」的权限但如果你要用更细的能力比如发给外部联系人、发到群机器人需要在「应用管理」里单独申请。普通给内部成员发文本、图文、markdown 卡片用message/send接口就够不需要额外申请。接口地址是https://qyapi.weixin.qq.com/cgi-bin/message/send?access_tokenACCESS_TOKEN2.3 TaoToken 统一 Key 通道的作用OpenClaw 在调用企微接口前需要先拿到 access_token。企微的 access_token 有效期 7200 秒且同一应用多次获取会互相顶掉自己写缓存逻辑容易出并发问题。TaoToken 的统一 Key 通道在这里的价值是把模型调用和企微接口调用的鉴权收敛到一套 Key 管理里OpenClaw 侧只需要配一次 Base URL 和 Key不用在代码里硬编码企微 Secret。TaoToken 的 API 入口是https://taotoken.net/api控制台在https://taotoken.net/consoleAPI Keys 管理在https://taotoken.net/api-keys。你可以在控制台建一个专用 Key给 OpenClaw 用权限范围只开需要的模型和接口避免一个 Key 泄露影响全部业务。注意TaoToken 是统一 Key 通道不是企微的替代品。企微的 CorpID、Secret、AgentId 仍然要在企微后台拿TaoToken 负责的是 OpenClaw 调用时的鉴权收敛。3. 可复制的企微应用配置片段与 OpenClaw 侧请求示例3.1 企微应用配置片段JSON把下面这段存成wecom-app.json放在 OpenClaw 能读到的配置目录里。路径按你的实际项目改我这边放在~/.openclaw/config/wecom-app.json{ corp_id: wwxxxxxxxxxxxxxxxx, agent_id: 1000002, secret: 你的应用Secret, visible_members: [zhangsan, lisi], visible_departments: [1, 2], api_base: https://qyapi.weixin.qq.com/cgi-bin, token_cache_ttl: 7000 }visible_members和visible_departments只是给你自己核对用的实际权限以企微后台为准。token_cache_ttl设 7000 秒比 7200 少 200 秒留出刷新缓冲。3.2 TaoToken 侧配置TOMLOpenClaw 如果支持 TOML 配置可以这样写~/.openclaw/config/taotoken.toml[taotoken] base_url https://taotoken.net/api api_key sk-你的TaoTokenKey default_model claude-sonnet-4-20250514 [taotoken.wecom] enabled true corp_id wwxxxxxxxxxxxxxxxx agent_id 1000002Base URL、Key、Model ID 三件套在这里齐了。如果你用的是 Claude Code 或 Cline 这类工具配置项名称可能不同但核心就是这三样。3.3 OpenClaw 侧发消息请求示例下面是一段 Python 示例OpenClaw 生成后端逻辑时可以直接用。先拿 access_token再发消息import requests import json CORP_ID wwxxxxxxxxxxxxxxxx SECRET 你的应用Secret AGENT_ID 1000002 def get_access_token(): url fhttps://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid{CORP_ID}corpsecret{SECRET} resp requests.get(url, timeout10) data resp.json() if data.get(errcode) ! 0: raise RuntimeError(fgettoken failed: {data}) return data[access_token] def send_text(to_user, content): token get_access_token() url fhttps://qyapi.weixin.qq.com/cgi-bin/message/send?access_token{token} payload { touser: to_user, msgtype: text, agentid: AGENT_ID, text: {content: content}, safe: 0 } resp requests.post(url, datajson.dumps(payload), timeout10) return resp.json() if __name__ __main__: print(send_text(zhangsan, 来自 OpenClaw 的测试消息))touser填企微账号不是手机号是成员账号多个用|分隔。agentid必须和你后台的应用一致填错会报 60011。3.4 用 TaoToken 统一 Key 调用模型生成消息内容如果你想让 OpenClaw 先调模型生成消息文案再发给同事可以这样接import requests def gen_message(prompt): url https://taotoken.net/api/v1/chat/completions headers { Authorization: Bearer sk-你的TaoTokenKey, Content-Type: application/json } body { model: claude-sonnet-4-20250514, messages: [{role: user, content: prompt}] } resp requests.post(url, headersheaders, jsonbody, timeout30) return resp.json()[choices][0][message][content]这样模型调用和企微发送走两条通道但鉴权都收敛到 TaoToken 的 Key 上OpenClaw 侧不用维护两套密钥。4. 逐条验证请求与成功结果确认4.1 第一步验证 access_token 能拿到先单独跑get_access_token()成功返回类似{errcode:0,errmsg:ok,access_token:xxxxx,expires_in:7200}如果这里就失败后面不用试了。常见错误 40001 是 Secret 填错40013 是 CorpID 不对。4.2 第二步验证应用可见范围调message/send之前先用user/list接口确认目标成员在你的可见范围内https://qyapi.weixin.qq.com/cgi-bin/user/list?access_tokenTOKENdepartment_id1fetch_child1返回里能看到成员列表。如果目标同事不在说明可见范围没配好回后台加。4.3 第三步发送测试消息跑send_text(zhangsan, 测试)成功返回{errcode:0,errmsg:ok,msgid:xxxxx}msgid有值就说明消息已经投递到企微服务器。同事那边应该能收到来自你应用的消息卡片。4.4 第四步确认消息类型和展示文本消息最稳markdown 消息在企微里会渲染成卡片但要注意markdown类型只支持部分语法。如果你发的是图文articles数组里每项要有title、description、url、picurl。提示测试阶段建议先发给自己确认链路通了再发给同事避免打扰。5. 本篇常见错误排查401、local proxy failed、reading choices、OAuth5.1 401 Unauthorized这个通常出现在调 TaoToken 模型接口时Key 填错或过期。检查Authorization: Bearer sk-xxx里的 Key 是不是从https://taotoken.net/api-keys复制的完整值。如果 Key 没问题看下 Base URL 是不是写成了https://taotoken.net/api少写/api会 404多写斜杠可能 401。5.2 local proxy failedOpenClaw 如果配了本地代理转发报这个错说明代理进程没起来或端口被占。检查你的代理配置里base_url指向的本地端口用curl http://127.0.0.1:端口/health确认。如果是 Cline MCP 场景MCP server 没启动也会报类似错误重启 MCP 进程即可。5.3 reading choices 报错调模型接口返回reading choices说明响应体里没有choices字段通常是返回了错误 JSON。打印完整响应看看常见原因是 model ID 写错比如把claude-sonnet-4-20250514写成claude-sonnet-4。Model ID 必须和 TaoToken 控制台里列出的完全一致。5.4 OAuth 相关报错如果你用的是 Claude Code 接入报 OAuth 错误说明认证方式选错了。Claude Code 应该用 API Key 方式不是 OAuth。在~/.claude/settings.json里配{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: sk-你的TaoTokenKey } }三件套 Base URL、Key、Model ID 都要对上。Codex 的话看~/.codex/auth.json里面OPENAI_API_KEY填 TaoToken 的 Keybase_url填https://taotoken.net/api。5.5 企微侧错误码对照错误码含义处理60020IP 不在白名单后台配可信 IP81013成员不存在检查可见范围60011agentid 无效核对 AgentId40001Secret 错误重新查看 Secret45009接口调用超限降低频率6. 把 OpenClaw 发消息能力落到日常通知场景链路通了之后实际用法可以很灵活。比如让 OpenClaw 监听某个事件触发时先调模型生成一段通知文案再通过自建应用发给相关同事。我现在的做法是OpenClaw 里配一个定时任务每天下班前把当天构建结果汇总调 TaoToken 的模型接口润色成一段人话再走企微message/send发给项目组。如果你要长期跑这类编码和 Agent 任务可以考虑 TaoToken 的 Coding Plan入口在https://taotoken.net/coding-plan适合需要稳定调用模型做自动化的场景。只是临时验证模型效果的话用模型对话页https://taotoken.net/chat就够了。接入文档在https://taotoken.net/docAPI Keys 在https://taotoken.net/api-keys排障时对着文档核对参数最快。最后提醒一句企微的可见范围和接口权限是动态的新同事入职、部门调整后都要重新核对别配一次就不管了。我踩过的坑就是部门重组后没更新可见范围消息静默失败了好几天才发现。