Webhook 提供予定
承認・配信のイベントを、発生と同時にお使いのエンドポイントへ届けます。署名付き・再送あり・順序保証。本ページに記載するのは確定済みの設計であり、提供済みの機能ではありません。
現時点での代替手段
監査ログはすでにすべての状態変化を記録しており、実行者・アクション・期間で照会できます。定期的にポーリングすれば同じ情報を得られます。違いはレイテンシーと、受け手側のコードが少し増えることだけです。
夜間のコンプライアンス同期やダッシュボードの更新など、大半のワークフローには、それで本当に十分です。Webhook が意味を持つのは、秒単位で反応する必要があるときです。
確定済みイベント(7 種)
asset.proposedasset.approvedasset.rejecteddeployment.completeddeployment.faileddrift.detectedmember.role_changed確定済みの設計
すべてのリクエストには X-Untactit-Signature (生のリクエストボディの HMAC-SHA256)と、タイムスタンプが付与されます。必ず両方を検証してください。署名は untactit からの送信であることを証明し、タイムスタンプは古いリクエストのリプレイを防ぎます。
==import hmac, hashlib, time
def verify(body: bytes, sig: str, ts: str, secret: str) -> bool:
if abs(time.time() - int(ts)) > 300: # 5 min
return False
expected = hmac.new(
secret.encode(), ts.encode() + b"." + body,
hashlib.sha256
).hexdigest()
return hmac.compare_digest(expected, sig)
2xx が返るまで再送を続けるため、同じイベントが 2 回届くことがあります。重複排除には
idを使ってください。再送は指数バックオフで間隔を広げながら、最大 24 時間続きます。
A sequence フィールドは単調増加します。48215 の後に 48213 を受信した場合、それは遅延した再送であり、破棄して構いません。
2 日間連続で失敗し続けたエンドポイントは無効化され、ワークスペースの管理者へメールで通知されます。1 回の試行あたりのタイムアウトは 10 秒です。