Webhook 即将推出

变化发生的那一刻,你就知道。

审批与部署事件在发生的那一刻送达你的端点。带签名、有重试、保证有序。本页记录的是既定设计,而非已上线的功能。

尚未构建。 untactit 目前没有 Webhook 投递。我们公开这份设计,是因为评估中的团队常问集成会是什么样,一个确定的答案比含糊其辞有用得多。下面的规格已经敲定:七种事件、HMAC 签名、至少一次投递。如果采用 untactit 必须有这项能力,请直说——它就是这样被提上优先级的。

现阶段的替代方案

现在就能做的事。

审计日志本就记录每一次状态变更,并支持按操作者、操作与时间范围查询。定时轮询它能拿到同样的信息,只是延迟更高,你这边也要多写几行代码。

对大多数工作流——每晚的合规同步、仪表盘刷新——这确实已经够用。只有当你需要在几秒内做出反应时,Webhook 才真正重要。

审计日志与导出

既定事件——共 7 种

asset.proposed
编辑者提交审批
asset.approved
审批人通过,资产上线
asset.rejected
已退回并附说明
deployment.completed
所有目标均已确认
deployment.failed
有一个或多个目标拒绝了它
drift.detected
本地副本偏离了已批准版本
member.role_changed
管理员授予或撤销了角色

既定设计

带签名,防重放。

每个请求都会携带 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)

投递保证 即将推出

至少一次投递

我们会持续重试,直到你返回 2xx,因此同一事件可能送达两次。请做好去重,去重键为 id。重试按指数退避,最长持续 24 小时。

按工作区有序

A sequence 字段单调递增。先收到 48215 再收到 48213,说明后者是迟到的重试,丢弃即可。

48 小时后停用

连续失败两天的端点会被停用,并邮件通知工作区管理员。单次尝试超时为 10 秒。

别再猜智能体在跑什么。

接入一个工作区,约十分钟内,团队在用的每个技能、规则与记忆一览无余。

免费开始 联系我们

无需信用卡。直接接入现有工具。