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