Criando uma aplicação simples para envio de mensagens para whatsapp
Criando uma aplicação simples para envio de mensagens para whatsapp
Palamar
Palamar 👨‍💻 Web Developer Frontend ⚛ JavaScript • React • NextJS • Node.js
Tags
nodejs
javascript
express
Neste post vamos criar uma aplicação que vai ser responsavel por enviar mensagens em massa, para whatsapp.

Tecnologias utilizadas

  • Express: O Express é um framework para aplicativo da web do Node.js mínimo e flexível que fornece um conjunto robusto de recursos para aplicativos web e móvel.
  • Whatsapp-web e Qrcode-terminal: Como o whatsapp-web.js funciona executando o WhatsApp Web em segundo plano e automatizando sua interação, você precisará autorizar o cliente digitalizando um código QR do WhatsApp em seu telefone.
Para instalar as bibliotecas como Express, Whatsapp-web e Qrcode-terminal digite no terminal o comando
yarn add express whatsapp-web.js qrcode-terminal dotenv
ou
npm install yarn add express whatsapp-web.js qrcode-terminal dotenv
Vamos começando na raiz do nosso projeto o arquivo package.json digitando no terminal o comando npm init -y, agora podemos criar a pasta src também na raiz e dentro desta pasta vamos criar o nosso primeiro arquivo server.js, que será responsável por carregar o nosso servidor na porta 8080.
const express = require('express');
const router = require('./routes');

const app = express();

app.use(express.json());
app.use(router);

const PORT = 8080;

app.listen(PORT, () => {
  console.log(`App is listening on port ${PORT}`);
});
Ainda dentro da pasta src vamos o seguinte arquivo chamado routes.js que será o nosso arquivo de rotas da aplicação.
const router = require("express").Router();
const { pipeline, Readable, Transform } = require("stream");
const { promisify } = require("util");
const { createWriteStream } = require("fs");
const { sendMessage } = require("../whatsapp");

router.post("/sendMessage", async (req, res) => {
  const { message } = req.body;
  const { phones } = req.body;

  const pipelineAsync = promisify(pipeline);
  {
    const readableStream = Readable({
      read() {
        phones.forEach(function (number) {
          const data = JSON.stringify(number);
          readableStream.push(data);
        });
        readableStream.push(null);
      },
    });

    const sendMessageMap = new Transform({
      transform(chunk, encoding, callback) {
        const data = JSON.parse(chunk);
        const result = `${data}\n`;
        sendMessage(data, message);
        callback(null, result);
      },
    });

    await pipelineAsync(
      readableStream,
      sendMessageMap,
      createWriteStream("db.csv")
    );
  }
});

module.exports = router;
A na raiz do nosso projeto vamos criar o arquivo whatsapp.js que será responsavel por toda nossa aplicação, também devemos o arquivo env e pasta tokens sem nenhum arquivo dentro apenas a pasta okay.
require('dotenv').config();
const fs = require('fs');
const qrcode = require('qrcode-terminal');
const { Client } = require('whatsapp-web.js');

const SESSION_PATH = process.env.SESSION_FILE_PATH;

let sessionConfig;
if(fs.existsSync(SESSION_PATH)) {
  sessionConfig = require(SESSION_PATH);
}

let client = new Client({
    session: sessionConfig,
})

client.on('qr', qr => {
    qrcode.generate(qr, {small: true});
})

client.on('authenticated', (session) => {
    console.log('authenticated');
    sessionConfig = session;
    fs.writeFile(SESSION_PATH, JSON.stringify(session), function(err) {
      if(err) {
        console.log(err);
      }
    });
})

client.on('auth_failure', (session) => {
  sessionConfig = '';
  console.log(session, 'não foi possível logar');
  fs.writeFile(SESSION_PATH, JSON.stringify(sessionConfig), function(err) {
    if(err) {
      console.log(err);
    }
  })
})

client.on('ready', () => {
  console.log('ready');
})

client.initialize();

const sendMessage = (number = null, text = null) => {
  const phone = `55${number}@c.us`;
  const message = text || 'Desculpe, algo deu errado';
  try {
    client.sendMessage(phone, message);
    console.log({phone, message});
  } catch (error) {
    console.log(error);
  }
}

module.exports = {
  sendMessage
}
Pronto se tudo estiver certo podemos inicializar a nossa aplicação digitando no terminal o comando npm dev ou yarn dev, e como a aplicação não tem nenhuma autenticação ela irá gerar um Qrcode no terminal mesmo, no qual você deverá scanear o qrcode com o whatsapp, dessa forma você poderá enviar as mensagens, no meu caso utilizei Insomnia para ler a nossa API criada e assim enviar as mesagens para devidos números.
notion image
Tela inicial quando a aplicação é inicializada pela primeira vez.

Conclusão

Para quem estiver com alguma dificuldade em codar a aplicação vou deixar o link do repositório do projeto. Espero que com esse tutorial vocês tenham aprendido varios conceitos utilizados nesta aplicação e tecnologias.