OpenClaw 实战 · Google Chat · 多平台通知

2026 OpenClaw MeshMac 实战:对接 Google Chat 空间 Webhook 广播多节点构建状态的最小可复现步骤

2026.04.08 Meshmac 7 分钟阅读

Google Workspace 团队常希望一个 Chat 空间汇总 MeshMac 多节点 CI 结果。本文给最小可复现路径:网关安装与令牌空间入站 WebhookJSON 文本载荷多节点字段聚合鉴权与有界重试多平台通知心智模型相同——换 HTTPS 目标与 JSON 形态即可;可对照 Teams 入站 Webhook 文Matrix Webhook 文并行落地。

网关安装与令牌

采用与多节点队列实践一致的网关优先拓扑:一台稳定入口机(堡垒、小型 Linux VM 或指定 Mac)运行 OpenClaw,唯一持有出站 Webhook URL;各远程 Mac Runner 只把事件推到内网队列或回调网关,避免每台机器一份 Chat 秘密。

安装后设置 OPENCLAW_CONFIG_ROOT,按官方流程完成 onboarding 与健康检查。将 Webhook 完整 URL 写入仅通知账户可读的文件(示例路径 /etc/openclaw/secrets.d/google-chat/build-status.url),目录 0750、文件 0440禁止进入 Git、CI 明文变量或应用日志。

检查点 A — 权限与落盘(将下方占位 URL 换成 Chat 控制台生成的真实地址):

sudo install -d -m 0750 -o root -g openclaw-notify /etc/openclaw/secrets.d/google-chat
sudo sh -c 'umask 077; cat > /etc/openclaw/secrets.d/google-chat/build-status.url' <<'EOF'
https://chat.googleapis.com/v1/spaces/SPACE/messages?key=KEY&token=TOKEN
EOF
sudo chown root:openclaw-notify /etc/openclaw/secrets.d/google-chat/build-status.url
sudo chmod 0440 /etc/openclaw/secrets.d/google-chat/build-status.url

Google Chat incoming webhook 配置

在目标 Google Chat 空间中添加入站 Webhook(名称建议含仓库或池 ID),复制生成的 HTTPS URL。URL 中的 keytoken 查询参数在效果上等同于 bearer 凭据:泄露后应撤销并重建,无法像 OAuth 那样细粒度降级。

建议 dev/staging/prod 分空间,避免预发流水线把「绿」刷进高管可见的生产空间。若企业策略限制自定义 Webhook,可改用已审批的 Chat 应用或 Apps Script 入口,仍保持单一网关发送

检查点 B — 出站可达(与守护进程相同的 HTTPS_PROXY 环境):

export HTTPS_PROXY="${HTTPS_PROXY:-}"
curl -sS -o /dev/null -w "%{http_code}\n" -I "https://chat.googleapis.com/"

期望得到 Google 侧响应(根路径常为 404)但不应出现 TLS 握手失败或代理 403。先修网络策略再调应用 JSON。

消息载荷模板

最小可靠载荷为带 text 键的 UTF-8 JSON;卡片与按钮可在文本通路验证后再加。

export CHAT_URL="$(sudo cat /etc/openclaw/secrets.d/google-chat/build-status.url)"
curl -sS -X POST "$CHAT_URL" \
  -H 'Content-Type: application/json; charset=UTF-8' \
  -d '{"text":"MeshMac 网关探针 OK · '"$(hostname -s)"'"}'

检查点 C — 空间内可见:数秒内应出现探针行;若返回 JSON 错误体,格式化后修正再自动化。生产消息建议一行内包含 state 标签、mesh_node_id、短 commit,详细日志用 run_url 链出,避免超长正文。

多节点状态聚合示例

假设三台 MeshMac 构建机在分钟内先后结束任务:各 Runner 将规范化记录写入 Redis、NATS 或 OpenClaw 任务面,仅网关消费者映射为内部键再渲染 text

内部键 示例值 在 Chat 行中的用途
workflowios-release前缀或第一段标题
statesucceeded / failed团队约定的 emoji 或标签
mesh_node_idmm-pool-2标明哪台远程 Mac 执行
provider_run_id18451203state 组合做幂等键

渲染示例(单次 POST 一行):

✅ ios-release · main · abc1234 · <https://github.com/org/repo/actions/runs/18451203> · node mm-pool-2

若同一 provider_run_idstate 重复上报,网关应在选定窗口内去重,防止抖动重试刷屏;退避策略可与 任务队列与重试对齐。

鉴权与重试 FAQ

问题 建议
Webhook 是 OAuth 吗?否;视为无范围 HTTPS 端点秘密。日志只保留主机与 token 末四位。
哪些状态码应重试?429、瞬时 5xx:指数退避 + 抖动,约 2 分钟内 capped 五次。400401 不重试;404 多表示 Webhook 已删。
如何防重复消息?在 SQLite/Redis/网关本地缓存记录已成功投递的 provider_run_id+state,窗口内跳过第二次 POST。
节点先直连 Chat「临时用」?会放大秘密面与出口策略;收敛到单网关进程,轮换与审计才可控。
验收清单:① 探针消息可见;② 换第二台构建节点上报,时间线仍在单空间、单模板;③ 故意触发 429 时退避生效且不无限重试。

下一步(套餐、节点与帮助)

把 Google Chat 通知收敛到单网关后,多节点池只需维护一条出站策略一份 Webhook 凭据。选型多机 CI 与 Mesh 时,可直接打开免登录的 购买与套餐页比对节点规格,用 首页了解租用说明,在 帮助中心查阅 SSH/VNC 与协作;更多 OpenClaw 实践见 专栏博客列表

多节点 · Google Chat · 免登录

用统一网关覆盖整个构建池与 Chat 空间

套餐与节点规格可在购买页直接对比;帮助中心免账号可读;博客与 OpenClaw 专栏补齐 Webhook、密钥与队列。

套餐 / 节点