Para un proyecto personal, necesité enviar a todos los contactos un WhatsApp. Como tenia de forma recurrente más números era ya imposible e inviable escribir uno a uno por lo que decidí automatizar el proceso con whatsapp-web.js y basado en Node.js y npm.
Para instalar, el proceso es sencillo y lo he separado en 4 partes: Limpieza , actualización , instalación e instalación
Limpieza
En primer lugar, eliminamos el software y carpetas antiguas:
npm list -g --depth=0
apt-get remove nodejs -y
apt-get remove npm -y
apt autoremove -y
rm -rf /usr/local/{lib/node{,/.npm,_modules},bin,share/man}/{npm*,node*,man1/node*}
rm -r bin/node bin/node-waf include/node lib/node lib/pkgconfig/nodejs.pc share/man/man1/node.1
rm -rf /opt/node_modules/
rm -rf /root/.npm
Actualización
Ahora actualizaremos sistema e instalaremos npm:
apt-get --yes clean
apt update --allow-releaseinfo-change
apt list --upgradable
apt-get --yes update
apt-get --yes upgrade
apt-get --yes dist-upgrade
apt-get --yes full-upgrade --assume-yes
apt-get --yes update
apt install -y npm
apt install -y gconf-service libgbm-dev libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget
Instalación
Para instalar Node.js:
apt-get --yes clean
curl -fsSL https://deb.nodesource.com/setup_19.x | bash - &&\
apt-get install -y nodejs
Para npm, instalaremos unas librerías y forzaremos una actualización:
npm i puppeteer
npm i whatsapp-web.js
npm i qrcode-terminal
npm i -g npm@latest
Llegados a este punto, podremos validar que tenemos ambos productos instalados:
node -v
npm -v
Ahora vamos a crear un pequeño código de ejemplo para el envío masivo llamado fichero.js:
const puppeteerOptions = {
puppeteer: {
args: ["--no-sandbox", "--disable-setuid-sandbox"],
},
};
const qrcode = require("qrcode-terminal");
const {
Client
} = require("whatsapp-web.js");
const client = new Client(puppeteerOptions);
client.initialize();
client.on("qr", (qr) => {
qrcode.generate(qr, {
small: true
});
});
client.on('ready', () => {
const message = 'Informar que el número será dado de baja';
sendToChats(message);
});
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));
async function sendToChats(m) {
const mychats = await client.getChats();
for (chat of mychats) {
chat.sendMessage(m);
await sleep(35000);
}
}
Para ejecutarlo, escribiremos:
node fichero.js
Nos aparecerá un código QR en la consola y que deberemos scannear accediendo al Whastapp > Settings > Linked Devices > Link Device
Lo lanzamos y a los pocos segundos/minutos, empezaremos a enviar los mensajes: