
1. 企业微信自建应用接入 OpenClaw 的真实场景与坑点企业微信自建应用接入 OpenClaw本质是把一个跑在腾讯云 Lighthouse 云服务器上的服务端注册成企业微信后台能回调、能收发消息的「自建应用」。听起来只是填几个参数但真正动手你会发现Corp ID、AgentID、Corp Secret、Token、EncodingAESKey 分散在不同页面OpenClaw 那边又要一份 config.tomlAPI Key 还得单独管一套。多工具鉴权混乱、回调 URL 验证不过、端口被已有 bot 占用是这条链路上最常见的三类问题。这篇聚焦的场景很具体你已经在 Lighthouse 上跑了一个企业微信 bot现在想再加一个「自建应用」形态的 agent两者共用同一台服务器、同一个域名、同一套 SSL但走不同的回调路径。目标是把 API Key 收敛到 TaoToken 统一管理用一份 config.toml 骨架把 OpenClaw 服务端跑起来再让企业微信后台的 URL 验证一次通过。适合已经有一台 Lighthouse、有备案域名、对 Nginx 和 systemd 不陌生、但被企业微信回调签名和 OpenClaw 配置卡住的开发者。我试过把 bot 和 agent 塞进同一个进程结果端口冲突、回调路径打架最后拆成两个服务、Nginx 按路径分流才稳定。下面按「前置准备 → TaoToken 统一 Key → config.toml 骨架 → 企业微信回调对接 → 消息收发验证 → 排错」的顺序走一遍命令和配置都可以直接抄。2. TaoToken 前置把分散的 API Key 收敛成一套OpenClaw 这类 Agent 框架通常要调多个模型如果每个模型单独申请 Key、单独配环境变量时间一长根本记不清哪个 Key 对应哪个服务。TaoToken 的作用就是提供一个统一的 API 入口你只需要在控制台生成一个 KeyOpenClaw 的 config.toml 里所有模型请求都指向同一个 base_url鉴权只认这一个 Key。先做两件事。第一注册并登录 TaoToken 控制台在「API Keys」页面创建一个新 Key复制出来存好后面 config.toml 要用。第二确认你要用的模型名OpenClaw 的配置里需要显式写模型标识别写错。控制台入口创建 Keyhttps://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteAPI Keys 页面https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite接入文档config 字段说明https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteAPI 的基础地址是https://taotoken.net/api注意这个地址不带任何查询参数直接作为 base_url 写进配置。如果你只是想先验证模型通不通可以用模型对话页面发一条测试消息确认 Key 有效再往下走https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite注意Key 只显示一次创建后立刻复制。不要把它写进会提交到 Git 的文件里用环境变量或单独的 secrets 文件加载。3. 可复制配置Lighthouse 上的 config.toml 骨架与 Nginx 分流这一节是全文的核心分三块服务器信息确认、OpenClaw 的 config.toml、Nginx 路径分流。先把清单填了避免后面端口冲突。3.1 Lighthouse 服务器信息清单在动手前SSH 登进 Lighthouse把这几项确认清楚# 登录本地终端执行 ssh root你的 Lighthouse 公网 IP # 查看当前监听端口确认已有 bot 占了哪些 ss -tulpn | grep LISTEN # 查看相关进程 ps aux | grep -E node|python|nginx|docker # 查看防火墙 iptables -L -n 2/dev/null || ufw status假设你已有的 bot 占了18789新 agent 用18790回调路径分别规划为/wecom/bot和/wecom/agent。域名假设是api.example.comSSL 证书已经用 certbot 签好。3.2 OpenClaw 的 config.toml 骨架在服务器上创建配置目录写入下面这份骨架。关键点base_url指向 TaoToken 的 API 地址api_key从环境变量读模型名按你实际用的填。mkdir -p /opt/openclaw-agent cd /opt/openclaw-agent# /opt/openclaw-agent/config.toml [server] host 127.0.0.1 port 18790 # 企业微信回调路径需与 Nginx location 一致 callback_path /wecom/agent [llm] # TaoToken 统一入口所有模型请求走这里 base_url https://taotoken.net/api # 从环境变量读取避免明文写死在文件里 api_key ${TAOTOKEN_API_KEY} model claude-sonnet-4-20250514 timeout_seconds 60 max_retries 2 [wecom] corp_id ${WECOM_CORP_ID} agent_id ${WECOM_AGENT_ID} corp_secret ${WECOM_CORP_SECRET} token ${WECOM_TOKEN} encoding_aes_key ${WECOM_ENCODING_AES_KEY}环境变量写进 systemd 的 service 文件别写进 shell profile# /etc/systemd/system/openclaw-agent.service [Unit] DescriptionOpenClaw WeCom Agent Afternetwork.target [Service] Typesimple WorkingDirectory/opt/openclaw-agent EnvironmentTAOTOKEN_API_KEYsk-你的key EnvironmentWECOM_CORP_IDww你的corpid EnvironmentWECOM_AGENT_ID1000002 EnvironmentWECOM_CORP_SECRET你的secret EnvironmentWECOM_TOKEN你的token EnvironmentWECOM_ENCODING_AES_KEY你的43位key ExecStart/usr/local/bin/openclaw --config /opt/openclaw-agent/config.toml Restarton-failure RestartSec5 [Install] WantedBymulti-user.targetsystemctl daemon-reload systemctl enable --now openclaw-agent systemctl status openclaw-agent3.3 Nginx 路径分流企业微信要求 HTTPS443 端口由 Nginx 统一入口按路径转发到不同后端。已有 bot 的 location 保留新增 agent 的# /etc/nginx/conf.d/wecom.conf server { listen 443 ssl; server_name api.example.com; ssl_certificate /etc/letsencrypt/live/api.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/api.example.com/privkey.pem; # 已有 bot location /wecom/bot { proxy_pass http://127.0.0.1:18789; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } # 新增 agent location /wecom/agent { proxy_pass http://127.0.0.1:18790; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_read_timeout 10s; } }nginx -t systemctl reload nginx注意proxy_read_timeout别设太长企业微信 POST 要求 5 秒内响应GET 验证要求 1 秒内返回明文超时会被判定失败并重试。4. 验证请求企业微信 URL 验证与消息收发配置写完不代表通了必须走一遍企业微信后台的 URL 验证再做一次真实消息收发。4.1 企业微信后台填参数进入企业微信管理后台 → 应用管理 → 自建 → 你的应用 → 接收消息 → 设置 API 接收。填URLhttps://api.example.com/wecom/agentToken与 config.toml 里WECOM_TOKEN一致EncodingAESKey与 config.toml 里一致点「保存」时企业微信会发一个 GET 请求带msg_signature、timestamp、nonce、echostr。你的服务端要校验签名、解密 echostr、在 1 秒内返回明文。如果返回 403 或空串后台会提示验证失败。4.2 本地先自测回调在服务器上直接打本地端口确认服务活着curl -v http://127.0.0.1:18790/wecom/agent再通过公网域名打一次确认 Nginx 转发正常curl -v https://api.example.com/wecom/agent如果本地通、公网不通问题在 Nginx 或防火墙如果两个都不通问题在 OpenClaw 服务本身。4.3 获取回调 IP 段并加白名单企业微信回调来源 IP 是固定的建议拉一次列表加到防火墙白名单# 先拿 access_token curl https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid你的corpidcorpsecret你的secret # 用返回的 token 拉 IP 段 curl https://qyapi.weixin.qq.com/cgi-bin/getcallbackip?access_token上一步的token返回的ip_list就是企业微信回调服务器 IP加到 iptables 或安全组白名单避免合法回调被拦。4.4 消息收发验证URL 验证通过后在企业微信里给这个自建应用发一条消息。观察服务端日志journalctl -u openclaw-agent -f正常流程是收到 POST → 校验签名 → 解密 XML → 解析消息类型 → 调 TaoToken 的模型 → 构造被动回复 → 加密返回。如果用户端收到回复说明整条链路通了。如果企业微信提示「该应用暂时无法使用」多半是 POST 返回空串或超时企业微信会重试最多 3 次。5. 本篇常见错排查URL 验证失败返回 403 或空串。最常见是 Token 或 EncodingAESKey 填错或者签名校验逻辑用了错误的参数顺序。企业微信的签名是sha1(sort(token, timestamp, nonce, echostr))四个值排序后拼接再哈希顺序错了必失败。另外确认服务端返回的是解密后的明文不是加密串。GET 验证通过POST 收不到消息。检查 Nginx 的location是否只配了 GET 没放行 POST或者proxy_read_timeout太短导致 5 秒内没返回。还有一种情况是防火墙只放行了 443但企业微信回调走的是你配置的端口确认端口一致。端口冲突agent 起不来。Lighthouse 虽然并行能力强但同一端口不能两个进程监听。用ss -tulpn | grep LISTEN确认 18790 没被占。如果已有 bot 用了这个端口换一个或者复用 bot 进程加路径分流。TaoToken 请求 401。检查 config.toml 里api_key是否正确从环境变量读到systemd 的Environment有没有写错。可以用systemctl show openclaw-agent | grep Environment确认注入成功。另外确认base_url是https://taotoken.net/api不要多加斜杠或路径。消息发出去了但没回复。看日志里模型调用是否超时。TaoToken 的timeout_seconds设 60 秒但企业微信 POST 只等 5 秒所以要么模型响应够快要么改成异步先返回空串再用企业微信的主动发消息接口推送结果。被动回复和主动推送是两条路别混。回调 IP 白名单没配导致间歇性失败。企业微信回调 IP 会变建议定期拉getcallbackip更新白名单或者干脆不限制来源 IP靠签名校验保证安全。6. 长期跑 Agent 的 Key 管理与下一步如果你只是偶尔测一下上面这套配置够用。但如果这个自建应用要长期跑、还要接多个 Agent 或 coding 场景Key 的管理方式就得换一换。TaoToken 的 Coding Plan 适合把编码类、Agent 类的长期调用单独规划额度避免和临时测试混在一起https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite接入过程中如果卡在签名校验或 config 字段直接翻接入文档比到处搜快https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite最后留一个实操建议把 config.toml 里的所有敏感值都走环境变量systemd service 文件权限设成600journalctl里别打印 Key。企业微信回调的日志单独打到一个文件方便出问题时对照时间戳排查。这套跑通之后再加第二个、第三个自建应用只是复制一份 config 改端口和路径的事。