n8n chạy lỗi giữa chừng: retry thế nào để không tạo dữ liệu trùng?
Thiết kế workflow n8n có thể retry an toàn bằng idempotency key, unique constraint, trạng thái xử lý và quy tắc chỉ retry lỗi tạm thời.

Một workflow n8n có thể tạo khách hàng ở CRM thành công, sau đó lỗi khi gửi email hoặc cập nhật bảng tính. Nếu chạy lại toàn bộ execution, bước đầu có thể tạo thêm một khách hàng, một đơn hàng hoặc một giao dịch giống hệt. Cách đúng không phải là tắt retry, mà là làm cho các bước có tác động ra bên ngoài trở nên idempotent: cùng một yêu cầu được xử lý nhiều lần nhưng kết quả nghiệp vụ chỉ phát sinh một lần.
Mẫu triển khai thực tế gồm bốn lớp: tạo một idempotency_key ổn định từ sự kiện gốc; lưu trạng thái xử lý trong kho dữ liệu dùng chung; bảo vệ bằng unique constraint hoặc conditional write; và chỉ retry những lỗi tạm thời với giới hạn rõ ràng. Khi nhận lại cùng khóa, workflow trả kết quả đã có hoặc tiếp tục từ trạng thái an toàn, thay vì tạo bản ghi mới.
Nguyên nhân
Vì sao chạy lại execution dễ tạo dữ liệu trùng?
Workflow đã thất bại không có nghĩa mọi bước trước đó đều được hoàn tác.
n8n điều phối nhiều hệ thống độc lập nên không có một transaction chung bao phủ CRM, email, ERP và bảng tính. Một API có thể đã ghi dữ liệu nhưng response bị timeout; n8n chỉ nhìn thấy lỗi và không biết tác vụ đã hoàn tất hay chưa. Đây là trạng thái kết quả không chắc chắn, nguy hiểm hơn một lỗi rõ ràng trước khi ghi dữ liệu.




