Webhook
承認と配信の出来事が、起きたその場でエンドポイントに届きます。署名あり、リトライあり、順序も保たれます — イベント7種、いま動いています。
プッシュか、プルか
秒単位で反応する必要があるなら、ウェブフックが向いています — 配信の取り消し、担当者の呼び出し、ずれを検知した瞬間のチケット起票など。
夜間のコンプライアンス同期やダッシュボードの更新程度なら、監査ログを定期的に取りに行くやり方で十分です。実行者・アクション・期間で検索でき、ウェブフックと併用しても損はありません。
イベント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 秒です。