Kalau pakai **whatsapp-web.js**, masalah ban biasanya bukan cuma karena β€œkebanyakan kirim”, tapi karena pola kirim **tidak natural** (terlalu cepat, terlalu konsisten, atau blast ke banyak nomor baru). Jadi rate limiter harus dibuat **mirip perilaku manusia**, bukan sekadar delay statis. Saya kasih setup yang realistis dan aman πŸ‘‡ --- # 🎯 Prinsip anti-ban (WA) 1. ❌ Jangan kirim burst (100 pesan langsung) 2. ❌ Jangan interval konstan (misal selalu 1 detik) 3. ❌ Jangan blast ke nomor yang belum pernah chat 4. βœ… Gunakan delay random 5. βœ… Gunakan queue (antrian) 6. βœ… Batasi per nomor & global --- # πŸš€ 1. Gunakan Queue + Rate Limiter Rekomendasi: pakai **BullMQ + Redis** Install: ```bash npm install bullmq ioredis ``` --- # 🧠 2. Contoh Queue + Rate Limit (AMAN) ```js const { Queue, Worker } = require('bullmq'); const IORedis = require('ioredis'); const connection = new IORedis(); const queue = new Queue('wa-send', { connection }); // PRODUCER (enqueue) async function sendMessage(number, message) { await queue.add('send', { number, message }, { removeOnComplete: true, removeOnFail: true }); } ``` --- ## Worker dengan rate limiter ```js const worker = new Worker('wa-send', async job => { const { number, message } = job.data; await client.sendMessage(number, message); // delay random (anti detection) const delay = Math.floor(Math.random() * 5000) + 3000; await new Promise(r => setTimeout(r, delay)); }, { connection, limiter: { max: 10, // max 10 pesan duration: 60000 // per 60 detik } }); ``` --- # πŸ”₯ 3. Rate limit realistis (WA aman) ## Untuk 1 akun: * 5–15 pesan / menit βœ… aman * 20–30 / menit ⚠️ hati-hati * > 50 / menit ❌ rawan ban πŸ‘‰ Rekomendasi: ```js max: 10, duration: 60000 ``` --- # 🧠 4. Random delay (WA suka ini) Tambahkan variasi: ```js function randomDelay() { return Math.floor(Math.random() * 7000) + 2000; // 2–9 detik } ``` --- # 🧩 5. Rate limit per nomor (PENTING) Jangan spam ke satu nomor: ```js const lastSent = new Map(); async function safeSend(number, message) { const now = Date.now(); const last = lastSent.get(number) || 0; if (now - last < 60000) { console.log('Skip spam ke nomor ini'); return; } lastSent.set(number, now); await sendMessage(number, message); } ``` --- # 🧠 6. Warm-up akun (sering dilupakan) Kalau akun baru: Hari 1–3: * max 20–30 pesan/hari Hari 4–7: * naik ke 50–100 Setelah itu baru scale. --- # ⚠️ 7. Hindari ini (penyebab BAN) ❌ Kirim ke nomor random tanpa interaksi ❌ Broadcast template sama persis ❌ Kirim terlalu cepat (burst) ❌ Banyak session dalam 1 IP ❌ Tidak ada reply masuk (one-way spam) --- # πŸ”₯ 8. Tambahkan human behavior ### Typing simulation: ```js await client.sendPresenceAvailable(); await client.sendPresenceTyping(number); await new Promise(r => setTimeout(r, 2000)); ``` --- ### Randomisasi pesan: ```js const messages = [ "Halo kak 😊", "Hai, ada info menarik nih", "Halo, mau tanya sebentar" ]; const msg = messages[Math.floor(Math.random() * messages.length)]; ``` --- # 🧠 9. Advanced (kalau scale besar) Gunakan: * Redis queue (BullMQ) βœ… * multi worker (cluster) * per-account rate limiter --- # 🎯 Setup ideal kamu (server 10 core) * 1 worker per core β†’ 8–10 worker * tiap worker limit: * 5 msg / menit * total: * ~50 msg / menit (aman) --- # πŸ“Š Rule simple anti ban πŸ‘‰ Rumus aman: ```text delay minimal: 2–10 detik max: 10 pesan / menit / akun ```