API REST em Node.js para realizar e gerenciar ligações de voz e vídeo via WhatsApp de forma programática
# 1. Clone e instale
git clone https://github.com/seu-usuario/whatsapp-call-api.git
cd whatsapp-call-api
npm install
# 2. Configure
cp .env.example .env
# 3. Inicie o servidor
npm start
# 4. Escaneie o QR Code que aparecerá no terminal com seu WhatsApp
# 5. Faça sua primeira chamada!
curl -X POST http://localhost:3000/api/call \
-H "Content-Type: application/json" \
-d '{"phoneNumber": "5511999999999", "isVideo": false}'Pronto! 🎉 Sua API está rodando em http://localhost:3000
- Início Rápido
- Sobre o Projeto
- Características
- Pré-requisitos
- Instalação
- Configuração
- Uso
- Documentação da API
- Docker
- Estrutura do Projeto
- Tecnologias
- Contribuindo
- Licença
- 💡 Exemplos de Uso - Exemplos práticos e casos de uso
- 🐛 Solução de Problemas - Guia completo de troubleshooting
A WhatsApp Call API é uma solução REST completa que permite integrar funcionalidades de chamadas do WhatsApp em suas aplicações. Construída sobre a biblioteca Baileys, ela oferece endpoints simples e eficientes para:
- Iniciar chamadas de voz e vídeo
- Gerenciar chamadas recebidas
- Monitorar status de conexão
- Automatizar fluxos de atendimento
- ✅ Simples: API REST fácil de integrar em qualquer linguagem
- ✅ Completo: Suporte a voz e vídeo
- ✅ Moderno: Node.js 20+ com ES Modules
- ✅ Dockerizado: Deploy fácil com Docker Compose
- ✅ Bem Documentado: Exemplos práticos e documentação detalhada
- 📞 Chamadas de Voz e Vídeo: Inicie chamadas programaticamente
- 🔐 Autenticação Persistente: QR Code gerado automaticamente na primeira execução
- 🔄 Reconexão Automática: Mantém a conexão ativa mesmo após instabilidades
- 📊 Status em Tempo Real: Monitore o estado da conexão WhatsApp
- 🎨 QR Code Visual: Endpoint para obter QR Code como imagem base64
- 🐳 Docker Ready: Configuração completa para containers
- 📝 Logging Estruturado: Utiliza Pino para logs eficientes
- 🛡️ Tratamento de Erros: Respostas padronizadas e informativas
Antes de começar, certifique-se de ter instalado:
- Node.js 20.x ou superior (Download)
- npm 9.x ou superior (vem com Node.js)
- Git (opcional, para clonar o repositório)
- Docker e Docker Compose (opcional, para execução em containers)
node --version # Deve retornar v20.x.x ou superior
npm --version # Deve retornar 9.x.x ou superior- Clone o repositório
git clone https://github.com/seu-usuario/whatsapp-call-api.git
cd whatsapp-call-api- Instale as dependências
npm install- Configure as variáveis de ambiente
cp .env.example .envEdite o arquivo .env conforme necessário:
PORT=3000
SESSION_NAME=whatsapp-call-session- Inicie o servidor
# Modo desenvolvimento (com auto-reload)
npm run dev
# Modo produção
npm start# Build e iniciar containers
docker-compose up -d
# Visualizar logs
docker-compose logs -f
# Parar containers
docker-compose down| Variável | Descrição | Padrão | Obrigatório |
|---|---|---|---|
PORT |
Porta do servidor Express | 3000 |
Não |
SESSION_NAME |
Nome da sessão WhatsApp | whatsapp-call-session |
Não |
Na primeira execução, será necessário autenticar com o WhatsApp:
- Inicie o servidor (o QR Code aparecerá no terminal)
npm start-
Escaneie o QR Code com o WhatsApp no celular:
- Abra o WhatsApp
- Vá em Configurações > Aparelhos conectados
- Toque em Conectar um aparelho
- Escaneie o QR Code exibido no terminal
-
Alternativa: Obtenha o QR Code via API
curl http://localhost:3000/api/qrA autenticação será salva em auth_info_baileys/ e reutilizada nas próximas execuções.
# Desenvolvimento (com nodemon - reinicia automaticamente)
npm run dev
# Produção
npm startO servidor estará disponível em: http://localhost:3000
curl http://localhost:3000/api/statusResposta esperada:
{
"connected": true,
"state": "connected",
"timestamp": "2025-11-14T10:30:00.000Z"
}http://localhost:3000/api
Verifica o status da conexão com WhatsApp.
Resposta (200 OK)
{
"connected": true,
"state": "connected",
"timestamp": "2025-11-14T10:30:00.000Z"
}Estados possíveis:
disconnected- Desconectadoqr- Aguardando leitura do QR Codeconnected- Conectado e autenticadoreconnecting- Reconectando
Obtém o QR Code para autenticação (disponível apenas quando não conectado).
Resposta (200 OK)
{
"qrCode": "2@abc123...",
"qrImage": "data:image/png;base64,iVBORw0KGgoAAAANS...",
"timestamp": "2025-11-14T10:30:00.000Z"
}Resposta (404 Not Found) - Quando já está conectado
{
"error": "QR Code não disponível",
"message": "WhatsApp já está conectado ou QR Code ainda não foi gerado"
}Uso do QR Code:
qrCode: String do QR Code (para geração própria)qrImage: Imagem base64 pronta para exibir em<img src="...">
Inicia uma chamada de voz ou vídeo.
Request Body
{
"phoneNumber": "5511999999999",
"isVideo": false
}Parâmetros:
phoneNumber(string, obrigatório): Número com código do país (sem + ou espaços)isVideo(boolean, opcional):truepara videochamada,falsepara voz (padrão)
Resposta (200 OK)
{
"success": true,
"callId": "call_1731582600000_abc123def",
"to": "5511999999999@s.whatsapp.net",
"type": "audio",
"timestamp": "2025-11-14T10:30:00.000Z"
}Resposta (400 Bad Request)
{
"error": "Número de telefone é obrigatório"
}Resposta (500 Internal Server Error)
{
"error": "Erro ao fazer chamada",
"message": "WhatsApp não está conectado"
}Exemplo com cURL:
curl -X POST http://localhost:3000/api/call \
-H "Content-Type: application/json" \
-d '{"phoneNumber": "5511999999999", "isVideo": false}'Rejeita uma chamada recebida.
Request Body
{
"callId": "call_123456",
"callFrom": "5511999999999@s.whatsapp.net"
}Parâmetros:
callId(string, obrigatório): ID da chamada a ser rejeitadacallFrom(string, obrigatório): JID de quem está ligando
Resposta (200 OK)
{
"success": true,
"message": "Chamada rejeitada",
"callId": "call_123456",
"timestamp": "2025-11-14T10:30:00.000Z"
}Encerra uma chamada ativa.
Request Body
{
"callId": "call_123456"
}Parâmetros:
callId(string, obrigatório): ID da chamada a ser encerrada
Resposta (200 OK)
{
"success": true,
"message": "Chamada encerrada",
"callId": "call_123456",
"timestamp": "2025-11-14T10:30:00.000Z"
}Obtém o histórico de chamadas (atualmente retorna array vazio - implementação futura).
Resposta (200 OK)
{
"success": true,
"message": "Histórico de chamadas não implementado",
"calls": []
}📝 Nota: Este endpoint será implementado em versões futuras com armazenamento em banco de dados.
# Iniciar serviço
docker-compose up -d
# Ver logs em tempo real
docker-compose logs -f whatsapp-call-api
# Parar serviço
docker-compose down
# Rebuild após alterações
docker-compose up -d --buildO docker-compose.yml está configurado para:
- ✅ Mapear porta 3000
- ✅ Persistir autenticação em volume (
auth_info_baileys) - ✅ Reiniciar automaticamente após falhas
- ✅ Usar variáveis de ambiente
volumes:
- ./auth_info_baileys:/app/auth_info_baileysImportante: O diretório auth_info_baileys/ contém as credenciais da sessão WhatsApp. Mantenha-o seguro e nunca commite no Git.
Para exemplos práticos e detalhados de uso da API, consulte:
Inclui:
- 📞 Fazer chamadas de voz e vídeo
- 🔍 Verificar status da conexão
- 🔐 Obter QR Code para autenticação
- 🧪 Scripts de teste
- 🎯 Casos de uso avançados
Exemplo rápido:
# Fazer uma chamada de voz
curl -X POST http://localhost:3000/api/call \
-H "Content-Type: application/json" \
-d '{"phoneNumber": "5511999999999", "isVideo": false}'whatsapp-call-api/
├── src/ # Código fonte
│ ├── config/
│ │ └── baileys.js # Configuração do Baileys e gestão do socket
│ ├── routes/
│ │ └── callRoutes.js # Definição dos endpoints da API
│ ├── services/
│ │ └── callService.js # Lógica de negócio das chamadas
│ └── index.js # Entrada do servidor Express
│
├── examples/ # Exemplos de uso
│ ├── call-examples.js # Exemplos básicos
│ ├── advanced-call.js # Exemplos avançados
│ └── webhook-handler.js # Exemplo de webhook
│
├── auth_info_baileys/ # Sessão WhatsApp (não versionado)
│
├── .env.example # Template de variáveis de ambiente
├── .gitignore # Arquivos ignorados pelo Git
├── CLAUDE.md # Documentação para AI assistants
├── Dockerfile # Configuração do container
├── docker-compose.yml # Orquestração de containers
├── package.json # Dependências e scripts
├── README.md # Este arquivo
└── test-api.sh # Script de teste da API
src/: Todo o código fonte da aplicaçãoconfig/: Configurações (Baileys, banco de dados futuro)routes/: Definição de rotas da APIservices/: Lógica de negócio
examples/: Exemplos práticos de uso da APIauth_info_baileys/: Credenciais da sessão (gerado automaticamente)
| Tecnologia | Versão | Descrição |
|---|---|---|
| Node.js | 20+ | Runtime JavaScript |
| Express | 4.18 | Framework web minimalista |
| Baileys | 6.7 | Biblioteca WhatsApp Web API |
| Pino | 8.19 | Logger JSON de alta performance |
| QRCode | 1.5 | Geração de QR Codes |
| QRCode Terminal | 0.12 | QR Code no terminal |
- Nodemon 3.0 - Auto-reload durante desenvolvimento
- ✅ ES Modules: Uso nativo de
import/export - ✅ Async/Await: Código assíncrono moderno
- ✅ Top-level await: Suportado nativamente
Encontrou algum problema? Consulte nosso guia completo de solução de problemas:
Soluções para:
- ❌ QR Code não aparece
- ❌ Erro "WhatsApp não está conectado"
- ❌ Porta 3000 já em uso
- ❌ Problemas com Docker
- ❌ Chamadas que não completam
- 📝 Logs e debugging detalhado
Dica rápida: Na maioria dos casos, limpar a sessão resolve:
rm -rf auth_info_baileys/
npm startContribuições são bem-vindas! Siga os passos:
- Fork o projeto
- Crie uma branch para sua feature
git checkout -b feature/MinhaFeature
- Commit suas mudanças
git commit -m '✨ Adiciona MinhaFeature' - Push para a branch
git push origin feature/MinhaFeature
- Abra um Pull Request
- Use ES Modules (
import/export) - Sempre inclua extensão
.jsnos imports - Use async/await (não
.then()) - Mensagens de commit em português
- Siga o padrão do código existente
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Encontrou um bug? Tem uma sugestão?
- WhiskeySockets/Baileys - Pela excelente biblioteca
- Comunidade Node.js e Express
- Todos os contribuidores
Este projeto é para fins educacionais e de desenvolvimento. Use de forma responsável e de acordo com os Termos de Serviço do WhatsApp.
Não utilize para:
- ❌ Spam ou mensagens não solicitadas
- ❌ Violação de privacidade
- ❌ Atividades ilegais
O uso inadequado pode resultar no banimento da sua conta WhatsApp.
Desenvolvido com ❤️ usando Node.js e Baileys