① Teams コネクタと URL の安全
Incoming Webhook(または後継フロー)で URL を一度だけ取得しbearer扱い。Git 禁止、例 /etc/openclaw/secrets.d/teams/build-status.url を 0440 でゲートウェイのみ読取。シークレット最小権限 に合わせます。
- URL 全文はログに出さず、ローテはコネクタ再作成+ファイル差し替え(IM トークンローテ)。
- 環境別 URL、MessageCard 等テナント互換 JSON(400 を障害と誤認しない)。
コネクタ禁止テナントは Power Automate 等の狭い入口を一つ、送信元はゲートウェイのみ。
② ゲートウェイ/プロキシの外向きホワイトリスト
ゲートウェイから Webhook 宛て TLS のみ許可(例 outlook.office.com、*.webhook.office.com 等・実測に合わせる)。Runner 直出しは閉じ、デーモンと同じ HTTPS_PROXY で curl -I して CONNECT を確認。フェイルオーバー 時も更新点はゲートウェイ出口だけにします。
③ 多ノード状態の集約フィールド設計
各 CI の JSON をゲートウェイで正規化してからカード化。プロジェクト別設定 でも通知キーは統一します。
| 正規化キー | 例(ソース) | Teams/運用での見せ方 |
|---|---|---|
workflow | GitHub workflow 名/GitLab pipeline 名 | タイトル行で自動化を識別 |
state | conclusion/status/result | 成功・失敗・キャンセル等にマップ |
branch | ref/head_branch | リリース線の可視化 |
commit | sha 短縮+URL | 差分追跡用リンク |
run_url | html_url/web_url | ログ・成果物へ深いリンク |
mesh_node_id | runner 名・ホストラベル | プール内のどの Mac かをフッタ表示 |
provider_run_id | run_id/pipeline id | state と組み合わせて冪等キー |
待ち時間は キュー再試行 と同じ指標を載せると有益です。
④ 再試行と冪等性
429/一時 5xx のみ指数バックオフ+ジッター(例・2 分で最大 5 回)、結果はゲートウェイログへ。ビルド再試行と分離する考え方は キュー再試行 と同型。冪等は provider_run_id + state、成功後 72 時間は同一遷移を抑止。400・401 は修正まで再試行しない。404 はコネクタ削除扱いで再発行。
⑤ メッセージが届かない FAQ
| 現象 | 切り分け |
|---|---|
| CI 緑だがチャンネル無音 | ゲートウェイ POST のステータス行、curl 最小 JSON、テナントでレガシーコネクタ無効化の有無 |
| 特定ノードだけ不安定 | 古い秘密で Teams 直叩きしていないか、プロキシ迂回の残り |
| HTTP 200 だが空/エラー表示 | @type・summary/title・本文長。モバイルで切れる添付は縮小 |
| 週末まで動いて月曜だけ失敗 | プロキシ証明書ローテ、DNS、誤った秘密ファイルの自動更新 |
まとめ・次の一手(ログイン不要)
ゲートウェイ一択で Teams URL を守り、出站はそのホストだけ、mesh_node_id と provider_run_id で観測と冪等を揃えるのが 2026 年の最小セットです。続きは OpenClaw 特集 と ブログ一覧 からどうぞ。