209 lines
3.5 KiB
Markdown
209 lines
3.5 KiB
Markdown
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
|
||
```
|