Chuyển đến nội dung chính
Webhooks đẩy sự kiện đến server của bạn nên bạn không phải kiểm tra định kỳ. Đây là cách đáng tin cậy để biết kết quả của các bài đăng đã lên lịch và các lần tải lên bất đồng bộ (video).

Đăng ký

curl -X POST https://api.madiad.com/v1/webhooks \
  -H "Authorization: Bearer $MADIAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
        "url": "https://example.com/madiad-webhook",
        "events": ["post.published", "post.failed"]
      }'
Response trả về một secret, hãy lưu lại. Bạn sẽ dùng giá trị này để xác minh mỗi lần phân phối.

Sự kiện

Sự kiệnKích hoạt khi
post.publishedBài đăng (ngay lập tức hoặc theo lịch) lên sóng trên nền tảng
post.failedNền tảng từ chối bài đăng
Mỗi lần phân phối là một JSON body mô tả bài đăng, nền tảng và kết quả.

Xác minh chữ ký

Mỗi request đều mang header X-MADIAD-Signature: một HMAC-SHA256 của raw request body, được ký bằng secret đăng ký của bạn. Hãy tính lại và so sánh trước khi tin tưởng payload.
import crypto from "node:crypto";

function verify(rawBody, signature, secret) {
  const expected = crypto
    .createHmac("sha256", secret)
    .update(rawBody)
    .digest("hex");
  return crypto.timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(expected),
  );
}
Xác minh dựa trên body thô, chưa qua parse. Việc serialize lại JSON đã parse sẽ thay đổi bytes và chữ ký sẽ không khớp.

Phản hồi và thử lại

  • Trả về status 2xx nhanh chóng (trong vài giây) để xác nhận đã nhận.
  • Bất kỳ response không phải 2xx hoặc timeout đều được thử lại với exponential backoff.
  • Hãy làm cho handler của bạn idempotent vì một lần phân phối có thể đến nhiều hơn một lần. Khử trùng lặp theo id của sự kiện hoặc bài đăng.
Thực hiện các tác vụ chậm (ghi database, gọi downstream) sau khi bạn đã phản hồi 2xx (ví dụ bằng cách đưa sự kiện vào hàng đợi) để không bao giờ vượt quá timeout phân phối.