Webhook = HTTP callback do server chủ động đẩy tới endpoint của khách khi có event (đảo chiều polling).
Kiến trúc gửi tin cậy:
- Event vào queue (Kafka/SQS), worker đọc và POST tới URL khách → tách phát sinh event khỏi việc gửi (gửi có thể chậm/lỗi).
- Retry với exponential backoff + jitter khi nhận non-2xx hoặc timeout (vd 5s, 30s, 5m...). Quá số lần → đẩy vào dead-letter queue + cảnh báo.
- Đảm bảo at-least-least-once → có thể gửi trùng.
Bảo mật:
- HMAC signature: ký payload bằng secret chung, đặt vào header X-Signature; khách verify để biết tin thật từ bạn và không bị sửa.
- Kèm timestamp trong chữ ký để chống replay; reject nếu lệch > vài phút.
- Khuyến nghị khách verify HTTPS + allowlist IP nếu cần.
Phía nhận — chống trùng:
- Mỗi event có event_id duy nhất; consumer lưu id đã xử lý (idempotency) → bỏ qua bản lặp.
- Trả 2xx nhanh rồi xử lý async; xử lý nặng đồng bộ sẽ gây timeout → kích retry vô ích.
Lưu ý: cung cấp log + replay tool cho khách tự gửi lại event lỗi; phân biệt rõ "đã gửi" và "đã được khách xử lý".