Skip to content

Webhooks & tích hợp ngoài ​

Trạng thái hiện tại ​

Nemo12 không có webhook nào — không nhận vào, không gửi ra.

Rất dễ nhầm hai thứ dưới đây là webhook, nên nói rõ:

ThứLà gìVì sao không phải webhook
POST /v1/auth/googleApp gửi ID token của Google lên để đổi lấy sessionClient chủ động gọi API của ta. Google không gọi ngược vào hệ thống.
nemo12-eventsQueue nội bộKhông rời khỏi Cloudflare account, không có HTTP endpoint (queues)

Nghĩa là hiện không có bề mặt HTTP nào nhận lệnh từ bên thứ ba. Đây là một tài sản an ninh — mất nó phải có lý do xứng đáng.


Tích hợp ngoài đang thật sự có ​

Dịch vụChiềuCách dùng
Google IdentityRa → vào theo requestXác minh ID token khi đăng nhập (GOOGLE_CLIENT_ID trong vars)
Cloudflare AI Gateway nemo12RaMọi lời gọi LLM (ai-registry)
Cloudflare AccessTrước APIBảo vệ surface nội bộ ở tầng hạ tầng, không phải code

Khi nào sẽ cần webhook ​

Tình huốngChiều
Thanh toán / gia hạn góiNhận vào
Email/push (delivery, bounce, unsubscribe)Nhận vào
Trạng thái job crawl đề chạy ngoài (SDD-014)Nhận vào
Bắn sự kiện học tập sang hệ thống của trường đối tácGửi ra

Luật bắt buộc khi thêm webhook ​

Nhận vào ​

  1. Xác thực chữ ký, không xác thực bằng IP. HMAC theo secret trong Cloudflare Secrets — không bao giờ trong vars hay code (QG-008).
  2. Chống replay — kiểm timestamp, từ chối request cũ hơn 5 phút.
  3. Idempotent theo id của bên gửi. Provider nào cũng gửi lại.
  4. Trả 2xx nhanh, xử lý sau. Nhận → validate → đẩy vào queue → trả 200. Không xử lý nặng trong request webhook.
  5. Đường đi riêng /v1/hooks/{provider} — không dùng chung middleware session; đây không phải người dùng đăng nhập.
  6. Payload là dữ liệu, không phải lệnh. Không bao giờ tin trường role, learner_id, amount từ bên ngoài mà không kiểm chứng lại với nguồn sự thật của chính mình.
  7. Ghi audit log mọi lần nhận (QG-008).

Gửi ra ​

  1. Chỉ gửi tới URL đã đăng ký sẵn, không bao giờ gửi tới URL lấy từ dữ liệu người dùng (chống SSRF).
  2. Ký payload để bên nhận xác minh được.
  3. Không gửi dữ liệu trẻ em ra ngoài khi chưa có consent của phụ huynh (REQ-SEC — child data minimization).
  4. Retry có backoff + DLQ, không retry vô hạn.
  5. Khai vào bảng ở trang này trong cùng PR.

Trace ​

  • REQ-SEC-06 (CORS/CSRF), QG-008 (security & privacy), QG-009 (reliability).
  • Thiết kế: SDD-001 §6, SDD-006 §11.