@bottino/baileys
v1.0.14
Published
Whatsapp api by Bottino
Maintainers
Readme
✨ Funzionalità
La libreria ufficiale del progetto Bottino, basata su Baileys con miglioramenti specifici. Offre un'API intuitiva per interagire con WhatsApp Web.
Nota speciale: puoi collegare il bot anche senza scannerizzare il QR, usando un codice di pairing da WhatsApp > Dispositivi collegati.
🚀 Installazione
Installa la libreria con npm:
npm install @bottino/baileysAvvio rapido
import makeWASocket, { DisconnectReason, useMultiFileAuthState } from '@bottino/baileys';
async function startBot() {
// 🔐 Autenticazione multi-file per sessioni persistenti
const { state, saveCreds } = await useMultiFileAuthState('auth_info_baileys');
// 🌐 Creazione del socket
const sock = makeWASocket({
auth: state,
printQRInTerminal: true,
logger: console,
browser: ['YourBotName', 'Chrome', '4.0.0'],
});
// 🔄 Sistema di riconnessione automatica
let reconnectAttempts = 0;
const maxRetries = 5;
const retryDelay = 5000;
const retryBackoffMultiplier = 1.5;
const maxRetryDelay = 60000;
sock.ev.on('connection.update', (update) => {
const { connection, lastDisconnect } = update;
if (connection === 'close') {
const shouldReconnect = lastDisconnect?.error?.output?.statusCode !== DisconnectReason.loggedOut;
if (shouldReconnect) {
reconnectAttempts++;
const delay = Math.min(
retryDelay * Math.pow(retryBackoffMultiplier, reconnectAttempts - 1),
maxRetryDelay
);
console.log(`🔄 Tentativo di riconnessione ${reconnectAttempts}/${maxRetries} tra ${delay}ms`);
if (reconnectAttempts <= maxRetries) {
setTimeout(startBot, delay);
} else {
console.log('❌ Numero massimo di tentativi di riconnessione raggiunto');
}
}
} else if (connection === 'open') {
console.log('🟢 Connesso con successo!');
reconnectAttempts = 0;
}
});
sock.ev.on('creds.update', saveCreds);
}
startBot().catch(console.error);🛡️ Anti-Ban integrato
La libreria include un sistema anti-ban attivo di default che protegge il numero:
- Rate limit: massimo 1 messaggio al secondo per chat (
messagesSendRate, default1). - Umanizzazione: ritardo casuale tra
800e2500msprima di ogni invio (humanizeMessages, defaulttrue). - Indicatore di digitazione: invia lo stato "sta scrivendo…" prima di rispondere (
antiBan.typingIndicator, defaulttrue).
const sock = makeWASocket({
auth: state,
printQRInTerminal: true,
logger: console,
markOnlineOnConnect: false,
syncFullHistory: false,
// 🛡️ Anti-ban configurabile
messagesSendRate: 1, // msg/sec (default 1)
humanizeMessages: true, // ritardi umani on/off
antiBan: {
typingIndicator: true, // "sta scrivendo…" prima della risposta
minDelayMs: 800, // ritardo minimo in ms
maxDelayMs: 2500, // ritardo massimo in ms
},
});⚠️ Attenzione: aumentando
messagesSendRateo disattivandohumanizeMessages/typingIndicatoril bot risponde più veloce, ma aumenta il rischio di ban. Disattiva l'anti-ban solo se sei sicuro.
🕐 Anti-Attesa integrato
Evita il messaggio "⏳ in attesa del messaggio" quando WhatsApp non riceve il contenuto di un invio. La libreria salva gli ultimi messaggi inviati e risponde da sola alle richieste di re-invio del server (receipt type: retry) usando la funzione nativa sendMessagesAgain.
Come attivarlo:
const sock = makeWASocket({
auth: state,
printQRInTerminal: true,
logger: console,
// 🕐 Anti-Attesa
enableRecentMessageCache: true, // abilita la cache dei messaggi recenti + retry nativo
getMessage: async (key) => {
// (facoltativo) contenuto del messaggio con key.id se non è in cache.
// Deve restituire il campo message, es.:
// { conversation: "testo" }
// { extendedTextMessage: { text: "testo" } }
return undefined;
},
});Come funziona:
enableRecentMessageCache: true— mantiene in memoria gli ultimi messaggi inviati, così la lib può rispondere da sola alle richieste di re-invio.getMessage(key)— se WhatsApp chiede un messaggio non più in cache, la lib lo richiede qui. Se restituisci il contenuto, il retry funziona comunque.- Quando un messaggio resta nello stato
PENDING, il retry avviene automaticamente senza duplicati (stessomessageId).
Chiamare manualmente sendMessagesAgain:
La funzione è esposta sul socket. Re-invia il messaggio originale con lo stesso messageId (idempotente):
await sock.sendMessagesAgain(
{ remoteJid: jid, fromMe: true, id: messageId }, // key
[messageId], // ids da reinviare
undefined, // retryNode (opzionale)
undefined // receiptNode (opzionale)
);💡 Suggerimento: combina Anti-Attesa con Anti-Ban — i messaggi bloccati vengono re-inviati in automatico rispettando il rate limit.
Collegare il dispositivo
Scansiona il QR oppure usa il codice di pairing da WhatsApp > Dispositivi collegati.
📄 Licenza
MIT © Bottino
