mbahsomo-note/catatan-wa.md

209 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
```