Webhook 即将推出
审批与部署事件在发生的那一刻送达你的端点。带签名、有重试、保证有序。本页记录的是既定设计,而非已上线的功能。
现阶段的替代方案
审计日志本就记录每一次状态变更,并支持按操作者、操作与时间范围查询。定时轮询它能拿到同样的信息,只是延迟更高,你这边也要多写几行代码。
对大多数工作流——每晚的合规同步、仪表盘刷新——这确实已经够用。只有当你需要在几秒内做出反应时,Webhook 才真正重要。
既定事件——共 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,说明后者是迟到的重试,丢弃即可。
连续失败两天的端点会被停用,并邮件通知工作区管理员。单次尝试超时为 10 秒。