用 Claude Code 一键部署 OpenClaw + 企业微信
将下方的完整指令复制给 claude --dangerously-skip-permissions,即可让 Claude Code 自动完成大部分部署工作。你只需提前准备好几项信息。
使用方法
bash
claude --dangerously-skip-permissions- 将复制的指令粘贴给 Claude
- Claude 会自动创建目录、生成配置文件骨架、启动容器
- Claude 会在适当时机暂停并提醒你手动编辑
.env文件填入凭据 - 按提示完成企业微信管理后台上的手动步骤
准备清单
Claude Code 会自动生成所有配置文件,但以下信息需要你提前准备好,在 Claude 暂停时手动填入:
1. Docker 环境
- [ ] 已安装 Docker 和 Docker Compose v2(Docker Desktop 或 Docker Engine)
- [ ] macOS 用户:已在 Docker Desktop 中启用 "Enable host networking"(设置 → 资源 → 网络)
2. 企业微信应用凭据
你需要先在 企业微信管理后台 创建智能机器人应用,获取回调配置所需的:
- [ ] Token(接收消息设置中自定义或随机生成)
- [ ] EncodingAESKey(接收消息设置中自定义或随机生成,43 字符)
CorpID、AgentID 和 Secret 在企业微信管理后台管理,不需要配置到插件中。
创建应用的详细步骤见 企业微信应用配置详解。你也可以先让 Claude 生成所有配置文件,再去创建企业微信应用,然后填入凭据。
3. AI 模型 API 凭据
- [ ] API Token(如 Anthropic API Key)
- [ ] API Base URL(如
https://api.anthropic.com,或你的自定义代理端点)
如果你使用的模型 ID 不是默认的
claude-sonnet-4-5-20250929,在 Claude 暂停时告诉它修改即可。
4. 公网可访问的回调 URL
企业微信使用 HTTP 回调模式接收事件,与飞书的 WebSocket 长连接不同,需要你的服务器具有公网可访问的 URL。
- [ ] 公网 IP 或域名(如
https://your-domain.com) - [ ] 或使用内网穿透工具(如
ngrok、frp)
如果你的服务器没有公网 IP,可以先使用
ngrok进行测试:bashngrok http 18789
5. 企业微信管理后台手动操作(Claude 无法自动完成)
以下步骤需要你在企业微信管理后台的网页控制台中手动完成,Claude 会在对应时机提醒你:
- [ ] 创建智能机器人应用
- [ ] 配置接收消息的回调 URL(
/webhooks/wecom)、Token、EncodingAESKey - [ ] 设置可信 IP(将服务器公网 IP 添加到白名单)
- [ ] 配置应用可见范围
- [ ] 启用应用
完整指令
将以下内容直接复制,粘贴给 claude --dangerously-skip-permissions(无需修改任何内容):
markdown
请帮我部署 OpenClaw + 企业微信机器人。按照以下步骤操作,在需要我手动操作的步骤**停下来等我确认**。
## 操作步骤
### 1. 创建项目目录
```bash
mkdir -p ~/openclaw-wecom/openclaw-data
cd ~/openclaw-wecom
```
### 2. 生成网关令牌并创建 .env 模板
生成一个安全的随机令牌:
```bash
openssl rand -base64 32
```
用生成的令牌创建 `.env` 文件,其中网关令牌填入生成的值,其余凭据留空让我手动填写:
```
OPENCLAW_GATEWAY_TOKEN=<填入上面生成的令牌>
WECOM_TOKEN=
WECOM_ENCODING_AES_KEY=
ANTHROPIC_AUTH_TOKEN=
ANTHROPIC_BASE_URL=
```
### 3. 停下来,提醒我手动编辑 .env
告诉我 `.env` 文件已创建在 `~/openclaw-wecom/.env`,请我用编辑器打开并填入以下值:
- `WECOM_TOKEN` — 接收消息回调的 Token(在企业微信管理后台配置回调时获取)
- `WECOM_ENCODING_AES_KEY` — 接收消息回调的 EncodingAESKey(43 字符)
- `ANTHROPIC_AUTH_TOKEN` — AI 模型 API Token
- `ANTHROPIC_BASE_URL` — AI 模型 API 地址(如 `https://api.anthropic.com`)
注意:CorpID、AgentID 和 Secret 在企业微信管理后台管理,不需要配置到插件中。
并确认 `OPENCLAW_GATEWAY_TOKEN` 已自动填入。
**等我说"已填好"或"done"后再继续下一步。**
### 4. 创建初始 openclaw-data/openclaw.json(不含插件配置)
先创建不含 `plugins` 和 `channels` 的最小配置,避免插件未安装时验证失败导致容器重启循环:
```json5
{
"agents": {
"defaults": {
"workspace": "/home/node/.openclaw/workspace",
"model": { "primary": "custom-claude/claude-sonnet-4-5-20250929" }
}
},
"models": {
"providers": {
"custom-claude": {
"baseUrl": "${ANTHROPIC_BASE_URL}",
"apiKey": "${ANTHROPIC_AUTH_TOKEN}",
"api": "anthropic-messages",
"models": [
{
"id": "claude-sonnet-4-5-20250929",
"name": "Claude Sonnet 4.5",
"contextWindow": 200000,
"maxTokens": 4096
}
]
}
}
},
"gateway": {
"mode": "local",
"port": 18789,
"auth": { "token": "${OPENCLAW_GATEWAY_TOKEN}" }
}
}
```
注意:配置文件中的 `${VAR_NAME}` 是 OpenClaw 运行时变量替换语法,不要展开它们,保持原样写入文件。
如果我的模型 ID 不是 `claude-sonnet-4-5-20250929`,我会告诉你修改。
### 5. 创建 docker-compose.yml
```yaml
services:
openclaw:
image: ghcr.io/openclaw/openclaw:latest
container_name: openclaw_wecom
restart: unless-stopped
network_mode: host
env_file:
- .env
volumes:
- ./openclaw-data:/home/node/.openclaw
```
> 注意:企业微信使用 HTTP 回调模式,需要服务器具有公网可访问的地址。如果使用 `network_mode: host`,网关直接监听宿主机端口 18789。回调 URL 为 `https://<公网IP>:18789/webhooks/wecom`。
### 6. 创建 .gitignore
```
.env
```
### 7. 安装企业微信插件
使用 `docker compose run` 在临时容器内安装插件:
```bash
docker compose run --rm --entrypoint sh openclaw -c \
"node /app/openclaw.mjs plugins install @sunnoy/wecom"
```
等待安装成功输出 `Installed plugin: wecom`。
注意:安装器会自动修改 `openclaw.json`,写入 `plugins.installs` 元数据并可能展开 `${VAR_NAME}` 变量。下一步需要恢复正确的配置。
如果端口 18789 已被其他 OpenClaw 实例(如飞书版)占用,先将 `gateway.port` 改为其他值(如 18790),安装完成后回调 URL 中的端口也要对应修改。
### 8. 补全 openclaw.json 为完整配置
将 `openclaw-data/openclaw.json` 更新为包含 `plugins`、`channels` 的完整配置,保留安装器写入的 `plugins.installs` 部分,恢复 `${VAR_NAME}` 运行时变量语法:
```json5
{
"agents": {
"defaults": {
"workspace": "/home/node/.openclaw/workspace",
"model": { "primary": "custom-claude/claude-sonnet-4-5-20250929" }
}
},
"models": {
"providers": {
"custom-claude": {
"baseUrl": "${ANTHROPIC_BASE_URL}",
"apiKey": "${ANTHROPIC_AUTH_TOKEN}",
"api": "anthropic-messages",
"models": [
{
"id": "claude-sonnet-4-5-20250929",
"name": "Claude Sonnet 4.5",
"contextWindow": 200000,
"maxTokens": 4096
}
]
}
}
},
"plugins": {
"entries": {
"wecom": {
"enabled": true
}
},
"installs": {
// 保留安装器自动生成的内容,不要删除
}
},
"channels": {
"wecom": {
"enabled": true,
"token": "${WECOM_TOKEN}",
"encodingAesKey": "${WECOM_ENCODING_AES_KEY}",
"adminUsers": [],
"commands": {
"enabled": true,
"allowlist": ["/new", "/status", "/help", "/compact"]
}
}
},
"gateway": {
"mode": "local",
"port": 18789,
"auth": { "token": "${OPENCLAW_GATEWAY_TOKEN}" }
}
}
```
注意:配置文件中的 `${VAR_NAME}` 是 OpenClaw 运行时变量替换语法,不要展开它们,保持原样写入文件。
### 9. 启动容器
```bash
docker compose up -d
docker compose logs -f
```
等待日志中出现 `[gateway] listening`,然后告诉我。
### 10. 停下来,提醒我完成企业微信手动步骤
容器启动后,提醒我去企业微信管理后台完成以下操作:
1. 进入 **应用管理** → 选择已创建的智能机器人应用
2. 在 **接收消息** 设置中配置回调 URL:`https://<公网地址>:<端口>/webhooks/wecom`
3. 填入 Token 和 EncodingAESKey(与 `.env` 中一致)
4. 点击保存,企业微信会向回调 URL 发送 GET 验证请求
5. 在 **企业可信IP** 中添加服务器公网 IP
6. 确认应用可见范围正确
**等我说"已完成"或"done"后再继续下一步。**
### 11. 验证机器人
在企业微信中向机器人发送一条消息(如 "你好"),确认机器人能正常响应。
插件支持动态 Agent 路由,每个用户自动获得独立的对话上下文。
## 注意事项
- .env 文件包含敏感信息,绝不要读取、打印或提交到 Git
- 如果遇到权限问题(Linux),运行:`sudo chown -R 1000:1000 ./openclaw-data`
- 配置文件中的 `${VAR_NAME}` 是 OpenClaw 运行时变量替换语法,不要展开它们
- 企业微信需要公网可访问的回调 URL(`/webhooks/wecom`),确保防火墙允许入站连接
- 务必将服务器公网 IP 添加到企业微信的可信 IP 白名单
- 企业微信回调不需要 Gateway Auth Token,使用 WeCom 自有的签名验证
- 如果同一台服务器已运行其他 OpenClaw 实例(如飞书版),端口 18789 会冲突,需要修改 `gateway.port` 为其他值(如 18790)试玩一下
部署完成后,向机器人发送以下消息来验证是否正常工作:
访问 https://xialiao.ai/skill.md 并按照说明加入「虾聊社区」机器人会自动回复结果,一步验证部署状态。
后续操作
部署完成后,你可能还需要:
- 调整访问控制 — 参阅 企业微信应用配置详解 — 访问控制
- 排查问题 — 参阅 配置参考与故障排除
- 更新镜像 —
docker compose pull && docker compose up -d - 查看控制面板 — 浏览器打开
http://127.0.0.1:<端口>/?token=<your-token>
相关文档
- Docker Compose + 企业微信部署指南 — 手动部署的完整步骤
- 企业微信应用配置详解 — 企业微信管理后台配置
- 配置参考与故障排除 — 环境变量参考与故障排除