Logotipo Hedhog

Receba novidades do Hedhog no seu e-mail

Novos lançamentos, receitas e breaking changes — sem spam.

Submódulo Campaign

campaigns

CRUD principal de campanhas mais ações de ciclo de vida: agendar, iniciar, pausar, retomar, cancelar e duplicar.

Caminho de origem: libraries/campaign/src/services/campaign.service.ts, campaign-dispatch.service.ts, campaign-dashboard.service.ts, campaign-event.service.ts

Arquivo do módulo: campaign.module.ts

Introdução

O submódulo Campaigns é dono do próprio registro `campaign`: seu conteúdo (assunto, corpo em HTML/texto simples, referência opcional a um template), sua lista de destinatários, seu perfil de entrega e sua máquina de estados de ciclo de vida. Uma campanha é criada com status `draft` e avança por `scheduled` → `sending` → `completed` (ou `paused`, `canceled`, `failed`) à medida que o CampaignDispatchService a conduz adiante. Apenas campanhas com status `draft`, `canceled` ou `failed` podem ser excluídas, o que protege os dados históricos de entrega de tudo o que realmente já foi enviado.

Iniciar uma campanha (`POST /campaign/:id/start`, com alias em `/send`) é a operação mais complexa do módulo. O CampaignDispatchService primeiro valida que a campanha possui um perfil de entrega de e-mail (um Integration Profile), uma lista de destinatários e conteúdo não vazio e — quando a configuração `campaign.unsubscribe.required` está habilitada — que o conteúdo inclui o placeholder `{{unsubscribeUrl}}`. Em seguida, ele carrega a lista de destinatários, deduplica por e-mail normalizado e faz o cruzamento com a lista global de supressão antes mesmo de tocar o banco de dados em uma transação de escrita. Dentro de uma única transação, ele faz upsert de uma linha `campaign_message` por destinatário elegível (pulando os suprimidos/descadastrados/com bounce como `skipped` e reaproveitando linhas que já existem para evitar duplicar envios em andamento na retomada), depois atualiza os contadores da campanha e muda o status para `sending`. Somente após o commit da transação é que ele enfileira um job de fila por mensagem pendente via `CampaignEmailWorkerService` — ou, se `campaign.queue.enabled` estiver desligado, envia cada mensagem de forma inline e síncrona dentro da mesma requisição, reportando o progresso por destinatário através de um registro de Notification.

Pausar e retomar afetam apenas o status da campanha; as mensagens subjacentes e seus jobs de fila são deixados intactos, de modo que uma campanha retomada continua de onde a fila em andamento parou, em vez de reenfileirar mensagens já enviadas. Cancelar define `status: canceled`, que o worker lê no momento do envio para pular as mensagens restantes sem excluí-las. Duplicar cria um novo rascunho a partir do conteúdo e da configuração de uma campanha existente, redefinindo explicitamente cada contador de entrega, timestamp e o agendamento, para que a cópia comece limpa.

O dashboard global (`GET /campaign/dashboard`) e o dashboard por campanha (`GET /campaign/:id/dashboard`) são endpoints de agregação somente leitura respaldados pelo CampaignDashboardService: contagens de status em todas as campanhas, mensagens enviadas hoje, backlog pendente/enfileirado, contagens de falhas nas últimas 24h, totais de supressão/descadastramento e um histórico de envios agrupado por dia dos últimos 7/30 dias, além do contexto de rate-limit (cota diária e capacidade restante) fornecido pelo CampaignRateLimitService. O `GET /campaign/:id/status` é uma combinação mais leve do registro bruto da campanha com contagens agregadas de status de mensagens, útil para polling sem carregar o payload completo do dashboard. Cada transição de estado também grava uma linha de auditoria via CampaignEventService, exposta em `GET /campaign/:id/events`.

Endpoints HTTP

18 endpoints

Lista paginada de campanhas. Filtre por status (draft, scheduled, sending, paused, completed, canceled, failed) e canal.

Query
page, pageSize, search, status, channel

Cria uma nova campanha com status draft.

Body

FieldTypeRequiredNotes
namestringyes
channel"email"noDefault: "email"
subjectstringnoEmail subject line
content_htmlstringnoHTML email body
content_textstringnoPlain-text fallback body
template_idnumbernoUse a saved template for content
recipient_list_idnumbernoDefault recipient list
scheduled_atstring (ISO 8601)noSchedule send time
integration_profile_idnumbernoMail delivery profile (e.g. AWS SES)
metadataobjectnoArbitrary metadata

Exclusão em massa de campanhas. Apenas campanhas com status draft, canceled ou failed podem ser excluídas.

Body

FieldTypeRequiredNotes
idsnumber[]yesIDs to delete

Obtém uma campanha por ID, incluindo os detalhes do seu perfil de integração vinculado.

Params
id (int)

Atualiza os campos da campanha. Apenas os campos fornecidos são alterados.

Params
id (int)

Body

FieldTypeRequiredNotes
namestringno
channel"email"no
subjectstringno
content_htmlstringno
content_textstringno
template_idnumberno
recipient_list_idnumberno
scheduled_atstring (ISO 8601)no
integration_profile_idnumberno
metadataobjectno

Exclui uma única campanha. Deve estar com status draft, canceled ou failed.

Params
id (int)

Dashboard global de campanhas com estatísticas agregadas de entrega em todas as campanhas, incluindo um histórico de envios de 7/30 dias e o contexto de rate-limit.

Dashboard por campanha com contadores de entrega, percentual de progresso do envio, eventos recentes de ciclo de vida, erros recentes de entrega e o contexto de rate-limit.

Params
id (int)

Obtém o registro da campanha combinado com estatísticas agregadas de mensagens, agrupadas por status da mensagem.

Params
id (int)

Log de auditoria dos eventos de ciclo de vida de uma campanha (created, scheduled, queued, sending_started, sent, failed, completed, canceled, paused, resumed, open, click, unsubscribed, test_sent, etc.).

Params
id (int)
Query
page, pageSize, event_type

Agenda uma campanha para entrega futura. Define o status como "scheduled".

Params
id (int)

Body

FieldTypeRequiredNotes
scheduled_atstring (ISO 8601)yesTarget dispatch date/time

Dispara imediatamente uma campanha. Valida conteúdo/perfil/lista, deduplica e filtra destinatários suprimidos, cria linhas campaign_message pendentes em uma transação e então enfileira um job de entrega por mensagem (ou envia inline se a fila estiver desabilitada).

Params
id (int)

Alias para /start. Dispara imediatamente a campanha.

Params
id (int)

Enfileira um único e-mail de teste desta campanha para um endereço especificado. Não cria uma linha campaign_message nem afeta os contadores da campanha.

Params
id (int)

Body

FieldTypeRequiredNotes
emailstringyesTest recipient email address
namestringnoTest recipient display name

Cancela uma campanha. Define o status como "canceled"; o worker de e-mail pula quaisquer mensagens ainda em andamento desta campanha.

Params
id (int)

Pausa uma campanha em envio. Define o status como "paused" sem alterar as mensagens em andamento ou os jobs de fila.

Params
id (int)

Retoma uma campanha pausada. Redefine o status para "sending"; chamar /start em seguida continua de onde a fila parou.

Params
id (int)

Duplica uma campanha em um novo rascunho com "(copy)" anexado ao nome. Contadores de entrega, timestamps e agendamento são redefinidos.

Params
id (int)