RR-WhatsApp-API, simples API para envio de mensagens.

Hoje acordei querendo me incomodar e pensei vou fazer a “droga” da API de Whatsapp que tanto me pedem (mesmo que ninguém me doa bo***ta nenhuma, é foi um desabafo), pois quem me conhece sabe que odeio o Whatsapp, mas vamos lá, eu e o GPT tentamos fazer algo simples para enviar mensagens do WhatsApp utilizando o projeto whatsapp-web.js.

Bom minha ideia inicial era poder enviar mensagem chamando uma URL, depois fiquei enjoado e fiz uma pagina com um formulário para o envio até de anexo (olha só e luxuria!) então essa P***a de API possibilita o envio de mensagens com ou sem anexos, tanto para números individuais quanto para grupos. A aplicação pode ser utilizada via interface web ou diretamente através de endpoints REST.

Github: RR-WhatsApp-API

Requisitos

Sistema Operacional: Debian 12

Atualize os pacotes existentes:

# apt update ; apt upgrade -y

Instalação

Instale as dependências necessárias para o `puppeteer` e outras bibliotecas:

# apt install -y \
  curl wget nano vim git nodejs npm psmisc \
  ca-certificates fonts-liberation libappindicator3-1 \
  libatk-bridge2.0-0 libcups2 libdrm-dev libgbm-dev libgtk-3-0 \
  libnspr4 libnss3 libxss1 lsb-release xdg-utils libasound2 libdrm2 \
  libxcomposite1 libxrandr2 libgbm1

Crie um usuário para a aplicação e clone o repositório, e ajuste o local dos arquivos:

# adduser --home /opt/RR-WhatsApp-API rr-whatsapp-api
$ su - rr-whatsapp-api
$ git clone https://github.com/remontti/RR-WhatsApp-API.git
$ mv /opt/RR-WhatsApp-API/RR-WhatsApp-API/* /opt/RR-WhatsApp-API/
$ rm -rf /opt/RR-WhatsApp-API/RR-WhatsApp-API

Instale as dependências do projeto:

$ cd /opt/RR-WhatsApp-API/
$ npm install

Altere o arquivo `index.js` para configurar os IPs autorizados (allowedIPs) que terão acesso à API:

$ vim /opt/RR-WhatsApp-API/index.js

Exemplo de configuração de IPs permitidos:

const allowedIPs = [
    '192.168.0.0/16',
    '127.0.0.1',
    '::1',
];

Se desejar, altere também a porta da aplicação:

const port = 3001;

Para iniciar a aplicação, execute:

$ node index.js

A saída será semelhante a: API rodando em http://0.0.0.0:3001

Ctrl+c para cancelar, vamos colocar para executar a aplicação como um serviço no Debian 12, siga os passos abaixo:
$ exit

# nano /etc/systemd/system/rr-whatsapp-api.service

Adicione:

[Unit]
Description=RR WhatsApp API
After=network.target

[Service]
ExecStart=/usr/bin/node /opt/RR-WhatsApp-API/index.js
WorkingDirectory=/opt/RR-WhatsApp-API
Restart=always
User=rr-whatsapp-api
Environment=NODE_ENV=production
ExecReload=/usr/bin/killall -9 rr-whatsapp-api
KillMode=process
RestartSec=10

[Install]
WantedBy=multi-user.target

Recarregar o systemd e Iniciar o Serviço

# systemctl daemon-reload
# systemctl enable rr-whatsapp-api
# systemctl start rr-whatsapp-api

Verificar o Status do Serviço

# systemctl status rr-whatsapp-api.service

Uso

1. Utilizando o Formulário Web

1.1. Acessar a Interface Web

No seu navegador, acesse: http://SEU_SERVIDOR:3001

Substitua SEU_SERVIDOR pelo endereço IP ou nome de domínio do seu servidor.

1.2. Conectar ao WhatsApp

  • Na interface web, se não estiver conectado, você verá a opção para Conectar.
  • Clique no botão Conectar.
  • Um modal será aberto exibindo o QR Code.
  • Escaneie o QR Code com o aplicativo do WhatsApp no seu dispositivo móvel:
    • Abra o WhatsApp.
    • Vá em Configurações > Aparelhos Conectados > Conectar um Aparelho.
    • Escaneie o QR Code exibido na tela.
  • Após a autenticação, a página será atualizada e mostrará o status Conectado ao WhatsApp.

1.3. Enviar Mensagens

  • Preencha o formulário:
    • Número(s) ou Grupo(s): Insira os números de telefone (com código do país e DDD) ou nomes dos grupos, separados por vírgula. Se notar que deu mensagem enviada, mas não foi, provavelmente vai ter que tirar o “9 da frente”, essa M de whatsapp é zoado. Exemplo:
      +5511999999999, +552188888888, Nome do Grupo
    • Mensagem: Digite a mensagem que deseja enviar.
    • Selecionar Imagem/Documento (Opcional): Se desejar enviar um anexo, selecione o arquivo.
  • Clique em Enviar Mensagem.
  • Um modal aparecerá informando o sucesso ou erro do envio.

OBS: A primeira mensagem após autenticar teve uma vez que chegou a levar 4 min para enviar. mas depois ficou tudo certo.

1.4. Desconectar do WhatsApp

  • Na interface web, clique no botão Desconectar.
  • Você receberá uma confirmação de que foi desconectado.

2. Utilizando a API Diretamente

2.1. Verificar o Status da Conexão

Faça uma requisição GET para:
http://SEU_SERVIDOR:3001/api/status

Resposta:

  • Conectado:
    {
      "status": "connected",
      "number": "552199999999"
    }
  • Desconectado:
    {
      "status": "disconnected"
    }

2.2. Obter o QR Code

Para autenticar o cliente sem usar a interface web, você pode obter o QR Code via API.

Faça uma requisição GET para:
http://SEU_SERVIDOR:3001/api/qr

  • Se não estiver conectado:
    • Você receberá a imagem do QR Code.
    • Escaneie essa imagem usando o aplicativo do WhatsApp.
  • Se já estiver conectado:
    {
      "status": "connected",
      "message": "Cliente já está conectado"
    }

2.3. Enviar Mensagens via API

2.3.1. Enviar Mensagem Sem Anexo

Faça uma requisição POST para:
http://SEU_SERVIDOR:3001/api/send

Parâmetros do Formulário (multipart/form-data):

  • recipients: Número(s) ou Grupo(s) separados por vírgula.
  • message: Texto da mensagem.

Exemplo usando curl:

curl -X POST http://localhost:3001/api/send \
  -F 'recipients=+552199999999,Grupo de Amigos' \
  -F 'message=Olá, esta é uma mensagem de teste!'
2.3.2. Enviar Mensagem Com Anexo

Além dos parâmetros anteriores, inclua o campo file com o arquivo.
Exemplo usando curl:

curl -X POST http://localhost:3001/api/send \
  -F 'recipients=+552199999999' \
  -F 'message=Aqui está o documento solicitado.' \
  -F 'file=@/opt/o/arquivo.pdf'
2.3.3. Enviar Mensagem via URL

Atenção: Este método é menos seguro e deve ser usado apenas para testes.

Faça uma requisição GET para:
http://SEU_SERVIDOR:3001/api/sendMessage/:recipient/:message

  • :recipient: Número sem caracteres especiais ou nome do grupo (URL-encoded).
  • :message: Mensagem (URL-encoded).

Exemplo:
Enviar “Teste via GET” para o número +55 21 99999-9999:
http://SEU_SERVIDOR:3001/api/sendMessage/5511912345678/Teste%20via%20GET

Enviar “Aviso importante” para o grupo “Equipe”:
http://SEU_SERVIDOR:3001/api/sendMessage/Equipe/Aviso%20importante

2.4. Desconectar do WhatsApp via API

Faça uma requisição GET para:
http://SEU_SERVIDOR:3001/api/disconnect


Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!

Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato clique aqui.

Rudimar Remontti

Trabalho atualmente como Gerente de Redes em um Provedor de Internet no Rio Grande do Sul.

Você pode gostar...

4 Resultados

  1. LV disse:

    Alguém encontrou dificuldades para enviar mensagens em grupos, mesmo após adicionar o número ao grupo? Output no console, informa que o grupo não foi encontrado. Já testei utilizando Nome do Grupo e ID.

  2. Joandson Bezerra disse:

    Se após seguir todo o tuto e ao tentar rodar o *node index.js* receber o erro abaixo? Logo no final está a correção.
    rr-whatsapp-api@wpp:~$ node index.js
    API rodando na porta 3001
    /opt/RR-WhatsApp-API/node_modules/puppeteer-core/lib/cjs/puppeteer/node/BrowserRunner.js:299
    reject(new Error([
    ^

    Error: Failed to launch the browser process!
    /opt/RR-WhatsApp-API/node_modules/puppeteer-core/.local-chromium/linux-1045629/chrome-linux/chrome: error while loading shared libraries: libasound.so.2: cannot open shared object file: No such file or directory

    TROUBLESHOOTING: https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md

    at onClose (/opt/RR-WhatsApp-API/node_modules/puppeteer-core/lib/cjs/puppeteer/node/BrowserRunner.js:299:20)
    at Interface. (/opt/RR-WhatsApp-API/node_modules/puppeteer-core/lib/cjs/puppeteer/node/BrowserRunner.js:287:24)
    at Interface.emit (node:events:529:35)
    at Interface.close (node:internal/readline/interface:534:10)
    at Socket.onend (node:internal/readline/interface:260:10)
    at Socket.emit (node:events:529:35)
    at endReadableNT (node:internal/streams/readable:1400:12)
    at process.processTicksAndRejections (node:internal/process/task_queues:82:21)

    Node.js v18.19.0

    #######

    Volte ao root e use o comando abaixo.

    root@wpp:~# apt install -y libasound2 libnss3 libxss1 libatk-bridge2.0-0 libdrm2 libxcomposite1 libxrandr2 libgbm1 libgtk-3-0

  3. eliseu torres disse:

    Parabéns pelo tutorial, deu certo aqui porem fica minutos pra gerar o QRcode e nao gera, pode me ajudar?

  4. Rodrigo disse:

    Excelente… Aqui utilizamos a EvolutionAPI (Um projeto BEM maduro) já vem com um painel pronto.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *