웹훅
승인과 배포에서 일어난 일이 그 즉시 여러분 엔드포인트로 갑니다. 서명되고, 재시도되고, 순서가 지켜집니다 — 이벤트 7종, 지금 동작합니다.
밀거나, 당기거나
초 단위로 반응해야 한다면 웹훅이 맞습니다 — 배포를 회수하거나, 담당자를 호출하거나, 어긋남이 보이는 순간 티켓을 여는 일 같은 것.
야간 컴플라이언스 동기화나 대시보드 갱신 정도면 감사 로그를 주기적으로 긁어오는 것으로 충분합니다. 행위자·액션·기간으로 조회되고, 웹훅과 같이 써도 손해 볼 게 없습니다.
이벤트 7종
asset.proposedasset.approvedasset.rejecteddeployment.completeddeployment.faileddrift.detectedmember.role_changed확정된 설계
모든 요청에는 X-Untactit-Signature 헤더가 포함됩니다. 값은 원문 바디의 HMAC-SHA256이며, 타임스탬프가 함께 붙습니다. 둘 다 검증하세요. 서명은 발신자가 우리임을 증명하고, 타임스탬프는 오래된 요청의 리플레이를 차단합니다.
==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를 반환할 때까지 재시도하므로, 같은 이벤트가 두 번 도착할 수 있습니다. 중복 제거 기준은
id입니다. 재시도는 지수 백오프로 최대 24시간까지 이어집니다.
A sequence 필드는 단조 증가합니다. 48215 다음에 48213이 도착했다면 늦게 온 재시도이므로 버려도 됩니다.
이틀 동안 계속 실패하는 엔드포인트는 비활성화되고, 워크스페이스 admin에게 메일이 발송됩니다. 시도당 타임아웃은 10초입니다.