openclaw onboard 拉齐工作区、openclaw doctor 做运行态自检,再把网关绑在 127.0.0.1 或受控反代后对接 Telegram / Slack。本文只写可照做的检查命令与配置项命名习惯,便于把 CI 结果与告警推进 IM。延伸阅读:网关安全加固、网关健康与 LaunchAgent、Git 与 Docker 拉取加速;入口:首页、帮助中心。
前置检查:版本、端口、本机绑定与反向代理
在远程 Mac上先对齐「谁在用哪个 Node」:node -v 应满足 OpenClaw 文档底线(常见为 22.x+);which openclaw 与交互式 shell、launchd 服务、CI 任务指向同一前缀,避免一条流水线读到另一套全局包。
端口与监听面:用 lsof -iTCP -sTCP:LISTEN -n -P | grep -E 'node|openclaw' 核对网关实际监听地址。默认建议 127.0.0.1:<port>,公网暴露改为 TLS 终止 + mTLS 或零信任隧道,由反代把 /webhook/telegram、/webhook/slack 转到本机。配置项常见命名为 gateway.host、gateway.port、gateway.bind(以你仓库内 openclaw.json 或环境变量为准)。
openclaw doctor
openclaw status 2>/dev/null || true
lsof -iTCP -sTCP:LISTEN -n -P | head -n 30
| 维度 | 自建网关(远程 Mac) | 托管面板类方案 |
|---|---|---|
| 运维 | 你可控 launchd、日志与回滚 | 供应商负责可用性,定制受产品边界限制 |
| 凭证 | Bot Token / Webhook 留在你的密钥面 | 需评估供应商侧存储与审计范围 |
| Webhook | 自建 URL、自管证书与源 IP 策略 | 通常固定入口域名,省证书与穿透 |
Telegram Bot:创建、Token 写入与环境隔离的最小权限
通过官方 Bot 创建流程拿到 Bot Token 后,立刻做三件事:① 不把 Token 写进 Git,改用仅服务用户可读的密钥文件或 launchd EnvironmentVariables(示例名 TELEGRAM_BOT_TOKEN / OPENCLAW_TELEGRAM_BOT_TOKEN,以实际文档为准);② 在网关侧为 setWebhook 配置 secret_token,校验入站头 X-Telegram-Bot-Api-Secret-Token;③ Bot 权限只开「发消息 / 读更新」所需能力,禁用与业务无关的 Admin 类权限。
- 进程用户与登录用户分离;Token 文件
chmod 600。 - CI 使用只读通知 Bot 或独立 Bot,避免与交互式会话共用 Token。
- 配置项:
channels.telegram.botToken、channels.telegram.webhookSecret、可选channels.telegram.allowedUpdates。
curl -sS "https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/getWebhookInfo" | python3 -m json.tool
Slack:Incoming Webhook 与 Slack App 方式对比
| 方式 | 安全 | 审计 | 限流 / 运营 |
|---|---|---|---|
| Incoming Webhook | URL 即机密,泄露等同写权限到单频道 | 粒度粗,多依赖 Workspace 审计导出 | 平台级速率限制;适合纯告警文本 |
| Slack App + Bot | Signing Secret 校验签名 + 时间窗防重放 |
可按 App / 事件类型过滤 | 事件 API 有配额;需处理重试与幂等 |
落地时优先把 SLACK_SIGNING_SECRET、SLACK_BOT_TOKEN 或 SLACK_WEBHOOK_URL 放进与网关同级的密钥注入;OpenClaw 侧常见映射为 channels.slack.signingSecret、channels.slack.botToken、channels.slack.incomingWebhookUrl。
一步步可复现:从 openclaw 到首条测试消息
- 安装 CLI 后执行
openclaw onboard生成/合并工作区与openclaw.json。 openclaw doctor修复 Node、权限与网络探测项。- 写入 Telegram/Slack 环境变量或密钥文件,启动网关(手动或 LaunchAgent),确认
curl -fsS -H "Authorization: Bearer $OPENCLAW_GATEWAY_TOKEN" http://127.0.0.1:<port>/health成功。 - 将公网 HTTPS URL 登记到 Telegram
setWebhook;Slack 侧把事件请求 URL 指向反代后的路径。 - 用 CLI 或内置调试命令发测试消息(若提供
openclaw channels test telegram之类子命令则直接使用;否则用最小脚本调用网关已文档化的 HTTP API)。
curl -fsS -H "Authorization: Bearer $OPENCLAW_GATEWAY_TOKEN" \
"http://127.0.0.1:8443/health"
拉取类依赖若在跨境环境不稳定,可先对照 OpenClaw 拉取加速 与 CI 预拉与版本一致,减少「网关起了但技能装不全」的假阳性。
FAQ:收不到消息、重放防护、令牌轮换与 CI 回调
Telegram 显示 webhook 已设置,但网关无日志?
查反代是否转发 POST 完整 body、证书链、以及 X-Telegram-Bot-Api-Secret-Token 是否与 setWebhook 一致;用 getWebhookInfo 看 last_error_date。另查是否第二台环境抢同一 Bot。
Slack 事件重复投递怎么办?
在 3 秒内返回 200,并在业务层用 event_id 或自建幂等键去重;校验 X-Slack-Signature 与时间戳落在允许漂移窗口内。
CI 直接调网关转发 IM 要注意什么?
回调 URL 带 HMAC/JWT,勿把 IM Token 放进仓库日志;限制来源 IP 或 mTLS;重试使用指数退避并设上限,避免触发 IM 限流导致「全站静默」。
轮换 Bot Token 或 Slack Webhook URL 怎样不掉消息?
在 launchd 或密钥文件中双写新旧值,重启网关后先看出站是否仍 401/403;确认 CI 与本地环境变量已批量更新,再删除旧 Token;构建日志与 shell 历史做一次脱敏检索,避免残留。
总结与选型引导
远程 Mac 上稳定跑网关与流水线
MacPull 提供 Apple Silicon 远程 Mac;帮助中心、定价与购买均可免登录查阅,确认节点与 SSH 策略后再下单。