Webhooks
出站 Webhooks 让您在项目中发生事件时接收实时 HTTP POST 通知。
Pro概览
每当项目中发生特定事件时,Webhooks 会向您配置的任何 HTTPS 端点发送 JSON 载荷。每个 Webhook 可以订阅以下一个或多个事件:
| 事件 | 描述 |
|---|---|
post.created | 提交了新的反馈帖子 |
post.updated | 反馈帖子被编辑 |
post.deleted | 反馈帖子被删除 |
comment.created | 帖子中添加了新评论 |
comment.updated | 评论被编辑 |
comment.deleted | 评论被删除 |
post.status_changed | 帖子状态发生变化(待办、开放、计划中、进行中、已完成) |
message.created | 发送了新的私信 |
message.updated | 私信被编辑 |
message.deleted | 私信被删除 |
beta_feedback.created | Beta 测试者对 Beta 计划提交反馈 |
beta_feedback.deleted | 删除一条 Beta 反馈 |
waitlist_signup.created | 访客加入候补名单 |
waitlist_signup.invited | 候补名单记录被从名单中邀请 |
waitlist_signup.joined | 被邀请的记录接受并加入 |
csat_survey.completed | CSAT 满意度调查以评分完成 |
Webhooks 以单个项目为范围。每个项目都有自己的 Webhook 端点集合,具有独立 的配置和签名密钥。
配置 Webhook
- 转到项目的集成页面
- 滚动到出站 Webhooks部分
- 点击添加 Webhook
- 输入端点 URL(生产环境中必须是 HTTPS)
- 选择要订阅的事件
- 点击保存
保存后,会显示一次签名密钥。请立即复制 — 之后无法再获取。您可以随时 从 Webhook 的操作菜单中重新生成它。
验证 Webhook 签名
每次 Webhook 投递都包含一个 X-SupDesk-Signature 头,其中包含请求体的
HMAC-SHA256 签名。要验证 Webhook:
- 计算
HMAC-SHA256(您的签名密钥, 请求体原始数据) - 将结果与
X-SupDesk-Signature头中的十六进制值进行比较 (在sha256=前缀之后) - 使用恒定时间比较以防止时序攻击
Node.js
import { createHmac, timingSafeEqual } from "crypto";
function verifyWebhook(secret, body, signature) {
const expected = createHmac("sha256", secret)
.update(body)
.digest("hex");
const sig = signature.replace("sha256=", "");
return timingSafeEqual(Buffer.from(expected), Buffer.from(sig));
}Python
import hmac
import hashlib
def verify_webhook(secret: str, body: bytes, signature: str) -> bool:
expected = hmac.new(
secret.encode(), body, hashlib.sha256
).hexdigest()
sig = signature.removeprefix("sha256=")
return hmac.compare_digest(expected, sig)Ruby
require "openssl"
def verify_webhook(secret, body, signature)
expected = OpenSSL::HMAC.hexdigest("SHA256", secret, body)
sig = signature.sub("sha256=", "")
Rack::Utils.secure_compare(expected, sig)
end测试 Webhook
点击 Webhook 旁边的测试按钮,向其端点发送示例载荷。测试载荷包含
"event": "test" 和 data.message 字段。使用 webhook.site
等工具来检查投递的请求。
投递日志
投递日志显示每个 Webhook 最近 50 次投递尝试,包括:
- 事件 — 投递了哪个事件
- 状态 —
success或failed - 响应代码 — 端点返回的 HTTP 状态码
- 尝试次数 — 投递尝试次数(包括重试)
- 时间 — 投递尝试的时间
重试行为
当 Webhook 投递失败时(5xx 响应或网络超时),SupDesk 会以指数退避方式 重试最多 3 次:
| 尝试 | 延迟 |
|---|---|
| 1 | 立即 |
| 2 | 1 秒 |
| 3 | 2 秒 |
客户端错误(4xx)不会重试 — 它们表示端点配置存在永久性问题。
方案要求
出站 Webhooks 在 Pro 和 Team 方案中可用。
ProLast updated on