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

Versão 2.0

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
Token Fixo: Use o token 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
Nenhum token disponível
Teste Rápido de Endpoints:
GET /api/fixed-token
Sem autenticação

Obter token fixo de autorização

Response:
{
  "token": "12345"
}
POST /api/auth/login
Sem autenticação

Fazer login no sistema

Request Body:
{
  "email": "contato@thiper.com",
  "password": "123456"
}
Response:
{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "user": {
    "id": "admin",
    "email": "contato@thiper.com",
    "role": "admin"
  }
}
GET /api/auth/verify
Autenticado

Verificar token de autenticação

Headers:
Authorization: Bearer <token>
POST /api/auth/logout
Autenticado

Fazer logout do sistema

Sessões WhatsApp

GET /api/sessions
Autenticado

Listar todas as sessões

Response:
{
  "sessions": [
    {
      "id": "session1",
      "status": "connected",
      "phoneNumber": "+5511999999999",
      "connectedAt": "2024-01-15T10:30:00Z",
      "userId": "admin"
    }
  ]
}
POST /api/sessions
Autenticado

Criar nova sessão

Request Body:
{
  "sessionId": "minha-sessao"
}
GET /api/sessions/:id/qr
Autenticado

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:
  1. Criar uma sessão: Primeiro, crie uma sessão usando POST /api/sessions
  2. Obter o QR code: Use GET /api/sessions/{sessionId}/qr para obter o QR code
  3. Exibir o QR code: O QR code retornado é uma imagem em base64 que pode ser exibida diretamente em uma tag <img>
  4. Escaneamento: O usuário deve escanear o QR code com o WhatsApp no celular
  5. Verificar conexão: Use GET /api/sessions para 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
POST /api/sessions/:id/pause
Autenticado

Pausar sessão

POST /api/sessions/:id/resume
Autenticado

Retomar sessão

GET /api/sessions/active
Autenticado

Obter primeira sessão ativa

DELETE /api/sessions/:id
Autenticado

Deletar sessão

POST /api/sessions/cleanup-orphaned
Super Admin

Limpar sessões órfãs

GET /api/profile-photo/:phoneNumber
Autenticado

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');
}
Nota: Este endpoint usa qualquer sessão ativa disponível para obter a foto. O número será formatado automaticamente para o formato correto do WhatsApp.
Teste Interativo:
GET /api/sessions/:id/profile-photo
Autenticado

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');
}
Nota: A foto só será retornada se o usuário da sessão tiver uma foto de perfil configurada e as configurações de privacidade permitirem o acesso.
Teste Interativo:
GET /api/session-info/:id
Autenticado

Obter informações detalhadas da sessão

Mensagens

POST /api/send
Autenticado

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.

GET /api/contacts
Autenticado

Listar contatos

Query Parameters:
  • sessionId (opcional): ID da sessão específica
GET /api/groups
Autenticado

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

POST /api/simulate-human-interaction
Autenticado

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
  }
}
POST /api/test-video-url
Autenticado

Validar URL de vídeo antes do envio

Request Body:
{
  "url": "https://exemplo.com/video.mp4"
}

Campanhas

Sistema de Campanhas: Crie e gerencie campanhas de marketing com múltiplos destinatários.
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 8601
  • recipients: Array de números de telefone com @c.us
  • type: "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 ativos
  • POST /api/ai/attendances/{contactId}/pause - Pausar atendimento
  • POST /api/ai/attendances/{contactId}/resume - Retomar atendimento
  • POST /api/ai/attendances/{contactId}/stop - Parar atendimento
  • POST /api/ai/attendances/pause-all - Pausar todos
  • POST /api/ai/attendances/resume-all - Retomar todos
POST /api/campaigns
Autenticado

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"
}
GET /api/campaigns
Autenticado

Listar todas as campanhas

POST /api/campaigns/:id/start
Autenticado

Iniciar campanha

GET /api/campaigns/:id/stats
Autenticado

Obter estatísticas da campanha

Grupos de Contatos

POST /api/contact-groups
Autenticado

Criar grupo de contatos

Request Body:
{
  "name": "Clientes VIP",
  "description": "Grupo de clientes com prioridade",
  "contacts": [
    "5511999999999",
    "5511888888888"
  ],
  "tags": ["vip", "premium"]
}
GET /api/contact-groups
Autenticado

Listar grupos de contatos

Upload de Arquivos

POST /api/upload
Autenticado

Upload de arquivo

Request:
Content-Type: multipart/form-data
file: [arquivo selecionado]

Gerenciamento de Usuários

Atenção: Estes endpoints são exclusivos para usuários com role 'admin'.
GET /api/admin/users
Admin

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"
    }
  ]
}
POST /api/admin/users
Admin

Criar novo usuário

Request Body:
{
  "email": "usuario@exemplo.com",
  "password": "senha123",
  "role": "user",
  "sessionLimit": 1,
  "plan": "active"
}
PUT /api/admin/users/:id
Admin

Atualizar usuário

Request Body:
{
  "email": "usuario@exemplo.com",
  "role": "user",
  "sessionLimit": 2,
  "plan": "active",
  "active": true
}
DELETE /api/admin/users/:id
Admin

Deletar usuário

Cuidado: Esta ação não pode ser desfeita e irá deletar todos os dados do usuário.
GET /api/user/profile
Autenticado

Obter perfil do usuário atual

Logs do Sistema

Logs em Tempo Real: Visualize logs do servidor, mensagens enviadas e recebidas em tempo real.
Logs do Servidor
Clique em "Iniciar" para ver os logs em tempo real...
Mensagens Enviadas
Nenhuma mensagem enviada ainda...
Mensagens Recebidas
Nenhuma mensagem recebida ainda...
Nova Funcionalidade: Sistema de IA integrado com múltiplos provedores e configuração avançada.

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
  }
}
Importante: A configuração de IA é restrita a usuários com role 'super_admin'. Certifique-se de ter as permissões adequadas antes de tentar acessar estes endpoints.

API REST

Nova Funcionalidade: API REST para envio de mensagens com autenticação por token.
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á!"}

Reconexão Automática: Se a sessão WhatsApp estiver desconectada, o sistema tentará reconectar automaticamente. Em caso de erro 503, aguarde alguns segundos e tente novamente.

Teste Interativo - Envio de Mensagens

Teste o envio de mensagens usando o token JWT obtido no login.

Enviar Mensagem de Texto
Formato: 556792385008 (sem +, espaços ou caracteres especiais)
Enviar Mídia
Formato: 556792385008 (sem +, espaços ou caracteres especiais)
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
Imagem: https://thiper.com.br/wp-content/uploads/2024/03/ilusionistaSD.webp
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
Controle Inteligente:
• 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
Carregando provedores...
Testes CRUD de IA
Gerenciamento de Provedores de IA
Carregando provedores...

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:

Como usar o token:

Header (Recomendado):
X-API-Token: rd_user_1234567890_abc123def456

Query Parameter:
?token=rd_user_1234567890_abc123def456

Envio de Mensagens

Importante: Existem dois endpoints para 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)
POST /api/send-message Token API

Enviar qualquer tipo de mensagem via API REST

Parâmetros:
  • sessionName (obrigatório) - Nome da sessão WhatsApp
  • to (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ídia
  • location - 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:
Áudio como Mensagem de Voz: Para enviar áudio como se fosse gravado ao vivo (mensagem de voz), use o endpoint POST /api/send com o parâmetro liveAudio: true.
Dica: URLs de mídia devem ser acessíveis publicamente e não podem exceder 50MB.
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

GET /api/my-sessions Token API

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

POST /api/regenerate-token JWT 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

Sistema de Fila: Todas as mensagens são processadas em fila para garantir entrega ordenada e evitar spam.

Verificar Status da Fila

GET /api/queue/:sessionName Token API

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

DELETE /api/queue/:sessionName Token API

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:
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:
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:
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)

Via Interface Web (POST /api/send):
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 normal
  • liveAudio não especificado - Padrão é true

Exemplo 4: Enviar Vídeo

cURL:
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:
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:
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();
Importante:
  • 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

Lista Completa: Todos os endpoints disponíveis na API organizados por categoria.

Autenticação

GET /api/fixed-token
Token fixo
POST /api/auth/login
Login
GET /api/auth/verify
Verificar token
POST /api/auth/logout
Logout

Sessões

GET /api/sessions
Listar sessões
GET /api/sessions/active
Primeira sessão ativa
POST /api/sessions
Criar sessão
GET /api/sessions/:id/qr
Obter QR Code
POST /api/sessions/:id/pause
Pausar sessão
POST /api/sessions/:id/resume
Retomar sessão
DELETE /api/sessions/:id
Deletar sessão

Mensagens

POST /api/send
Enviar mensagem

Funcionalidades Avançadas

POST /api/simulate-human-interaction
Simular interação humana
POST /api/test-video-url
Validar URL de vídeo

Campanhas

POST /api/campaigns
Criar campanha
GET /api/campaigns
Listar campanhas
POST /api/campaigns/:id/start
Iniciar campanha

Contatos e Grupos

GET /api/contacts
Listar contatos
GET /api/groups
Listar grupos
GET /api/public/contacts/:id/photo
Foto do contato
GET /api/public/groups/:id/photo
Foto do grupo

Grupos de Contatos

POST /api/contact-groups
Criar grupo
GET /api/contact-groups
Listar grupos

Upload

POST /api/upload
Upload de arquivo

Usuários

GET /api/admin/users
Listar usuários
POST /api/admin/users
Criar usuário
PUT /api/admin/users/:id
Atualizar usuário
DELETE /api/admin/users/:id
Deletar usuário
PUT /api/user/change-password
Trocar senha
GET /api/user/profile
Perfil do usuário

Webhooks

POST /api/webhook/configure
Configurar webhook
GET /api/webhook/config
Obter configuração
POST /api/webhook/test
Testar webhook
DELETE /api/webhook/disable
Desativar webhook
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

Webhooks: Configure URLs para receber notificações em tempo real sobre eventos do WhatsApp.
POST /api/webhook/configure
Autenticado

Configurar webhook para receber eventos

Request Body:
{
  "webhookUrl": "https://seu-servidor.com/webhook",
  "events": ["message", "session_status", "connection_status"]
}
Eventos Disponíveis:
  • message - Mensagens recebidas
  • session_status - Mudanças no status da sessão
  • connection_status - Status de conexão
Response:
{
  "message": "Webhook configurado com sucesso",
  "webhook": {
    "url": "https://seu-servidor.com/webhook",
    "events": ["message", "session_status"],
    "active": true
  }
}
GET /api/webhook/config
Autenticado

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"
    }
}
DELETE /api/webhook/disable
Autenticado

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 });
});