웹훅

무언가 바뀌는 그 순간에 압니다.

승인과 배포에서 일어난 일이 그 즉시 여러분 엔드포인트로 갑니다. 서명되고, 재시도되고, 순서가 지켜집니다 — 이벤트 7종, 지금 동작합니다.

전송은 이미 돌아가고 있습니다. 엔드포인트를 등록하고 이벤트 7종 중에서 고르면, untactit이 타임스탬프와 본문을 묶어 HMAC-SHA256으로 서명합니다. 최소 1회 전송을 보장하고, 실패하면 24시간까지 간격을 늘려가며 재시도하며, 48시간 연속 실패하면 자동으로 끕니다. 엔드포인트는 https만 받고, 사설·루프백 주소는 등록할 때와 보낼 때 두 번 걸러냅니다.

밀거나, 당기거나

맞는 쪽으로 고르시면 됩니다.

초 단위로 반응해야 한다면 웹훅이 맞습니다 — 배포를 회수하거나, 담당자를 호출하거나, 어긋남이 보이는 순간 티켓을 여는 일 같은 것.

야간 컴플라이언스 동기화나 대시보드 갱신 정도면 감사 로그를 주기적으로 긁어오는 것으로 충분합니다. 행위자·액션·기간으로 조회되고, 웹훅과 같이 써도 손해 볼 게 없습니다.

감사 로그 및 내보내기

이벤트 7종

asset.proposed
editor가 승인을 요청함
asset.approved
approver가 수락해 자산이 반영됨
asset.rejected
메모와 함께 반려됨
deployment.completed
모든 대상에서 확인 완료
deployment.failed
하나 이상의 대상이 거부함
drift.detected
로컬 사본이 승인본과 달라짐
member.role_changed
admin이 역할을 부여하거나 회수함

확정된 설계

서명되어 있고, 다시 받아도 안전합니다.

모든 요청에는 X-Untactit-Signature 헤더가 포함됩니다. 값은 원문 바디의 HMAC-SHA256이며, 타임스탬프가 함께 붙습니다. 둘 다 검증하세요. 서명은 발신자가 우리임을 증명하고, 타임스탬프는 오래된 요청의 리플레이를 차단합니다.

  • ✓5분을 넘긴 타임스탬프는 거부
  • ✓서명은 상수 시간으로 비교합니다. 사용 금지: ==
  • ✓워크스페이스당 엔드포인트 최대 5개
verify.py
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)

전달 보장

At-least-once 전달

2xx를 반환할 때까지 재시도하므로, 같은 이벤트가 두 번 도착할 수 있습니다. 중복 제거 기준은 id입니다. 재시도는 지수 백오프로 최대 24시간까지 이어집니다.

워크스페이스별 순서 보장

A sequence 필드는 단조 증가합니다. 48215 다음에 48213이 도착했다면 늦게 온 재시도이므로 버려도 됩니다.

48시간 후 비활성화

이틀 동안 계속 실패하는 엔드포인트는 비활성화되고, 워크스페이스 admin에게 메일이 발송됩니다. 시도당 타임아웃은 10초입니다.

에이전트가 무엇을 실행 중인지, 더는 추측하지 않습니다.

워크스페이스 하나만 연결하면 팀이 실제로 쓰는 스킬·규칙·메모리 전부가 보입니다. 약 10분이면 됩니다.

무료로 시작→ 문의하기

신용카드 없이 시작합니다. 지금 쓰는 툴 그대로 동작합니다.