1. 内网 OpenClaw 接企微回调卡在哪一步企业微信的自建应用有个硬性要求配置「网页授权及JS-SDK」或「接收消息服务器」时企微后台会先向你的回调 URL 发一个 GET 校验请求只有拿到正确响应域名才算验证通过。问题在于大多数人的 OpenClaw 跑在内网机器或公司内网服务器上没有公网 IP企微的校验请求根本到不了你的服务后台就一直提示「回调地址验证失败」或者「域名归属校验不通过」。这个场景的典型特征是OpenClaw 本身功能没问题能跑自动化、能调模型、能处理文档但它「藏」在内网里企微看不见它。你要么去申请公网 IP、配防火墙端口映射要么用内网穿透把回调地址暴露出去。前者流程长、涉及网络变更审批后者更轻量。ZeroNews 就是干这件事的——它给你一个公网域名把企微发来的校验请求转发到你内网的 OpenClaw 服务上同时帮你响应企微的 GET 校验。这篇要解决的就是这条链路内网 OpenClaw 通过 ZeroNews 暴露企微 API 回调地址再用 TaoToken 统一管理模型调用的 Key最后验证回调连通、跑通创建文档的请求。适合已经在内网部署了 OpenClaw、想接企微自建应用做自动化文档/智能表格的开发者。下面按「前置准备 → 可复制配置 → 验证请求 → 排障」的顺序走配置骨架可以直接抄。2. 前置准备TaoToken 统一 Key 与企微应用信息在动 ZeroNews 之前先把两边的凭证理清楚不然后面配置到一半发现缺东西来回切后台很烦。TaoToken 侧OpenClaw 调用模型能力时需要 API Key。如果你同时用多个模型比如对话用一个、代码补全用另一个每个都单独配 Key 会很乱。TaoToken 的做法是给你一个统一的接入入口模型对话、Coding Plan、API Keys 都在一个控制台里管。先去控制台创建 Key模型对话入口https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteCoding Plan长期编码/Agent 场景https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite控制台https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteAPI Keys 管理https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteAPI 基础地址是https://taotoken.net/api这个地址在 OpenClaw 的模型配置里会用到。Key 创建后复制保存后面写进 config.toml。企微侧登录企业微信管理后台在「应用管理」里创建一个自建应用记下三个值——企业 IDcorpid、应用 Secret、AgentId。这三个是后面换 Access Token 用的。另外自建应用如果要调文档 API 或走 OAuth2.0企微要求可信回调域名的所属权跟企业认证主体一致或关联这点在配 ZeroNews 域名时要留意别随便拿个不相关的域名填。ZeroNews 侧参考 ZeroNews 官方安装文档在内网机器上装好客户端登录控制台拿到分配的公网域名。如果要用自有域名需要在控制台完成 CNAME 映射具体按 ZeroNews 的「自有域名」文档操作。装完之后你会得到一个形如https://xxx.zeronews.cc的公网地址这就是待会儿填进企微后台的回调 URL。3. 可复制配置config.toml 骨架与 ZeroNews 映射这一步是核心。先给 OpenClaw 的 config.toml 骨架把模型接入和回调服务端口都写清楚再讲 ZeroNews 怎么把公网请求转到这个端口。3.1 OpenClaw config.toml 骨架# OpenClaw 主配置 [server] # 内网监听端口ZeroNews 会把公网请求转发到这里 host 0.0.0.0 port 8787 # 回调路径企微校验请求会打到这个路径 callback_path /wecom/callback [model] # TaoToken 统一接入地址 base_url https://taotoken.net/api # 从 TaoToken 控制台创建的 Key api_key sk-你的TaoTokenKey # 按需选择模型对话/编码可分开配 default_model claude-sonnet timeout 60 [wecom] corp_id ww你的企业ID agent_id 1000002 secret 你的应用Secret # 企微回调校验用的 Token 和 EncodingAESKey在企微后台随机生成 callback_token 你在企微后台设置的Token encoding_aes_key 你在企微后台设置的EncodingAESKey [log] level info path ./logs/openclaw.log几个关键点说明。server.port是内网端口ZeroNews 的映射目标就是它别跟其他服务冲突。callback_path要和企微后台填的 URL 路径一致比如企微填https://xxx.zeronews.cc/wecom/callback那这里就是/wecom/callback。model.base_url指向 TaoToken 的 API 地址api_key填控制台创建的 Key这样 OpenClaw 调模型时走统一入口换模型不用改代码。3.2 ZeroNews 映射配置在 ZeroNews 控制台新建一条隧道/映射把公网域名指向内网服务配置项填写值说明公网域名xxx.zeronews.ccZeroNews 分配或自有域名内网地址127.0.0.1:8787对应 config.toml 的 host:port协议HTTPS企微要求回调走 HTTPS路径/wecom/callback与 callback_path 一致如果用的是自有域名先在域名服务商处加一条 CNAME 记录指向 ZeroNews 给的地址等解析生效后在 ZeroNews 控制台完成域名绑定。这一步不做企微后台填域名时会提示归属校验失败。3.3 企微后台填写回调回到企业微信管理后台进入自建应用的「开发者接口」→「网页授权及JS-SDK」或「接收消息服务器配置」把 ZeroNews 的公网 URL 填进去路径带上/wecom/callback。同时把 config.toml 里写的callback_token和encoding_aes_key填到企微后台对应位置两边必须完全一致。保存时企微会立即发 GET 校验请求ZeroNews 转发到内网 OpenClawOpenClaw 按企微规则解密并返回明文 echostr校验就通过了。4. 验证请求回调连通与创建文档实测配置填完不代表链路通了得实际验证。分两步先验回调再验 API 调用。4.1 回调连通性验证企微后台点保存时如果提示「验证成功」说明 GET 校验过了。但为了确认不是缓存假象可以手动模拟一次校验请求。企微的校验逻辑是发 GET 带msg_signature、timestamp、nonce、echostr四个参数你的服务解密echostr后原样返回明文。用 curl 模拟参数需按你的 Token/AESKey 实际计算签名这里演示请求结构curl -v https://xxx.zeronews.cc/wecom/callback?msg_signaturexxxtimestamp1234567890nonceabc123echostr加密串如果返回的是解密后的明文 echostr说明 ZeroNews 转发正常、OpenClaw 校验逻辑正常。如果返回 404检查 callback_path 和 ZeroNews 路径是否一致返回 401 或签名错误检查 callback_token 是否两边一致。4.2 获取 Access Token 并创建文档回调通了之后OpenClaw 就能用自建应用身份换 Access Token 调企微 API 了。把 corpid 和 secret 发给 OpenClaw或写进配置让它自动换拿到 token 后调创建文档接口# 获取 access_token curl https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpidww你的企业IDcorpsecret你的应用Secret返回里拿到access_token然后创建文档curl -X POST https://qyapi.weixin.qq.com/cgi-bin/wedoc/create_doc?access_tokenACCESS_TOKEN \ -H Content-Type: application/json \ -d { spaceid: 你的SPACEID, fatherid: 你的FATHERID, doc_type: 3, doc_name: 运营日报, admin_users: [USERID1] }doc_type为 3 表示文档类型具体取值按企微文档 API 说明。请求成功会返回文档的url和docid说明整条链路——内网 OpenClaw → ZeroNews → 企微 API——完全打通。实测下来从保存回调到成功创建文档顺利的话十分钟内能跑完。5. 本篇常见错排查回调验证一直失败九成是 callback_token 或 encoding_aes_key 两边不一致。企微后台生成后复制粘贴容易带空格逐字符核对。另一个原因是 ZeroNews 映射的路径跟 config.toml 的 callback_path 不匹配比如映射配了/但代码监听/wecom/callback。域名归属校验不通过企微要求可信域名所属权跟企业认证主体一致或关联。如果你用自有域名确认域名注册主体跟企微认证主体对得上对不上就换 ZeroNews 分配的域名或走关联主体流程。ZeroNews 转发 502内网 OpenClaw 没起来或端口写错。先在服务器上curl 127.0.0.1:8787/wecom/callback确认本地服务活着再看 ZeroNews 映射的内网地址是不是127.0.0.1:8787。如果 OpenClaw 跑在容器里127.0.0.1可能指不到宿主机改成容器实际 IP 或宿主机内网 IP。Access Token 拿不到corpid 或 secret 填错或者自建应用没被授权对应权限。企微后台检查应用可见范围secret 重新生成后旧的要作废。模型调用报 401TaoToken 的 Key 没填对或过期。去 API Keys 页面重新创建一个确认 config.toml 里base_url是https://taotoken.net/api别多写或少写路径。接入细节可对照接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite6. 把链路固定下来后续只改业务回调打通后剩下的就是业务逻辑。OpenClaw 定时汇总内网数据、调企微文档 API 写入智能表格这些都在内网完成ZeroNews 只负责把企微的校验和回调请求送进来。模型调用统一走 TaoToken 的 Key换模型时改 config.toml 的default_model就行不用动企微侧配置。如果你还在调回调阶段先把 API Keys 建好、接入文档过一遍API Keys 在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite 接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite 。长期跑编码和 Agent 任务的话Coding Plan 更省心https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite 。验证模型通不通直接去模型对话页发一条https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite 。