Envío masivo y automatizado WhatsApp

    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:

    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:

    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:

    Leave a Reply

    Your email address will not be published. Required fields are marked *