Add catatan-wa.md

This commit is contained in:
mbahsomo 2026-05-06 16:20:35 +00:00
parent 99ad083a02
commit 87f248d05a
1 changed files with 208 additions and 0 deletions

208
catatan-wa.md Normal file
View File

@ -0,0 +1,208 @@
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:
* 515 pesan / menit ✅ aman
* 2030 / 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; // 29 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 13:
* max 2030 pesan/hari
Hari 47:
* naik ke 50100
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 → 810 worker
* tiap worker limit:
* 5 msg / menit
* total:
* ~50 msg / menit (aman)
---
# 📊 Rule simple anti ban
👉 Rumus aman:
```text
delay minimal: 210 detik
max: 10 pesan / menit / akun
```