Rosa Digital WhatsApp API v2.0
Documentação completa da API para integração com WhatsApp Business
Introdução
Bem-vindo ao Rosa Digital API
Sistema completo de automação e gerenciamento WhatsApp
A Rosa Digital WhatsApp API v2.0 é uma solução completa para integração com WhatsApp Business, oferecendo:
- Gerenciamento de Sessões: Crie e gerencie múltiplas sessões WhatsApp
- Envio de Mensagens: Suporte a texto, mídia, localização e áudio
- Sistema de Webhooks: Receba notificações em tempo real de eventos
- Sistema de Usuários: Controle de acesso e permissões
- Persistência: Sessões e dados salvos automaticamente
- Fotos de Perfil: Download automático e exibição de fotos de contatos e grupos
- Interface Limpa: Console silencioso e interface profissional
Sistema de Agendamento
O sistema permite agendar mensagens para envio futuro com templates visuais complexos:
- Templates Visuais: Crie sequências de mensagens com diferentes tipos (texto, imagem, áudio, vídeo, documento, localização)
- Delays Configuráveis: Defina intervalos entre mensagens para simular comportamento humano
- Múltiplos Destinos: Envie para vários números separados por vírgula ou ponto e vírgula
- Processamento em Fila: Sistema processa mensagens automaticamente no horário agendado
- Gerenciamento Completo: Visualize, cancele e monitore status das mensagens agendadas
Últimas Atualizações
- Sistema de Gatilhos Melhorado: Palavras-chave separadas por ponto e vírgula (;)
- Fotos de Perfil Silenciosas: Carregamento sem logs no terminal do servidor
- Grupos Aprimorados: Exibição de descrição, datas de criação e metadados
- Página de Mensagens: Interface dedicada para envio de mensagens
- Sessões Corrigidas: Status "Online" para sessões conectadas
- Pausar/Retomar Sessões: Funcionalidade corrigida com endpoints corretos
- Sistema de Agendamento: Sistema completo de agendamento de mensagens
- Layout de Contatos: Melhorado para 4 contatos por linha
- Fotos de Contatos: Sistema de download automático com fallbacks SVG
- Indicadores de Digitação: Sistema realista de "digitando..." e "gravando áudio..."
- Interface Moderna: Cards com design glassmorphism e animações
- Testes Automáticos: 20 testes completos incluindo sessões e monitoramento
- Endpoints de Monitoramento: Logs, status do servidor e estatísticas detalhadas
- Notificações em Tempo Real: WebSocket para mensagens, status de sessões e eventos
- Reconexão Automática: Sistema inteligente de reconexão após reinicializações
- Persistência de Estado: Estado das sessões salvo automaticamente
- Testes Avançados: Sistema completo de testes com envio real de mensagens para número específico
- Seleção de Sessão: Testes automatizados usando sessões conectadas existentes
- Mensagens Reais: Teste de texto, mídia, localização e campanhas automáticas
Base URL
http://localhost:3000
Autenticação
A API utiliza autenticação baseada em JWT (JSON Web Token) e token fixo. Inclua o token no header:
Authorization: Bearer 12345
12345 para autenticação em todos os endpoints da API.
Autenticação
Teste Interativo de Autenticação
Faça login para obter um token JWT e testar todos os endpoints da API.
Login
Token Atual
Teste Rápido de Endpoints:
Obter token fixo de autorização
Response:
{
"token": "12345"
}
Fazer login no sistema
Request Body:
{
"email": "contato@thiper.com",
"password": "123456"
}
Response:
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"user": {
"id": "admin",
"email": "contato@thiper.com",
"role": "admin"
}
}
Verificar token de autenticação
Headers:
Authorization: Bearer <token>
Fazer logout do sistema
Sessões WhatsApp
Listar todas as sessões
Response:
{
"sessions": [
{
"id": "session1",
"status": "connected",
"phoneNumber": "+5511999999999",
"connectedAt": "2024-01-15T10:30:00Z",
"userId": "admin"
}
]
}
Criar nova sessão
Request Body:
{
"sessionId": "minha-sessao"
}
Obter QR Code da sessão
Este endpoint retorna o QR code necessário para conectar uma sessão WhatsApp. O QR code é válido por 5 minutos e deve ser escaneado pelo WhatsApp do usuário.
Como usar:
- Criar uma sessão: Primeiro, crie uma sessão usando
POST /api/sessions - Obter o QR code: Use
GET /api/sessions/{sessionId}/qrpara obter o QR code - Exibir o QR code: O QR code retornado é uma imagem em base64 que pode ser exibida diretamente em uma tag
<img> - Escaneamento: O usuário deve escanear o QR code com o WhatsApp no celular
- Verificar conexão: Use
GET /api/sessionspara verificar se a sessão está conectada
Exemplo de implementação:
// 1. Criar sessão
const createResponse = await fetch('/api/sessions', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer seu-token'
},
body: JSON.stringify({
sessionId: 'minha-sessao'
})
});
// 2. Obter QR code
const qrResponse = await fetch('/api/sessions/minha-sessao/qr', {
headers: {
'Authorization': 'Bearer seu-token'
}
});
const qrData = await qrResponse.json();
// 3. Exibir QR code
if (qrData.qr) {
document.getElementById('qr-code').src = qrData.qr;
console.log('QR Code expira em:', qrData.expiresAt);
} else {
console.log('Sessão já conectada ou QR code não disponível');
}
Response:
{
"qr": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...",
"expiresAt": "2024-01-15T10:35:00Z"
}
Dicas importantes:
- Timeout: O QR code expira em 5 minutos
- Reconexão: Se a sessão for desconectada, você precisará gerar um novo QR code
- Status: Verifique o status da sessão regularmente usando
GET /api/sessions - Reconexão automática: O sistema tenta reconectar automaticamente após reinicializações
- Persistência de estado: Estado das sessões salvo automaticamente para reconexão
- Monitoramento de saúde: Verificação contínua da saúde das sessões
- Limpeza automática: Remoção automática de sessões antigas
- Teste WebSocket: Use os botões de teste para verificar conexão em tempo real
- Botões com Loading: Botões de teste agora mostram estado de carregamento
Pausar sessão
Retomar sessão
Obter primeira sessão ativa
Deletar sessão
Limpar sessões órfãs
Obter foto de perfil de qualquer usuário pelo número
Retorna a URL da foto de perfil de qualquer usuário WhatsApp pelo número de telefone, se as configurações de privacidade permitirem.
Parâmetros:
:phoneNumber- Número de telefone do usuário (ex: 5511999999999 ou 11999999999)
Headers:
Authorization: Bearer {token}
Resposta de Sucesso (200):
{
"profilePictureUrl": "https://pps.whatsapp.net/v/t61.24694-24/...",
"phoneNumber": "5511999999999",
"contactId": "5511999999999@c.us",
"sessionId": "session-123",
"message": "Foto encontrada"
}
Resposta quando não há foto (200):
{
"profilePictureUrl": null,
"phoneNumber": "5511999999999",
"contactId": "5511999999999@c.us",
"sessionId": "session-123",
"message": "Usuário não tem foto de perfil ou configurações de privacidade não permitem"
}
Exemplo de Uso:
// JavaScript/Fetch
const response = await fetch('/api/profile-photo/5511999999999', {
headers: {
'Authorization': 'Bearer seu-token-aqui'
}
});
const data = await response.json();
if (data.profilePictureUrl) {
console.log('Foto do perfil:', data.profilePictureUrl);
// Exibir a foto: <img src="${data.profilePictureUrl}" alt="Foto do perfil">
} else {
console.log('Usuário não tem foto de perfil');
}
Teste Interativo:
Obter foto de perfil da sessão WhatsApp
Retorna a URL da foto de perfil do usuário da sessão WhatsApp conectada, se as configurações de privacidade permitirem.
Parâmetros:
:id- ID da sessão WhatsApp
Headers:
Authorization: Bearer {token}
Resposta de Sucesso (200):
{
"profilePictureUrl": "https://pps.whatsapp.net/v/t61.24694-24/...",
"phoneNumber": "5511999999999",
"sessionId": "session-123"
}
Resposta quando não há foto (200):
{
"profilePictureUrl": null,
"phoneNumber": "5511999999999",
"sessionId": "session-123",
"message": "Usuário não tem foto de perfil ou configurações de privacidade não permitem"
}
Implementação Técnica:
Este endpoint utiliza o método getProfilePicUrl(contactId) da biblioteca WhatsApp Web.js:
// O contactId deve estar no formato: 5511999999999@c.us
const contactId = phoneNumber.includes('@') ? phoneNumber : `${phoneNumber}@c.us`;
const profilePicUrl = await session.client.getProfilePicUrl(contactId);
Exemplo de Uso:
// JavaScript/Fetch
const response = await fetch('/api/sessions/session-123/profile-photo', {
headers: {
'Authorization': 'Bearer seu-token-aqui'
}
});
const data = await response.json();
if (data.profilePictureUrl) {
console.log('Foto do perfil:', data.profilePictureUrl);
} else {
console.log('Usuário não tem foto de perfil');
}
Teste Interativo:
Obter informações detalhadas da sessão
Mensagens
Enviar mensagem
Request Body (Texto):
{
"phone": "5511999999999",
"type": "text",
"message": "Olá! Esta é uma mensagem de teste.",
"sessionId": "minha-sessao"
}
Request Body (Imagem):
{
"phone": "5511999999999",
"type": "image",
"media": "https://example.com/image.jpg",
"message": "Legenda da imagem",
"sessionId": "minha-sessao"
}
Request Body (Localização):
{
"phone": "5511999999999",
"type": "location",
"location": {
"latitude": -23.5505,
"longitude": -46.6333,
"title": "São Paulo",
"description": "Cidade de São Paulo"
},
"sessionId": "minha-sessao"
}
Nota sobre Localização
O envio de localização foi corrigido para usar a classe Location do whatsapp-web.js conforme a documentação oficial. Agora as localizações são exibidas corretamente no WhatsApp.
Listar contatos
Query Parameters:
sessionId(opcional): ID da sessão específica
Listar grupos
Query Parameters:
sessionId(opcional): ID da sessão específica
Notificações em Tempo Real
O sistema possui notificações WebSocket em tempo real para mensagens, mudanças de status das sessões e eventos do sistema.
Conexão WebSocket
Para receber notificações em tempo real, conecte-se ao WebSocket do servidor:
Exemplo de Conexão:
// Conectar ao WebSocket
const socket = io('ws://localhost:3000');
// Escutar eventos de mensagens
socket.on('message_received', (data) => {
console.log('📨 Nova mensagem recebida:', data);
// data.sessionId - ID da sessão
// data.userId - ID do usuário
// data.message - Dados da mensagem
// data.timestamp - Timestamp da mensagem
});
// Escutar eventos de mensagens enviadas
socket.on('message_sent', (data) => {
console.log('📤 Mensagem enviada:', data);
// data.sessionId - ID da sessão
// data.userId - ID do usuário
// data.message - Dados da mensagem enviada
});
// Escutar mudanças de status das sessões
socket.on('session_status_changed', (data) => {
console.log('🔄 Status da sessão alterado:', data);
// data.sessionId - ID da sessão
// data.userId - ID do usuário
// data.status - Novo status (connected/disconnected)
// data.phoneNumber - Número do telefone (se conectado)
// data.reason - Motivo da desconexão (se desconectado)
});
// Escutar atualizações de sessões
socket.on('sessions_update', (sessions) => {
console.log('📱 Sessões atualizadas:', sessions);
// Array com todas as sessões e seus status
});
// Escutar atualizações de campanhas
socket.on('campaigns_update', (campaigns) => {
console.log('📢 Campanhas atualizadas:', campaigns);
// Array com todas as campanhas
});
// Escutar eventos de webhook
socket.on('webhook_request', (data) => {
console.log('🔗 Webhook enviado:', data);
// data.userId - ID do usuário
// data.event - Tipo do evento
// data.url - URL do webhook
// data.status - Status da resposta
// data.success - Se foi bem-sucedido
});
// Escutar respostas de webhook
socket.on('webhook_response_sent', (data) => {
console.log('📤 Resposta de webhook enviada:', data);
// data.userId - ID do usuário
// data.recipient - Destinatário
// data.message - Mensagem enviada
// data.timestamp - Timestamp
});
// Gerenciar desconexão
socket.on('disconnect', () => {
console.log('🔌 Desconectado do WebSocket');
});
// Gerenciar reconexão
socket.on('connect', () => {
console.log('🔌 Conectado ao WebSocket');
});
Tipos de Eventos Disponíveis:
- message_received: Nova mensagem recebida no WhatsApp
- message_sent: Mensagem enviada com sucesso
- session_status_changed: Mudança no status de uma sessão
- sessions_update: Atualização da lista de sessões
- campaigns_update: Atualização das campanhas
- webhook_request: Webhook enviado para URL externa
- webhook_response_sent: Resposta de webhook enviada
Importante:
- Autenticação: As notificações são filtradas por usuário
- Performance: Use debounce para evitar muitas atualizações
- Reconexão: O cliente reconecta automaticamente
- Dados: Todos os dados são serializáveis (JSON)
Reconexão Automática
O sistema possui reconexão automática inteligente que mantém as sessões ativas mesmo após reinicializações do servidor.
Funcionalidades de Reconexão
🔄 Reconexão Automática
- Persistência de Estado: Estado das sessões salvo automaticamente a cada 30 segundos
- Reconexão na Inicialização: Sessões conectadas são automaticamente reconectadas ao reiniciar o servidor
- Logs Detalhados: Sistema de logs com timestamps e informações específicas sobre reconexões
- Contadores de Sucesso: Relatórios de sucessos e falhas na reconexão
🏥 Monitoramento de Saúde
- Verificação Contínua: Verificação da saúde das sessões a cada minuto
- Detecção de Sessões Perdidas: Identificação automática de sessões que perderam conexão
- Marcacao de Status: Atualização automática do status para 'disconnected' quando necessário
🧹 Limpeza Automática
- Remoção de Sessões Antigas: Sessões desconectadas há mais de 24 horas são removidas automaticamente
- Limpeza de Processos: Limpeza automática de processos Chrome órfãos
- Otimização de Memória: Liberação de recursos não utilizados
Benefícios:
- Alta Disponibilidade: Sessões permanecem ativas mesmo após reinicializações
- Zero Downtime: Reconexão automática sem intervenção manual
- Monitoramento Inteligente: Detecção proativa de problemas
- Performance Otimizada: Limpeza automática mantém o sistema eficiente
Funcionalidades Avançadas
Simular interação humana com delays
Request Body:
{
"phone": "5511999999999",
"messages": [
"Olá! Este é um teste de interação humana.",
"Estou simulando digitação e gravação."
],
"options": {
"delayMin": 1000,
"delayMax": 2000,
"chanceDeGravando": 0.5
}
}
Validar URL de vídeo antes do envio
Request Body:
{
"url": "https://exemplo.com/video.mp4"
}
Campanhas
Como Agendar Campanhas
Para agendar uma campanha, use o endpoint POST /api/campaigns com os seguintes parâmetros:
{
"name": "Campanha Black Friday",
"message": "Promoção especial! 50% de desconto!",
"recipients": ["5511999999999@c.us", "5511888888888@c.us"],
"scheduledAt": "2024-12-25T10:00:00Z",
"type": "text"
}
Parâmetros importantes:
scheduledAt: Data e hora no formato ISO 8601recipients: Array de números de telefone com @c.ustype: "text", "image", "video", "audio", "document"
Configuração de Campanhas
Para configurar campanhas avançadas, use o endpoint POST /api/campaigns:
{
"enabled": true,
"audioEnabled": true,
"audioVoice": "alloy",
"audioFormat": "wav",
"botPauseTime": 60,
"systemPrompt": "Você é um assistente útil..."
}
Vozes disponíveis: alloy, echo, fable, onyx, nova, shimmer
Formatos de áudio: wav, mp3, ogg
Gestão de Atendimentos do Bot
Para gerenciar atendimentos do bot, use os seguintes endpoints:
GET /api/ai/attendances- Listar atendimentos ativosPOST /api/ai/attendances/{contactId}/pause- Pausar atendimentoPOST /api/ai/attendances/{contactId}/resume- Retomar atendimentoPOST /api/ai/attendances/{contactId}/stop- Parar atendimentoPOST /api/ai/attendances/pause-all- Pausar todosPOST /api/ai/attendances/resume-all- Retomar todos
Criar nova campanha
Request Body:
{
"name": "Campanha de Promoção",
"message": "🎉 Promoção especial! Desconto de 50% em todos os produtos!",
"contacts": [
"5511999999999",
"5511888888888",
"5511777777777"
],
"schedule": "2024-12-25T10:00:00Z"
}
Listar todas as campanhas
Iniciar campanha
Obter estatísticas da campanha
Grupos de Contatos
Criar grupo de contatos
Request Body:
{
"name": "Clientes VIP",
"description": "Grupo de clientes com prioridade",
"contacts": [
"5511999999999",
"5511888888888"
],
"tags": ["vip", "premium"]
}
Listar grupos de contatos
Upload de Arquivos
Upload de arquivo
Request:
Content-Type: multipart/form-datafile: [arquivo selecionado]
Gerenciamento de Usuários
Listar todos os usuários
Response:
{
"users": [
{
"id": "admin",
"email": "contato@thiper.com",
"role": "admin",
"sessionLimit": -1,
"plan": "active",
"active": true,
"createdAt": "2024-01-15T10:00:00Z"
}
]
}
Criar novo usuário
Request Body:
{
"email": "usuario@exemplo.com",
"password": "senha123",
"role": "user",
"sessionLimit": 1,
"plan": "active"
}
Atualizar usuário
Request Body:
{
"email": "usuario@exemplo.com",
"role": "user",
"sessionLimit": 2,
"plan": "active",
"active": true
}
Deletar usuário
Obter perfil do usuário atual
Logs do Sistema
Logs do Servidor
Mensagens Enviadas
Mensagens Recebidas
Configuração de Provedores
O sistema suporta múltiplos provedores de IA com fallback automático. Configure seus provedores preferidos:
Provedores Suportados
- OpenAI - GPT-3.5, GPT-4
- Groq - Llama3, Mixtral
- DeepSeek - DeepSeek Chat
- Anthropic - Claude 3
- OpenRouter - Múltiplos modelos
- Google Gemini - Gemini Pro
Configuração Automática
- Tokens do Ambiente - Carregamento automático
- Drag & Drop - Reordenação visual
- Fallback Automático - Troca de provedor
- Auto-save - Salvamento automático
Comportamento do Bot
Configurações Disponíveis
Resposta a Usuários:
- Responder a usuários: Ativa/desativa respostas para contatos individuais
- Responder a grupos: Ativa/desativa respostas em grupos
- Gatilhos para grupos: Palavras-chave que ativam o bot (#geni, #ai, #bot)
Configurações Avançadas:
- Prompt do sistema: Personalize o comportamento da IA
- Cooldown: Tempo entre respostas (segundos)
- Provedor padrão: Primeiro da lista ordenada
Endpoints da API
Endpoints de IA
| Método | Endpoint | Descrição | Permissão |
|---|---|---|---|
| GET | /api/ai/config |
Obter configuração de IA | Super Admin |
| POST | /api/ai/config |
Atualizar configuração de IA | Super Admin |
| PUT | /api/ai/providers/:id |
Atualizar provedor específico | Super Admin |
| POST | /api/ai/providers/reorder |
Reordenar provedores | Super Admin |
| POST | /api/ai/test |
Testar funcionalidade de IA | Super Admin |
| GET | /api/ai/stats |
Obter estatísticas de uso | Super Admin |
Exemplo de Configuração
Estrutura de Configuração
{
"enabled": true,
"defaultProvider": "openai",
"providers": [
{
"id": "openai",
"name": "OpenAI",
"enabled": true,
"order": 1,
"apiKey": "sk-...",
"model": "gpt-3.5-turbo",
"maxTokens": 1000,
"temperature": 0.7,
"baseUrl": "https://api.openai.com/v1"
}
],
"botConfig": {
"respondToUsers": true,
"respondToGroups": true,
"groupTriggers": ["#geni", "#ai", "#bot"],
"systemPrompt": "Você é um assistente inteligente...",
"cooldownSeconds": 5
}
}
API REST
Formato da API de Envio
O endpoint POST /api/send espera os seguintes campos:
- phone: Número do telefone (formato: 556792385008)
- type: Tipo da mensagem (text, image, video, audio, document, location)
- message: Texto da mensagem (obrigatório para tipo 'text')
- media: URL da mídia (obrigatório para tipos de mídia)
- location: Objeto com latitude, longitude, name, address (para tipo 'location')
Exemplo: {"phone": "556792385008", "type": "text", "message": "Olá!"}
Teste Interativo - Envio de Mensagens
Teste o envio de mensagens usando o token JWT obtido no login.
Enviar Mensagem de Texto
Enviar Mídia
Teste Rápido de Endpoints de Mensagem:
Testes Rápidos - Todos os Endpoints
Teste todos os endpoints da API com dados pré-configurados.
Configurações de Teste
URLs de Mídia Padrão
Vídeo: https://thiper.com.br/wp-content/uploads/2024/12/lasvegas-dourados-ms.mp4
Áudio: https://thiper.com.br/wp-content/uploads/2024/05/Abracadabra.mp3
Documento: https://thiper.com.br/wp-content/uploads/2020/05/Show-Proposta06052020.pdf
Testes de Autenticação
Testes de Sessões WhatsApp
Testes de Envio de Mensagens
Testes de Contatos e Grupos
Testes de Campanhas
Testes de Usuários (Admin)
Testes de Webhooks
Testes de Estatísticas
Testes de Inteligência Artificial
Teste e configure os provedores de IA disponíveis no sistema.
Informações sobre IA
- Provedores: 8 provedores de IA configurados (OpenAI, Groq, DeepSeek, etc.)
- Fallback: Sistema automático de fallback entre provedores
- Configuração: Ative/desative provedores e configure API Keys
- Controle por Contato: Desabilite IA para contatos específicos
- Handover Humano: Detecção automática quando humano assume conversa
- Delay de Digitação: Simula digitação real antes de responder
Configuração de IA
Controle de Contatos
• IA responde automaticamente até humano assumir
• Detecção automática de handover humano
• Controle individual por contato
• Reset disponível para futuros atendimentos
Provedores de IA
Testes CRUD de IA
Gerenciamento de Provedores de IA
Carregando provedores de IA...
Teste de Conexão WebSocket
Testes Avançados - Envio Real de Mensagens
Teste o sistema enviando mensagens reais para um número específico. Configure a sessão, número de destino e tipos de mensagem, então execute os testes.
Informações sobre os Testes Automáticos
- Testes Seguros: Apenas operações de leitura (GET) que não causam problemas
- Testes de Criação/Deleção: 20 operações que criam e deletam recursos (incluindo sessões, usuários e campanhas)
- Testes Avançados: Envio real de mensagens para número específico (texto, mídia, localização e campanhas)
- Timeout: Cada teste tem limite de 10 segundos para evitar travamentos
- Tratamento de Erros: Erros são capturados e exibidos no relatório sem travar o servidor
- Progresso: Você pode acompanhar o progresso em tempo real
Configuração de Testes Avançados
Autenticação por Token
Cada usuário possui um token único para autenticação na API REST. O token pode ser obtido:
- No painel administrativo ao editar um usuário
- Através do endpoint de login (campo
apiToken) - Pode ser regenerado a qualquer momento
Como usar o token:
X-API-Token: rd_user_1234567890_abc123def456Query Parameter:
?token=rd_user_1234567890_abc123def456
Envio de Mensagens
POST /api/send- Para uso na interface web (requer JWT token)POST /api/send-message- Para uso via API REST (requer API token)
Enviar qualquer tipo de mensagem via API REST
Parâmetros:
sessionName(obrigatório) - Nome da sessão WhatsAppto(obrigatório) - Destinatário (número ou ID do grupo)type- Tipo da mensagem (text, image, audio, video, document, location)message- Texto da mensagem (para tipo text)mediaUrl- URL da mídia (para tipos image, audio, video, document)caption- Legenda da mídialocation- Objeto com latitude, longitude, description (para tipo location)
Formatos de Mídia Suportados:
- Imagens: JPG, PNG, GIF, WebP
- Áudios: MP3, WAV, OGG, M4A
- Vídeos: MP4, AVI, MOV, WebM
- Documentos: PDF, DOC, DOCX, TXT, XLS, XLSX
Envio de Áudio - Opções Especiais:
POST /api/send com o parâmetro liveAudio: true.
Exemplo - Mensagem de Texto:
{
"sessionName": "minha-sessao",
"to": "5511999999999@c.us",
"type": "text",
"message": "Olá! Esta é uma mensagem via API REST."
}
Exemplo - Imagem:
{
"sessionName": "minha-sessao",
"to": "5511999999999@c.us",
"type": "image",
"mediaUrl": "https://example.com/image.jpg",
"caption": "Veja esta imagem!"
}
Exemplo - Áudio:
{
"sessionName": "minha-sessao",
"to": "5511999999999@c.us",
"type": "audio",
"mediaUrl": "https://example.com/audio.mp3",
"caption": "Escute este áudio!"
}
Exemplo - Vídeo:
{
"sessionName": "minha-sessao",
"to": "5511999999999@c.us",
"type": "video",
"mediaUrl": "https://example.com/video.mp4",
"caption": "Veja este vídeo!"
}
Exemplo - Documento:
{
"sessionName": "minha-sessao",
"to": "5511999999999@c.us",
"type": "document",
"mediaUrl": "https://example.com/document.pdf",
"caption": "Aqui está o documento que você pediu"
}
Exemplo - Localização:
{
"sessionName": "minha-sessao",
"to": "5511999999999@c.us",
"type": "location",
"location": {
"latitude": -23.5505,
"longitude": -46.6333,
"description": "São Paulo, SP"
}
}
Resposta de Sucesso (Fila):
{
"success": true,
"message": "Mensagem adicionada à fila de envio",
"queueId": "msg_1705320600000_abc123def456",
"timestamp": "2024-01-15T10:30:00.000Z",
"session": "minha-sessao",
"to": "5511999999999@c.us",
"type": "text",
"status": "queued"
}
Listar Sessões do Usuário
Listar todas as sessões do usuário autenticado
Resposta:
{
"success": true,
"sessions": [
{
"name": "minha-sessao",
"status": "connected",
"userId": "user_1234567890",
"createdAt": "2024-01-15T10:00:00.000Z"
}
],
"total": 1
}
Regenerar Token
Regenerar token da API para o usuário autenticado
Resposta:
{
"success": true,
"message": "Token gerado/regenerado com sucesso",
"apiToken": "rd_user_1234567890_newtoken123"
}
Sistema de Fila
Verificar Status da Fila
Verificar status da fila de mensagens de uma sessão
Resposta:
{
"success": true,
"sessionName": "minha-sessao",
"queue": [
{
"id": "msg_1705320600000_abc123def456",
"to": "5511999999999@c.us",
"type": "text",
"status": "pending",
"attempts": 0,
"maxAttempts": 3,
"createdAt": "2024-01-15T10:30:00.000Z",
"error": null,
"messageId": null
}
],
"total": 1,
"isProcessing": false,
"pending": 1,
"processing": 0,
"sent": 0,
"failed": 0
}
Limpar Fila
Limpar todas as mensagens pendentes da fila
Resposta:
{
"success": true,
"message": "Fila limpa com sucesso",
"clearedCount": 5,
"sessionName": "minha-sessao"
}
Exemplos Práticos
Exemplo 1: Enviar Mensagem de Texto
curl -X POST http://localhost:3000/api/send-message \
-H "X-API-Token: rd_admin_1234567890_abc123def456" \
-H "Content-Type: application/json" \
-d '{
"sessionName": "geni",
"to": "5511999999999@c.us",
"type": "text",
"message": "Olá! Esta é uma mensagem via API REST."
}'
Exemplo 2: Enviar Imagem com Legenda
curl -X POST http://localhost:3000/api/send-message \
-H "X-API-Token: rd_admin_1234567890_abc123def456" \
-H "Content-Type: application/json" \
-d '{
"sessionName": "geni",
"to": "5511999999999@c.us",
"type": "image",
"mediaUrl": "https://example.com/image.jpg",
"caption": "Veja esta imagem incrível!"
}'
Exemplo 3: Enviar Áudio
curl -X POST http://localhost:3000/api/send-message \
-H "X-API-Token: rd_admin_1234567890_abc123def456" \
-H "Content-Type: application/json" \
-d '{
"sessionName": "geni",
"to": "5511999999999@c.us",
"type": "audio",
"mediaUrl": "https://example.com/audio.mp3",
"caption": "Escute este áudio!"
}'
Exemplo 3.1: Enviar Áudio como Mensagem de Voz (Ao Vivo)
curl -X POST http://localhost:3000/api/send \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"phone": "5511999999999",
"type": "audio",
"media": "https://example.com/audio.mp3",
"liveAudio": true
}'
Parâmetros para Áudio ao Vivo:
liveAudio: true- Envia como mensagem de voz (ao vivo)liveAudio: false- Envia como arquivo de áudio normalliveAudionão especificado - Padrão étrue
Exemplo 4: Enviar Vídeo
curl -X POST http://localhost:3000/api/send-message \
-H "X-API-Token: rd_admin_1234567890_abc123def456" \
-H "Content-Type: application/json" \
-d '{
"sessionName": "geni",
"to": "5511999999999@c.us",
"type": "video",
"mediaUrl": "https://example.com/video.mp4",
"caption": "Veja este vídeo!"
}'
Exemplo 5: Enviar Localização
curl -X POST http://localhost:3000/api/send-message \
-H "X-API-Token: rd_admin_1234567890_abc123def456" \
-H "Content-Type: application/json" \
-d '{
"sessionName": "geni",
"to": "5511999999999@c.us",
"type": "location",
"location": {
"latitude": -23.5505,
"longitude": -46.6333,
"description": "São Paulo, SP - Brasil"
}
}'
Exemplo 6: Verificar Status da Fila
curl -X GET http://localhost:3000/api/queue/geni \
-H "X-API-Token: rd_admin_1234567890_abc123def456"
Exemplo 7: JavaScript/Node.js
const axios = require('axios');
const API_BASE = 'http://localhost:3000';
const API_TOKEN = 'rd_admin_1234567890_abc123def456';
// Enviar mensagem
async function sendMessage() {
try {
const response = await axios.post(`${API_BASE}/api/send-message`, {
sessionName: 'geni',
to: '5511999999999@c.us',
type: 'text',
message: 'Mensagem via JavaScript!'
}, {
headers: {
'X-API-Token': API_TOKEN,
'Content-Type': 'application/json'
}
});
console.log('Mensagem enviada:', response.data);
} catch (error) {
console.error('Erro:', error.response.data);
}
}
// Verificar fila
async function checkQueue() {
try {
const response = await axios.get(`${API_BASE}/api/queue/geni`, {
headers: {
'X-API-Token': API_TOKEN
}
});
console.log('Status da fila:', response.data);
} catch (error) {
console.error('Erro:', error.response.data);
}
}
sendMessage();
checkQueue();
- O token da API é único para cada usuário
- Usuários só podem acessar suas próprias sessões (exceto super_admin)
- Regenerar o token invalida o token anterior
- Mantenha o token seguro e não o compartilhe
- Mensagens são processadas em fila com 1 segundo de intervalo
- Máximo de 3 tentativas por mensagem
Todos os Endpoints
Autenticação
/api/fixed-token
/api/auth/login
/api/auth/verify
/api/auth/logout
Sessões
/api/sessions
/api/sessions/active
/api/sessions
/api/sessions/:id/qr
/api/sessions/:id/pause
/api/sessions/:id/resume
/api/sessions/:id
Mensagens
/api/send
Funcionalidades Avançadas
/api/simulate-human-interaction
/api/test-video-url
Campanhas
/api/campaigns
/api/campaigns
/api/campaigns/:id/start
Contatos e Grupos
/api/contacts
/api/groups
/api/public/contacts/:id/photo
/api/public/groups/:id/photo
Grupos de Contatos
/api/contact-groups
/api/contact-groups
Upload
/api/upload
Usuários
/api/admin/users
/api/admin/users
/api/admin/users/:id
/api/admin/users/:id
/api/user/change-password
/api/user/profile
Webhooks
/api/webhook/configure
/api/webhook/config
/api/webhook/test
/api/webhook/disable
Configurar Webhook
POST /api/webhook/configure
Authorization: Bearer 12345
Content-Type: application/json
{
"webhookUrl": "https://seu-servidor.com/webhook",
"events": ["message", "session_status", "connection_status"]
}
Testar Webhook
POST /api/webhook/test
Authorization: Bearer 12345
Resposta:
{
"message": "Teste de webhook enviado com sucesso",
"status": "success",
"responseStatus": 200,
"testData": {
"event": "test",
"timestamp": "2024-01-15T10:30:00.000Z",
"data": {
"message": "Este é um teste do webhook",
"userId": "user123",
"testId": 1705312200000,
"status": "success"
}
}
}
Copiar Todos os Endpoints
Clique no botão acima para copiar todos os endpoints para a área de transferência.
Webhooks
Configurar webhook para receber eventos
Request Body:
{
"webhookUrl": "https://seu-servidor.com/webhook",
"events": ["message", "session_status", "connection_status"]
}
Eventos Disponíveis:
message- Mensagens recebidassession_status- Mudanças no status da sessãoconnection_status- Status de conexão
Response:
{
"message": "Webhook configurado com sucesso",
"webhook": {
"url": "https://seu-servidor.com/webhook",
"events": ["message", "session_status"],
"active": true
}
}
Obter configuração atual do webhook
Response:
{
"webhook": {
"url": "https://seu-servidor.com/webhook",
"events": ["message", "session_status"],
"active": true,
"createdAt": "2024-01-15T10:00:00Z"
}
}
Desativar webhook
Response:
{
"message": "Webhook desativado com sucesso"
}
Formato dos Dados do Webhook
Os webhooks enviam dados no seguinte formato:
{
"event": "message",
"timestamp": "2024-01-15T10:30:00Z",
"data": {
"sessionId": "minha-sessao",
"from": "5511999999999",
"message": "Olá!",
"type": "text"
}
}
Exemplo de Webhook para Mensagem:
{
"event": "message",
"timestamp": "2024-01-15T10:30:00Z",
"data": {
"sessionId": "minha-sessao",
"from": "5511999999999",
"to": "5511888888888",
"message": "Olá! Como posso ajudar?",
"type": "text",
"timestamp": "2024-01-15T10:30:00Z"
}
}
Exemplos de Uso
Exemplo: Enviar Mensagem com JavaScript
// Fazer login
const loginResponse = await fetch('/api/auth/login', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
email: 'contato@thiper.com',
password: '123456'
})
});
const { token } = await loginResponse.json();
// Enviar mensagem
const messageResponse = await fetch('/api/send', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`
},
body: JSON.stringify({
phone: '5511999999999',
type: 'text',
message: 'Olá! Esta é uma mensagem de teste.',
sessionId: 'minha-sessao'
})
});
const result = await messageResponse.json();
console.log('Mensagem enviada:', result);
Exemplo: Criar Usuário (Admin)
// Criar novo usuário (apenas admin)
const createUserResponse = await fetch('/api/admin/users', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${adminToken}`
},
body: JSON.stringify({
email: 'usuario@exemplo.com',
password: 'senha123',
role: 'user',
sessionLimit: 1,
plan: 'active'
})
});
const newUser = await createUserResponse.json();
console.log('Usuário criado:', newUser);
Exemplo: Configurar Webhook
// Configurar webhook
const webhookResponse = await fetch('/api/webhook/configure', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`
},
body: JSON.stringify({
webhookUrl: 'https://seu-servidor.com/webhook',
events: ['message', 'session_status']
})
});
const result = await webhookResponse.json();
console.log('Webhook configurado:', result);
// Exemplo de endpoint para receber webhooks
app.post('/webhook', (req, res) => {
const { event, timestamp, data } = req.body;
console.log(`Evento recebido: ${event}`, data);
if (event === 'message') {
// Processar mensagem recebida
console.log(`Mensagem de ${data.from}: ${data.message}`);
}
res.status(200).json({ received: true });
});