Files
clube67.com/backend/plugins/whatsapp-v1/README.md
T
2026-05-18 18:32:55 +02:00

4.4 KiB

rscara

API em TypeScript para múltiplas contas WhatsApp usando InfiniteAPI (fork do Baileys), com geração de QR code, gerenciamento de conexões e disparo de componentes especiais (botões, listas, carrossel, enquete). Inclui interface web para conectar números e enviar mensagens.

Requisitos

  • Node.js >= 20
  • npm ou yarn

Instalação

npm install

Configuração

Copie o arquivo de exemplo e ajuste:

cp .env.example .env

Variáveis em .env:

Variável Descrição Padrão
PORT Porta do servidor 8787
API_KEY Chave para header x-api-key (deixe vazio para desativar) -
AUTH_FOLDER Pasta onde salvar credenciais por instância auth

Desenvolvimento

npm run dev

Build e produção

npm run build
npm start

Interface web

Com o servidor rodando, acesse http://localhost:8787. A página inicial e os arquivos estáticos não exigem API key; apenas as rotas /v1/* usam o header x-api-key quando API_KEY está definida.

  • Conexões: listar conexões salvas (clique em Conectar), conectar por nome, ver QR (atualizado automaticamente), listar instâncias ativas com ações (Desconectar, Novo QR, Deletar). Status e QR são atualizados a cada 2 segundos enquanto a aba estiver aberta.
  • Disparos: escolher instância, colar lista de mailing (um número por linha, com DDI), definir intervalo mínimo e máximo (em segundos) entre cada envio, escolher tipo de mensagem e preencher os campos (formulários dinâmicos com adicionar/remover). O envio é feito em lote com espera aleatória entre os números.

Endpoints

O header x-api-key é obrigatório apenas nas rotas /v1/* quando API_KEY está definida. A rota /health e a interface em / não exigem key.

Instâncias

Método Rota Descrição
POST /v1/instances Cria/conecta instância e retorna QR (body: { "instance": "main" })
GET /v1/instances Lista instâncias ativas e nomes das conexões salvas (saved)
GET /v1/instances/saved Lista apenas nomes das conexões salvas (pastas em auth/)
GET /v1/instances/:name Status de uma instância
GET /v1/instances/:name/qr QR em base64 (quando status = qr)
POST /v1/instances/:name/disconnect Desconecta e remove da memória (credenciais ficam em disco)
POST /v1/instances/:name/logout Logout e apaga sessão em disco (próxima conexão gera novo QR)
DELETE /v1/instances/:name Remove instância da memória (fecha socket)

Mensagens (componentes especiais)

Método Rota Descrição
POST /v1/messages/send_menu Menu texto (opções numeradas)
POST /v1/messages/send_buttons_helpers Botões quick reply (até 3)
POST /v1/messages/send_interactive_helpers Botões CTA (URL, Copiar, Ligar)
POST /v1/messages/send_list_helpers Lista dropdown (nativeList)
POST /v1/messages/send_poll Enquete
POST /v1/messages/send_carousel_helpers Carrossel com cards (imagem + botões)

Em todos os endpoints de mensagens o body deve incluir instance (nome da instância) e to (número no formato 5511999999999).

Exemplo rápido

  1. Subir a API e abrir a interface em http://localhost:8787 (ou criar instância via API):
curl -X POST http://localhost:8787/v1/instances \
  -H "Content-Type: application/json" \
  -H "x-api-key: SUA_API_KEY" \
  -d '{"instance": "main"}'
  1. A resposta pode trazer qr em base64. Exiba a imagem ou use GET /v1/instances/main/qr até conectar. Na interface, o QR e o status são atualizados automaticamente.

  2. Enviar botões:

curl -X POST http://localhost:8787/v1/messages/send_buttons_helpers \
  -H "Content-Type: application/json" \
  -H "x-api-key: SUA_API_KEY" \
  -d '{
    "instance": "main",
    "to": "553598828503",
    "text": "Como posso ajudar?",
    "footer": "Atendimento 24h",
    "buttons": [
      {"id": "vendas", "text": "Fazer Pedido"},
      {"id": "suporte", "text": "Suporte"}
    ]
  }'

Licença

MIT.