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
- 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"}'
-
A resposta pode trazer
qrem base64. Exiba a imagem ou useGET /v1/instances/main/qraté conectar. Na interface, o QR e o status são atualizados automaticamente. -
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.