Add catatan-wa.md
This commit is contained in:
parent
99ad083a02
commit
87f248d05a
|
|
@ -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:
|
||||
|
||||
* 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
|
||||
```
|
||||
Loading…
Reference in New Issue