웹훅 예정

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

승인·배포 이벤트를 발생 즉시 여러분의 엔드포인트로 전달합니다. 서명되고, 재시도되고, 순서가 보장됩니다. 이 페이지는 확정된 설계를 문서화한 것이며, 아직 출시된 기능이 아닙니다.

아직 만들어지지 않았습니다. 현재 untactit에는 웹훅 전달 기능이 없습니다. 설계를 먼저 공개하는 이유는 도입을 검토하는 팀들이 연동이 어떤 모습일지 묻기 때문이고, 모호한 답보다 확정된 답이 유용하기 때문입니다. 아래 명세는 확정입니다. 이벤트 7종, HMAC 서명, at-least-once 전달. untactit 도입에 이 기능이 필요하다면 말씀해 주세요. 그것이 우선순위를 끌어올리는 방법입니다.

지금 쓸 수 있는 대안

지금 당장 할 수 있는 것.

감사 로그는 이미 모든 상태 변경을 기록하고 있으며, 행위자·작업·시간 범위로 조회할 수 있습니다. 이를 주기적으로 폴링하면 같은 정보를 얻습니다. 지연이 조금 더 있고, 여러분 쪽 코드가 약간 더 필요할 뿐입니다.

야간 컴플라이언스 동기화, 대시보드 갱신 같은 대부분의 워크플로에는 그것으로 충분합니다. 웹훅이 중요해지는 순간은 몇 초 안에 반응해야 할 때입니다.

감사 로그 및 내보내기

확정된 이벤트 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분이면 됩니다.

무료로 시작 문의하기

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