Automatize o WhatsApp com Puppeteer e Node.js

Automatize o WhatsApp com Puppeteer e Node.js


Neste tutorial, você verá:

✔️ Configuração do node.js e sua dependências
✔️ Criar a interação com o WhatsApp
✔️ Configurar um domínio para acesso do seu aplicativo com ssl

1.Crie um arquivo package.json na raiz do seu projeto com o seguinte conteúdo.

{
  "name": "integrator-bot-node.js",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "node --watch ."
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.21.2",
    "qrcode": "^1.5.4",
    "whatsapp-web.js": "^1.26.0"
  }
}

2. Crie um arquivo index.js na raiz do seu projeto com o seguinte conteúdo

const express = require('express');
const qrcode = require('qrcode');
const { Client, LocalAuth } = require('whatsapp-web.js');
const puppeteer = require('puppeteer');
const os = require('os');
const which = require('which');

// Função para localizar o caminho do Chrome/Chromium
function getChromePath() {
    const platform = os.platform(); // Detecta o sistema operacional
    let chromePath;

    if (platform === 'linux') {
        // Para Linux
        chromePath = which.sync('google-chrome', { nothrow: true }) || which.sync('chromium', { nothrow: true });
    } else if (platform === 'darwin') {
        // Para macOS
        chromePath = '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome';
    } else if (platform === 'win32') {
        // Para Windows
        chromePath = 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe';
    }
    if (!chromePath) {
        throw new Error('Navegador Google Chrome/Chromium não encontrado. Certifique-se de que está instalado no sistema.');
    }

    return chromePath;
}

// Função para criar o cliente WhatsApp com configurações de Puppeteer
function createWhatsAppClient() {
    const chromePath = getChromePath();

    return new Client({
        authStrategy: new LocalAuth(),
        puppeteer: {
            executablePath: chromePath, // Caminho dinâmico do Chrome
            headless: 'new', // Novo modo headless
            args: [
                '--no-sandbox',
                '--disable-setuid-sandbox',
                '--user-data-dir=/tmp/puppeteer_data', // Evita conflitos de perfil
                '--disable-dev-shm-usage', // Evita problemas de memória compartilhada
                '--disable-extensions',
                '--disable-gpu',
                '--no-first-run',
                '--no-default-browser-check',
                '--disable-software-rasterizer',
                '--disable-background-networking',
                '--disable-background-timer-throttling',
                '--disable-client-side-phishing-detection',
                '--disable-hang-monitor',
                '--disable-popup-blocking',
                '--disable-sync',
                '--metrics-recording-only',
                '--mute-audio',
                '--disable-gl-drawing-for-tests',
                '--enable-low-end-device-mode'
            ],
        },
    });
}

// Instância do Express para criar o servidor web
const app = express();
const port = 3000;

let qrCodeUrl = null; // Variável para armazenar a URL do QR Code gerado

// Criação do cliente WhatsApp com configurações otimizadas
const client = createWhatsAppClient();

// Evento para capturar o QR Code gerado
client.on('qr', async (qr) => {
    qrCodeUrl = await qrcode.toDataURL(qr); // Converte o QR Code em Base64
    console.log(`QR Code gerado. Acesse http://localhost:${port} para escanear.`);
});

// Evento disparado quando o cliente está pronto
client.on('ready', () => {
    console.log('Client is ready!');
});


// Configuração de respostas automáticas a mensagens recebidas
client.on('message_create', async (message) => {
    if (message.body === 'Java') {
        await message.reply('Conheça o nosso painel em https://integrator.com.br/plano-hospedagem-php-java.html');
    }
    if (message.body === 'Spring Boot') {
        await message.reply('Conheça o nosso painel em https://integrator.com.br/plano-hospedagem-php-spring.html');
    }
    if (message.body === 'Node.sj') {
        await message.reply('Conheça o nosso painel em https://integrator.com.br/plano-hospedagem-php-nodejs.html');
    }
    if (message.body === 'Painel ICP') {
        await message.reply('Conheça o nosso painel em https://integrator.com.br/icp.html');
    }
});

// Inicializa o cliente do WhatsApp
client.initialize();

// Rota para exibir o QR Code no navegador
app.get('/', (req, res) => {
    if (qrCodeUrl) {
        res.send(`
            <html>
                <body>
                    <h1>Escaneie o QR Code com o WhatsApp</h1>
                    <img src="${qrCodeUrl}" alt="QR Code">
                </body>
            </html>
        `);
    } else {
        res.send('<h1>QR Code ainda não está pronto. Tente novamente em alguns segundos.</h1>');
    }
});

// Inicializa o servidor Express
app.listen(port, () => {
    console.log(`Servidor rodando em http://localhost:${port}`);
});

Veja também o exemplo em video e como publicar em um domínio com ssl usando o nosso painel ICP