Skip to main content
GET
/
api
/
campaigns
/
{id}
curl -X GET https://api.disparador.com/api/campaigns/123 \
  -H "X-Access-Token: seu-access-token"
{
  "id": 123,
  "name": "Promoção Black Friday",
  "description": null,
  "status": "ACTIVE",
  "type": "MEDIA",
  "createdAt": "2024-01-20T14:00:00",
  "scheduledFor": null,
  "startedAt": "2024-01-20T14:01:00",
  "completedAt": null,
  "pausedAt": null,
  "totalContacts": 500,
  "sentContacts": 234,
  "failedContacts": 5,
  "pendingContacts": 261,
  "progressPercentage": 46.8,
  "successRate": 97.86,
  "estimatedCompletion": "2024-01-20T16:30:00",
  "messageContent": "🎉 Black Friday chegou! Até 70% OFF em todos os produtos. Acesse: www.exemplo.com",
  "mediaType": "image",
  "mediaUrl": "https://exemplo.com/black-friday.jpg",
  "fileName": "black-friday-promo.jpg",
  "evolutionInstance": "whatsapp-01",
  "minInterval": 5,
  "maxInterval": 10,
  "notificationPhone": "5511999999999",
  "pollData": null,
  "evolutionConfig": {
    "id": 1,
    "name": "WhatsApp Principal",
    "url": "https://evolution-api.exemplo.com",
    "instance": "whatsapp-01"
  }
}
Retorna todos os detalhes de uma campanha específica, incluindo estatísticas de envio em tempo real.

Headers

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

Path Parameters

id
number
required
ID da campanha
curl -X GET https://api.disparador.com/api/campaigns/123 \
  -H "X-Access-Token: seu-access-token"

Response

A estrutura de resposta inclui todos os detalhes da campanha:

Campos Principais

id
number
ID único da campanha
name
string
Nome da campanha
description
string
Descrição da campanha
status
string
Status atual da campanha
  • DRAFT - Rascunho
  • SCHEDULED - Agendada
  • ACTIVE - Em execução
  • PAUSED - Pausada
  • COMPLETED - Concluída
  • CANCELLED - Cancelada
  • FAILED - Falhou
type
string
Tipo da campanha (TEXT, MEDIA, POLL)
createdAt
string
Data/hora de criação
scheduledFor
string
Data/hora de agendamento (se aplicável)
startedAt
string
Data/hora que iniciou o envio
completedAt
string
Data/hora que foi concluída
pausedAt
string
Data/hora que foi pausada (se aplicável)

Estatísticas

totalContacts
number
Total de contatos na campanha
sentContacts
number
Quantidade de mensagens enviadas com sucesso
failedContacts
number
Quantidade de envios que falharam
pendingContacts
number
Quantidade de contatos pendentes
progressPercentage
number
Percentual de progresso (0-100)
successRate
number
Taxa de sucesso em percentual
estimatedCompletion
string
Estimativa de conclusão (se em execução)

Dados da Campanha

messageContent
string
Conteúdo da mensagem enviada
mediaType
string
Tipo de mídia (image, video, audio, document)
mediaUrl
string
URL da mídia anexada
fileName
string
Nome do arquivo de mídia
evolutionInstance
string
Instância Evolution usada
minInterval
number
Intervalo mínimo entre mensagens (segundos)
maxInterval
number
Intervalo máximo entre mensagens (segundos)
notificationPhone
string
Telefone para notificação de conclusão
pollData
object
Dados da enquete (se for campanha de enquete)
evolutionConfig
object
Configuração Evolution completa usada
message
string
Mensagem de erro (apenas em caso de falha)
{
  "id": 123,
  "name": "Promoção Black Friday",
  "description": null,
  "status": "ACTIVE",
  "type": "MEDIA",
  "createdAt": "2024-01-20T14:00:00",
  "scheduledFor": null,
  "startedAt": "2024-01-20T14:01:00",
  "completedAt": null,
  "pausedAt": null,
  "totalContacts": 500,
  "sentContacts": 234,
  "failedContacts": 5,
  "pendingContacts": 261,
  "progressPercentage": 46.8,
  "successRate": 97.86,
  "estimatedCompletion": "2024-01-20T16:30:00",
  "messageContent": "🎉 Black Friday chegou! Até 70% OFF em todos os produtos. Acesse: www.exemplo.com",
  "mediaType": "image",
  "mediaUrl": "https://exemplo.com/black-friday.jpg",
  "fileName": "black-friday-promo.jpg",
  "evolutionInstance": "whatsapp-01",
  "minInterval": 5,
  "maxInterval": 10,
  "notificationPhone": "5511999999999",
  "pollData": null,
  "evolutionConfig": {
    "id": 1,
    "name": "WhatsApp Principal",
    "url": "https://evolution-api.exemplo.com",
    "instance": "whatsapp-01"
  }
}

Monitoramento em Tempo Real

// Função para monitorar progresso da campanha
async function monitorCampaign(campaignId, accessToken) {
  const checkProgress = async () => {
    const response = await fetch(
      `https://api.disparador.com/api/campaigns/${campaignId}`,
      {
        headers: { 'X-Access-Token': accessToken }
      }
    );
    
    const campaign = await response.json();
    
    if (campaign.status === 'ACTIVE') {
      console.log(`[${new Date().toLocaleTimeString()}] ${campaign.name}`);
      console.log(`Status: ${campaign.status}`);
      console.log(`Progresso: ${campaign.progressPercentage}% (${campaign.sentContacts}/${campaign.totalContacts})`);
      console.log(`Taxa de sucesso: ${campaign.successRate}%`);
      console.log(`Falhas: ${campaign.failedContacts}`);
      console.log(`Estimativa de conclusão: ${campaign.estimatedCompletion || 'Calculando...'}`);
      console.log('---');
      
      // Continuar monitorando
      setTimeout(checkProgress, 30000); // 30 segundos
    } else {
      console.log(`Campanha finalizada com status: ${campaign.status}`);
      console.log(`Total enviado: ${campaign.sentContacts}`);
      console.log(`Taxa de sucesso final: ${campaign.successRate}%`);
    }
  };
  
  checkProgress();
}

// Usar
monitorCampaign(123, 'seu-access-token');

Cálculo de Métricas

function calculateCampaignMetrics(campaign) {
  const metrics = {
    successRate: campaign.successRate || 0,
    failureRate: 0,
    progress: campaign.progressPercentage || 0,
    estimatedTimeRemaining: null,
    messagesPerMinute: 0
  };
  
  // Taxa de falha
  if (campaign.sentContacts > 0) {
    metrics.failureRate = (campaign.failedContacts / campaign.sentContacts * 100).toFixed(2);
  }
  
  // Velocidade de envio
  if (campaign.startedAt && campaign.sentContacts > 0) {
    const elapsedMinutes = (new Date() - new Date(campaign.startedAt)) / 60000;
    metrics.messagesPerMinute = (campaign.sentContacts / elapsedMinutes).toFixed(2);
    
    // Tempo restante estimado
    const remaining = campaign.pendingContacts;
    if (metrics.messagesPerMinute > 0) {
      metrics.estimatedTimeRemaining = Math.ceil(remaining / metrics.messagesPerMinute);
    }
  }
  
  return metrics;
}

// Exemplo de uso
const metrics = calculateCampaignMetrics(campaign);
console.log(`Mensagens por minuto: ${metrics.messagesPerMinute}`);
console.log(`Tempo restante estimado: ${metrics.estimatedTimeRemaining} minutos`);

Observações

  • A campanha deve pertencer à empresa do token para ser acessada
  • As estatísticas são atualizadas em tempo real durante o envio
  • Campanhas antigas mantêm o histórico completo de execução
  • A estimativa de conclusão é calculada com base na velocidade média de envio
I