Skip to main content
GET
/
api
/
campaigns
/
active

Visão Geral

Este endpoint retorna uma lista de todas as campanhas que estão atualmente ativas (status ACTIVE). É útil para monitorar campanhas em andamento e gerenciar operações ativas.

Requisitos

  • Token de acesso válido
  • Permissão para visualizar campanhas da empresa

Cabeçalhos

X-Access-Token
string
required
Token de acesso da empresa

Exemplos de Uso

cURL

curl -X GET https://api.disparador.com/api/campaigns/active \
  -H "X-Access-Token: seu_token_aqui"

JavaScript

const response = await fetch('https://api.disparador.com/api/campaigns/active', {
  headers: {
    'X-Access-Token': 'seu_token_aqui'
  }
});

const activeCampaigns = await response.json();
console.log(`${activeCampaigns.length} campanhas ativas encontradas`);

Python

import requests

url = "https://api.disparador.com/api/campaigns/active"
headers = {
    "X-Access-Token": "seu_token_aqui"
}

response = requests.get(url, headers=headers)
campaigns = response.json()

for campaign in campaigns:
    print(f"{campaign['name']} - Status: {campaign['status']}")

PHP

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.disparador.com/api/campaigns/active");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'X-Access-Token: seu_token_aqui'
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
$campaigns = json_decode($response, true);

foreach ($campaigns as $campaign) {
    echo $campaign['name'] . " - " . $campaign['status'] . "\n";
}

Resposta

Sucesso (200 OK)

Retorna um array de campanhas ativas, cada uma com a mesma estrutura completa dos outros endpoints:
[
  {
    "id": 123,
    "name": "Promoção Black Friday",
    "description": null,
    "status": "ACTIVE",
    "type": "TEXT",
    "createdAt": "2024-01-20T10:00:00",
    "scheduledFor": null,
    "startedAt": "2024-01-20T10:00:00",
    "completedAt": null,
    "pausedAt": null,
    "totalContacts": 500,
    "sentContacts": 245,
    "failedContacts": 5,
    "pendingContacts": 250,
    "progressPercentage": 50.0,
    "successRate": 98.0,
    "estimatedCompletion": "2024-01-20T14:30:00",
    "messageContent": "⚡ Oferta válida apenas hoje!",
    "mediaType": null,
    "mediaUrl": null,
    "fileName": null,
    "evolutionInstance": "whatsapp-01",
    "minInterval": 5,
    "maxInterval": 10,
    "notificationPhone": null,
    "pollData": null,
    "evolutionConfig": {
      "id": 1,
      "name": "WhatsApp Principal",
      "url": "https://evolution-api.exemplo.com",
      "instance": "whatsapp-01"
    }
  },
  {
    "id": 124,
    "name": "Campanha com Mídia",
    "description": null,
    "status": "ACTIVE",
    "type": "MEDIA",
    "createdAt": "2024-01-20T14:00:00",
    "scheduledFor": null,
    "startedAt": "2024-01-20T14:00:00",
    "completedAt": null,
    "pausedAt": null,
    "totalContacts": 1000,
    "sentContacts": 600,
    "failedContacts": 10,
    "pendingContacts": 390,
    "progressPercentage": 61.0,
    "successRate": 98.4,
    "estimatedCompletion": "2024-01-20T16:30:00",
    "messageContent": "Confira nossa nova coleção!",
    "mediaType": "image",
    "mediaUrl": "https://exemplo.com/colecao.jpg",
    "fileName": "nova-colecao.jpg",
    "evolutionInstance": "whatsapp-01",
    "minInterval": 3,
    "maxInterval": 8,
    "notificationPhone": "5511999999999",
    "pollData": null,
    "evolutionConfig": {
      "id": 1,
      "name": "WhatsApp Principal",
      "url": "https://evolution-api.exemplo.com",
      "instance": "whatsapp-01"
    }
  }
]

Campos da Resposta

A estrutura de resposta é idêntica ao endpoint /api/campaigns, incluindo:

Campos Principais

  • id - ID único da campanha
  • name - Nome da campanha
  • description - Descrição da campanha
  • status - Status atual (sempre ACTIVE neste endpoint)
  • type - Tipo da campanha (TEXT, MEDIA, POLL)
  • createdAt - Data/hora de criação
  • startedAt - Data/hora de início
  • pausedAt - Data/hora da pausa (se aplicável)

Estatísticas

  • totalContacts - Total de contatos
  • sentContacts - Mensagens enviadas
  • failedContacts - Mensagens falhadas
  • pendingContacts - Mensagens pendentes
  • progressPercentage - Progresso em percentual
  • successRate - Taxa de sucesso
  • estimatedCompletion - Estimativa de conclusão

Dados da Campanha

  • messageContent - Conteúdo da mensagem
  • mediaType - Tipo de mídia
  • mediaUrl - URL da mídia
  • fileName - Nome do arquivo
  • evolutionInstance - Instância Evolution
  • minInterval - Intervalo mínimo
  • maxInterval - Intervalo máximo
  • notificationPhone - Telefone de notificação
  • pollData - Dados da enquete
  • evolutionConfig - Configuração Evolution completa

Casos de Uso

1. Dashboard de Monitoramento

async function updateDashboard() {
  const campaigns = await fetch('/api/campaigns/active', {
    headers: { 'X-Access-Token': token }
  }).then(r => r.json());

  // Calcular estatísticas totais
  const totalMessages = campaigns.reduce((sum, c) => sum + c.totalContacts, 0);
  const sentMessages = campaigns.reduce((sum, c) => sum + c.sentContacts, 0);
  const avgProgress = campaigns.reduce((sum, c) => sum + c.progressPercentage, 0) / campaigns.length;

  console.log(`Campanhas ativas: ${campaigns.length}`);
  console.log(`Mensagens totais: ${totalMessages}`);
  console.log(`Mensagens enviadas: ${sentMessages}`);
  console.log(`Progresso médio: ${avgProgress.toFixed(2)}%`);

  // Atualizar UI
  updateProgressBars(campaigns);
}

2. Monitoramento de Performance

async function monitorPerformance() {
  const campaigns = await getCampaignsActive();
  
  for (const campaign of campaigns) {
    if (campaign.successRate < 90) {
      sendAlert(`Campanha "${campaign.name}" com taxa de sucesso baixa: ${campaign.successRate}%`);
    }
    
    if (campaign.failedContacts > 50) {
      sendAlert(`Campanha "${campaign.name}" com muitas falhas: ${campaign.failedContacts}`);
    }
  }
}

3. Estimativa de Recursos

async function estimateSystemLoad() {
  const campaigns = await getCampaignsActive();
  
  const totalPending = campaigns.reduce(
    (sum, c) => sum + c.pendingContacts, 0
  );
  
  // Calcular tempo médio por mensagem baseado no progresso atual
  const activeCampaigns = campaigns.filter(c => c.progressPercentage > 0);
  const avgTimePerMessage = calculateAverageTime(activeCampaigns);
  
  const estimatedTime = (totalPending * avgTimePerMessage) / 60; // em minutos
  
  console.log(`Mensagens pendentes: ${totalPending}`);
  console.log(`Tempo estimado total: ${estimatedTime.toFixed(0)} minutos`);
}

4. Relatório de Performance em Tempo Real

async function generateLiveReport() {
  const campaigns = await getCampaignsActive();
  
  const report = campaigns.map(campaign => ({
    nome: campaign.name,
    tipo: campaign.type,
    progresso: `${campaign.progressPercentage}%`,
    sucesso: `${campaign.successRate}%`,
    enviadas: `${campaign.sentContacts}/${campaign.totalContacts}`,
    eta: campaign.estimatedCompletion || 'Calculando...'
  }));
  
  return report;
}

Observações

Filtragem Automática:
  • Apenas campanhas com status ACTIVE são retornadas
  • Campanhas pausadas, agendadas, concluídas ou canceladas não aparecem
  • A lista é ordenada por data de criação (mais recentes primeiro)
Performance:
  • Para empresas com muitas campanhas ativas, considere implementar paginação
  • As estatísticas são calculadas em tempo real e podem impactar a performance
  • Use este endpoint com moderação em loops ou polling frequente

Diferenças do Endpoint /api/campaigns

Característica/api/campaigns/api/campaigns/active
FiltrosAceita parâmetro statusFiltra automaticamente por ACTIVE
Campanhas incluídasTodasApenas status ACTIVE
PerformancePode ser mais lentoOtimizado para campanhas ativas
Uso recomendadoListagem completaMonitoramento em tempo real
I