Receive
Nhận webhook và giữ provider context, timestamps cùng identifiers cần thiết để trace delivery.
D2 Automation Knowledge · Event Safety
Hãy assume cùng một logical event có thể đến nhiều lần. Reliable webhook processing bảo vệ business action bằng stable identity, durable state, idempotent writes và replay-safe recovery — không dựa vào hy vọng transport chỉ deliver đúng một lần.
Direct answer
Xác định logical business event, derive stable event/business key, persist durable claim/processed state, làm repeat-sensitive side effects có điều kiện, reconcile ambiguous outcomes trước retry và buộc cả automatic retry lẫn manual replay đi qua cùng duplicate controls.
Idempotency model
Nhận webhook và giữ provider context, timestamps cùng identifiers cần thiết để trace delivery.
Derive logical business-event key đại diện cho transition hoặc side effect cần bảo vệ.
Persist durable claim, unique key hoặc processing state trước khi repeat-sensitive work bắt đầu.
Validate payload structure, supported state và preconditions trước external side effects.
Thực thi downstream writes có điều kiện, dùng provider idempotency key, upsert hoặc uniqueness constraint khi phù hợp.
Lưu confirmed, failed hoặc uncertain outcome với đủ context để biết điều gì chắc chắn đã hoặc chưa xảy ra.
Retry/replay qua cùng identity, validation và duplicate controls thay vì bypass chúng trong recovery.
Xác minh authoritative business outcome, không chỉ workflow execution đã chuyển sang green.
Identity hierarchy
Một HTTP delivery attempt. Hữu ích cho transport tracing nhưng không mặc định đại diện logical business event.
request ID · delivery timestamp · attempt
Durable identity của business transition cần xảy ra một lần về mặt business, như order paid, refund confirmed hoặc lead created.
provider event ID · business key · transition
Durable record chứng minh event đã được claimed, completed hoặc classified để restart và parallel workers không phụ thuộc process memory.
unique key · claimed · completed · uncertain
Business action không được lặp ngoài ý muốn: CRM create, notification, order mutation, financial action, inventory write hoặc external mutation khác.
destination key · upsert · idempotency key
Khi caller không chứng minh được write đã hoàn tất hay chưa, giữ uncertainty explicit và reconcile trước repetition.
timeout · unknown outcome · reconcile
Retries và operator replay phải dùng cùng identity, validation, state checks và side-effect protection như live traffic.
retry · replay · verify
Choosing the key
Tốt nhất khi provider document ID đó stable và unique cho đúng logical event cần bảo vệ.
Phù hợp khi action gắn với một business-state change cụ thể như paid → fulfilled hoặc refund requested → approved.
Dùng destination-side unique key hoặc upsert khi business entity chỉ nên tồn tại một lần dù delivery lặp.
Dùng khi external API hỗ trợ idempotency và key semantics khớp với protected business action.
Fallback khi thiếu stable event ID; derive từ authoritative fields và document collision/ordering assumptions.
Protected side effects
Risk: duplicate contact/lead/opportunity. Control: external/business key + destination upsert hoặc uniqueness constraint.
Risk: repeated customer/operator messages. Control: notification key gắn business event + durable sent state.
Risk: repeated/conflicting state transition. Control: order ID + transition guard + authoritative-state verification.
Risk: duplicate charge/payout/refund request. Control: provider idempotency key + reconciliation before retry.
Risk: duplicate rows/inconsistent projection. Control: unique constraint hoặc upsert + transaction/state-transition guard.
Ambiguous failures
Không suy ra failure. Query destination bằng stable business/idempotency key trước khi issue write lần nữa.
Khi restart, inspect durable side-effect state hoặc authoritative destination state trước downstream repetition.
Dùng durable claim hoặc uniqueness boundary để execution thứ hai thấy in-progress/completed state thay vì race execution đầu.
Replay qua cùng identity/duplicate controls, sau đó verify authoritative business state.
Anti-patterns
Mỗi retry có thể có execution ID mới; workflow uniqueness không đồng nghĩa business-event uniqueness.
Restart, failover hoặc parallel workers có thể quên hoặc bất đồng về event nào đã xử lý.
Webhook execution unique vẫn có thể repeat outbound write sau ambiguous timeout hoặc crash-after-side-effect.
Payload metadata/order có thể thay đổi giữa deliveries dù business transition thực chất giống nhau.
Recovery trở thành alternate path có thể lặp chính irreversible action mà idempotency phải bảo vệ.
Successful workflow run không chứng minh business side effect xảy ra đúng một lần.
Production checklist
Xác định business event và side effect cần bảo vệ trước khi chọn idempotency key.
Kiểm provider event ID đại diện logical event hay chỉ một transport delivery attempt.
Khi duplicate safety phải survive restart/workers, claim hoặc processed state không được chỉ nằm trong memory.
Dùng uniqueness, upsert hoặc provider idempotency controls khi chúng phản ánh đúng business rule.
Repeat-sensitive action phụ thuộc durable state thay vì chỉ workflow execution history.
Giữ in-progress, completed, failed và uncertain states khi concurrent delivery hoặc ambiguous outcome có thể xảy ra.
Không lặp irreversible/external write trước khi biết remote state thật sự.
Automatic retry và manual replay phải dùng cùng validation/idempotency path như live event.
Giữ correlation IDs, attempts và side-effect evidence để giải thích event bị skip, duplicate hay replay vì sao.
Test duplicate delivery, concurrent delivery, crash-after-side-effect và manual replay trước production.
Claim boundaries
Transport attempt ID không mặc định đại diện logical transition cần xảy ra một lần về mặt business.
Idempotency chấp nhận delivery/retry có thể lặp và bảo vệ business effect; nó không biến provider thành exactly-once transport.
Timeout chỉ chứng minh caller không nhận usable response; remote side effect có thể đã hoàn tất.
Database uniqueness bảo vệ một class duplicate nhưng không tự bảo vệ notifications, external writes hoặc multi-step side effects.
Payload có thể khác metadata hoặc ordering trong khi cùng business transition; key phải reflect business semantics.
Claimed/in-progress state không chứng minh downstream action đã hoàn tất; outcome state và acknowledgement vẫn cần riêng.
Replay chỉ safe khi đi qua cùng validation, state checks và duplicate controls, đồng thời reconcile ambiguous effects trước đó.
Workflow success không chứng minh side effect xảy ra một lần và chỉ một lần nếu chưa verify destination/authoritative state.
Có keys, claims và replay controls không tự cam kết uptime, latency, loss rate hoặc zero duplicates nếu chưa có measured production evidence.
Related reading
Thiết kế retry/replay theo failure semantics mà không bypass duplicate protection.
Đọc tiếpXử lý timeout ambiguity, retries, API idempotency và recovery trong cùng production contract.
Đọc tiếpXem durable event identity, state và recovery principles trong event-driven customer operations.
Đọc tiếpQuay lại knowledge hub về API reliability, retries, observability, queue mode và production readiness.
Đọc tiếpFAQ
Là khả năng cùng logical business event được deliver hoặc process nhiều lần nhưng protected side effect không bị lặp ngoài ý muốn. Workflow cần stable event/business key, durable claim/processed state, conditional downstream writes và replay qua cùng duplicate controls.
Vì delivery ID thường chỉ đại diện một transport attempt, trong khi cùng logical business event có thể xuất hiện qua nhiều deliveries/retries. Idempotency key nên đại diện business transition cần xảy ra một lần.
Không nếu cần durable guarantee. Process memory có thể mất khi restart và không được share nhất quán giữa scaled workers. Claim/processed state quan trọng nên nằm trong durable store, uniqueness-enforcing destination hoặc authoritative system.
Derive deterministic business key từ authoritative fields định nghĩa protected transition, rồi document collision, ordering và replay assumptions. Key phải đại diện business action cần chống lặp, không chỉ raw request body.
Không retry ngay. Query destination bằng idempotency/business key hoặc inspect authoritative state để biết side effect đã xảy ra chưa, rồi mới quyết định repeat.
Không. Replay phải đi qua cùng validation, idempotency và side-effect protection như live delivery. Nếu recovery bypass dedupe, nó tạo một alternate path có thể lặp irreversible action.
Chỉ trong một số write semantics. Unique constraint có thể ngăn duplicate row/entity nhưng không bảo vệ external API calls, notifications hoặc multi-step side effects. Cần xem idempotency theo protected business action.
Không mặc định. Provider có thể thay metadata, field order hoặc delivery-specific fields dù cùng logical event. Hash chỉ phù hợp nếu canonicalization và business semantics của payload đã được kiểm soát rõ.
Dùng atomic durable claim, uniqueness boundary hoặc state transition guard để execution thứ hai thấy event đang processing/completed thay vì cùng chạy side effect song song.
Không. Nên tách claimed/in-progress khỏi completed, failed và uncertain. Claim chỉ cho biết event đã được một execution sở hữu; outcome vẫn cần được persist riêng.
Không. Green execution là technical signal. Cần destination acknowledgement hoặc authoritative-state verification để biết protected action đã xảy ra đúng trạng thái mong muốn.
Không. Đây là control design để giảm duplicate-side-effect risk và làm recovery reasoning rõ hơn. Zero duplicate, uptime, latency hoặc delivery-loss claims cần measured production evidence.
Need replay-safe webhook processing?
Tác giả & trách nhiệm
Đội ngũ D2 AI & AutomationAutomation production, API, data pipeline và hệ thống có AI hỗ trợ
D2 tách claim, giả định và evidence. Citation chỉ được gắn khi có nguồn hoặc evidence asset phù hợp; nội dung chưa kiểm chứng không được tự động trình bày như fact đã xác nhận.
Xem phương pháp evidence của D2 →