2026 OpenClaw MeshMac 실전: Google Chat 스페이스 Webhook으로 다중 노드 빌드 상태 브로드캐스트
게이트웨이만 Chat 웹훅을 호출하고 text JSON·mesh_node_id·provider_run_id로 멱등합니다. Teams·Matrix는 같은 큐에 URL·카드만 교체합니다. 명령·코드·표는 재현용, 서술은 약 800–1500자 분량으로 압축했습니다.
클러스터 설치·동기화로 게이트웨이를 두고 공유 큐로 이벤트만 보냅니다. Chat·Teams·Matrix POST는 게이트웨이만.
게이트웨이 설치와 토큰
단일 호스트·OPENCLAW_CONFIG_ROOT·doctor로 환경 고정. Chat URL 파일 0440·알림 그룹 전용.
체크포인트 A — 파일 권한
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
URL 치환, 노드 직통 POST 금지.
Google Chat Incoming Webhook 설정
웹훅 URL=베어러, 스페이스는 환경별 분리. HTTPS_PROXY 동일로 chat.googleapis.com TLS 확인. 차단 시 승인 앱·스크립트 우회, 송신은 게이트웨이만.
체크포인트 B — 도달성
export HTTPS_PROXY="${HTTPS_PROXY:-}"
curl -sS -o /dev/null -w "%{http_code}\n" -I "https://chat.googleapis.com/"
404류여도 TLS·프록시 403부터 해결.
메시지 페이로드 템플릿
JSON text로 먼저 검증, 카드는 이후.
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: 수 초 내 프로브 표시. 운영 한 줄에 state·노드·커밋·run_url. Teams=카드·Office 호스트.
다중 노드 상태 집계 예시
빌더→버스→게이트웨이가 text 한 줄로 Chat POST.
| 키 | 예 | 용도 |
|---|---|---|
workflow |
ios-release |
제목 접두 |
state |
succeeded / failed | 이모지·라벨 |
mesh_node_id |
mm-pool-2 |
푸터 Mac 식별 |
provider_run_id |
18451203 |
멱등 키(+state) |
예시 한 줄:
✅ ios-release · main · abc1234 · <https://github.com/org/repo/actions/runs/18451203> · node mm-pool-2
provider_run_id+state 멱등 창(24–72h). 큐 규율은 태스크 큐·재시도.
인증·재시도 FAQ
- URL·재시도·중복
- URL은 HTTPS 비밀(OAuth 아님).
429·5xx만 재시도,400·401수정 후,404=폐기. 중복:provider_run_id+state. - 빌더 직통 POST?
- 금지. 게이트웨이 단일 송신.