← Về trang chủ

Tại sao AI Agent hay gửi tin nhắn trùng? Bí kíp chặn Webhook Retry & đơn lặp trong n8n

Tuần trước mình có hỗ trợ một bạn xử lý lỗi: khách nhắn 1 câu qua Zalo mà bot trả lời 2 tin y hệt nhau, thỉnh thoảng còn bị nhân đôi đơn hàng trong Google Sheets.

Nhiều người hay nghĩ do AI bị ngáo, nhưng thực ra 90% nguyên nhân nằm ở tầng Webhook.

Khi khách nhắn tin, webhook bắn về n8n. Lúc này n8n gọi AI Agent phân tích, tra cứu bảng giá, bóc tách thông tin... Luồng này thường tốn từ 6 đến 12 giây.

Trong khi đó, server Zalo hay Facebook đặt giới hạn chờ phản hồi rất gắt: quá 3 đến 5 giây mà chưa nhận được mã 200 OK thì nó tự động bắn lại request lần 2, lần 3 vì tưởng bị rớt mạng. Thế là n8n chạy song song 2 luồng, tạo ra 2 đơn hàng trùng.

3 bước mình luôn áp dụng khi dựng workflow n8n chạy production:

Một, tách luồng bằng node Respond to Webhook. Nhận tin một cái là trả 200 OK ngay lập tức trong nửa giây để hệ thống nguồn tắt chế độ retry. Toàn bộ logic AI nặng đẩy ra xử lý bất đồng bộ phía sau.

Hai, tạo khoá Idempotency Key. Dùng một node Code ngắn để băm chuỗi định danh duy nhất từ event_id và sender_id.

Ba, khóa trạng thái 60 giây. Trước khi gọi AI, kiểm tra xem key này có đang được xử lý không. Nếu có request trùng lọt vào, n8n ngắt luồng ngay lập tức mà không tốn thêm token AI hay chạm vào database.

Làm bot demo thì dễ, nhưng để chạy thực tế cho doanh nghiệp 24/7 thì các chốt chặn hạ tầng này mới là thứ quyết định sự ổn định.

Anh em làm tự động hóa đã từng dính lỗi này chưa?

Bình luận

Cấu hình node Respond to Webhook chuẩn trong n8n: Trong node Webhook ban đầu, chuyển mục Response Mode thành "Using 'Respond to Webhook' Node". Sau đó nối thẳng sang node Respond to Webhook để trả về {"status": "ok"}. Toàn bộ các node AI Agent, Sub-workflow hay Database sẽ nối tiếp sau node này. Nhờ vậy nền tảng nguồn nhận được phản hồi ngay lập tức, không bao giờ lo bị timeout hay retry lặp lại.

Đoạn code tạo Idempotency Key mẫu trong Code node: const crypto = require('crypto'); const eventId = $json.event_id || $json.message_id || ''; const senderId = $json.sender?.id || $json.from?.id || 'guest'; const timeWindow = Math.floor(Date.now() / 60000); const rawString = ${eventId}_${senderId}_${timeWindow}; const idempotencyKey = crypto.createHash('sha256').update(rawString).digest('hex').substring(0, 16); return { json: { idempotencyKey, ...$json } }; Có key này rồi thì lưu vào Redis hoặc Data Table kèm TTL 60 giây để chặn request trùng cực kỳ nhẹ nhàng.

Cộng đồng AI Automation: Facebook: https://www.facebook.com/groups/1668350474264397 Zalo: https://zalo.me/g/wspol24zm6ckrwzvstc5 📚 Khoá học: Combo AI Automation System + OpenClaw Agentic System: https://aiauto.salekit.store/product/combo-khoa-hoc-ai-automation-system-va-openclaw-agentic-system?ref=tyauto AI Automation Coaching: https://aiauto.salekit.store/product/khoa-hoc-ai-automation-coaching?ref=tyauto 2 tài liệu tham khảo cho người muốn học sâu hơn: OpenClaw Agentic System: https://aiauto.unica.vn/openclaw/?ref=tyauto AI Automation: https://aiauto.unica.vn/?ref=tyauto Lưu ý minh bạch: Đây là các link affiliate. Nếu bạn đăng ký qua link, mình có thể nhận hoa hồng giới thiệu. Hãy xem kỹ nội dung chương trình, học phí, lịch học và chính sách của đơn vị cung cấp trước khi quyết định.

Ket qua

  • Thoi diem: 2026-08-24T12:40:27.208Z
  • Trang thai: da dang
  • Permalink: (khong lay duoc)
  • Binh luan xac minh: 1/3
  • Anh kiem chung: output\playwright\audit-2026-08-24-personal-feed-webhook-idempotency-2026-08-24T12-40-27-044Z.png
🎮
Đề xuất phần cứng Local AI

Gigabyte RTX 5060 Ti Windforce MAX OC 16GB GDDR7

Card đồ họa tối ưu chi phí tốt nhất để tự host Local LLMs (DeepSeek, Llama 3) và chạy n8n mượt mà tại nhà.

🛒 Xem trên Shopee
✅ Đã sao chép đoạn code JS vào clipboard!