Skip to main content
Khi hồ sơ chuyển sang trạng thái quan trọng, hệ thống gửi POST tới URL webhook của bạn. Webhook có chữ ký HMAC, cơ chế retry và khoá idempotency.
Partner không tự đăng ký webhook qua API. Gửi đội ngũ econtractid URL endpoint HTTPS + danh sách event; quản trị viên tạo subscription và cấp HMAC secret (chỉ hiện 1 lần). Đổi URL hoặc event sau này cũng qua quản trị viên.

Luồng gửi


Headers

Mọi payload dùng chung envelope:
Webhook payload không có envelope {statusCode, data, timestamp} như response REST — gửi raw object.

Event và payload

Danh mục event

Mỗi event gửi khi nào, không gửi khi nào, thứ tự trong một quy trình.

Payload tham chiếu

Từng trường của data, ví dụ JSON, và block relatedParties.

Payload — webhook.test

Event kiểm thử kết nối, bắn khi quản trị viên bấm Test hoặc khi bạn gọi API ở mục dưới. Dùng để nghiệm thu endpoint: URL, TLS, secret, và bạn có trả 2xx không.

Khác biệt so với event thật

Tự bắn ping qua API

Hệ thống gửi webhook.test tới webhook đã đăng ký của tổ chức bạn — giống hệt khi quản trị viên bấm Test.
Dùng API Key theo tổ chức (đã gắn người dùng). Key toàn cục dành cho partner-login, gọi vào đây sẽ nhận 401.
requestPayload / requestHeaders là đúng những gì đã gửi, dùng để đối chiếu khi chữ ký lệch. httpStatus: 0 = không kết nối được hoặc quá 10 giây.

Request thực tế gửi đi

Body trên dây nén và sắp xếp khoá theo alphabet, khác thứ tự khối JSON minh hoạ ở trên. Luôn HMAC trên raw body nhận được, đừng parse rồi serialize lại.

Tự kiểm thử bằng curl

Không cần chờ quản trị viên bấm Test: tự bắn một request giống hệt vào endpoint của bạn. Copy nguyên khối dưới đây, sửa đúng 2 dòng đầu, dán vào terminal (bash hoặc zsh; macOS và Linux đều chạy).
Đạt khi dòng đầu output là HTTP/1.1 2xx. TARGET_URL là endpoint của chính bạn, không phải endpoint của econtractid.

Chưa dựng xong endpoint?

Receiver local xác thực chữ ký thật — in chu_ky_hop_le=True là HMAC hai bên khớp. Sandbox /api/webhook-test/{tag} chỉ ghi lại request và luôn trả 201.
Sandbox chỉ dùng khi onboard: không xác thực chữ ký, ghi nguyên headers + body ra đĩa máy chủ. Đừng gửi dữ liệu thật, đừng trỏ subscription production vào đó.

Vector kiểm chứng chữ ký

Kiểm tra hàm HMAC của bạn không cần gọi mạng. Body mẫu ở trên, secret whsec_demo_secret → chữ ký bắt buộc phải ra:
Ra khác nghĩa là code của bạn thêm/bớt byte — thường do trailing newline hoặc đã parse rồi serialize lại body.

Cách phản hồi

Vẫn xác thực HMAC như event thật, rồi trả 200 mà không chạy nghiệp vụ.

Đọc kết quả


Uỷ quyền gửi email

Áp dụng cho 4 event có email tương ứng: task_assigned_internal, task_assigned_external, task_rejected, process_finished. notification.task_completed không có email nào của econtractid đi kèm nên không thuộc cơ chế này. Mặc định econtractid gửi email cho tất cả người nhận. Khi bật uỷ quyền, econtractid ngừng gửi email cho người nhận bên ngoài — nhưng chỉ khi thoả cả hai điều kiện:
  1. Event nằm trong danh sách uỷ quyền của tổ chức (quản trị viên cấu hình)
  2. Tổ chức có ít nhất một webhook subscription đang hoạt động lắng nghe event đó
Chỉ người nhận bên ngoài bị ngừng gửi; nhân sự nội bộ vẫn nhận email từ econtractid. Webhook hết retry mà chưa 2xx thì không có email bù — theo dõi nhật ký gửi trên giao diện quản trị.

Xác thực chữ ký


Retry

Nếu hệ thống của bạn trả về mã khác 2xx hoặc timeout (10 giây), hệ thống sẽ gửi lại: Sau lần thứ 6 thất bại, event được đánh dấu EXHAUSTED. Bạn khôi phục bằng cách gọi GET /integration/documents/{documentId}.

Khuyến nghị triển khai