116 lines
4.4 KiB
Markdown
116 lines
4.4 KiB
Markdown
# rscara
|
|
|
|
API em **TypeScript** para múltiplas contas WhatsApp usando [InfiniteAPI](https://github.com/rsalcara/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
|
|
|
|
```bash
|
|
npm install
|
|
```
|
|
|
|
## Configuração
|
|
|
|
Copie o arquivo de exemplo e ajuste:
|
|
|
|
```bash
|
|
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
|
|
|
|
```bash
|
|
npm run dev
|
|
```
|
|
|
|
## Build e produção
|
|
|
|
```bash
|
|
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):
|
|
|
|
```bash
|
|
curl -X POST http://localhost:8787/v1/instances \
|
|
-H "Content-Type: application/json" \
|
|
-H "x-api-key: SUA_API_KEY" \
|
|
-d '{"instance": "main"}'
|
|
```
|
|
|
|
2. 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.
|
|
|
|
3. Enviar botões:
|
|
|
|
```bash
|
|
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.
|