Campanhas

Crie e gerencie campanhas de marketing e broadcast para enviar mensagens em massa para contatos segmentados via WhatsApp e canais habilitados.

Tipos de Campanha

Campanhas podem ser one-off (envio unico) ou ongoing (campanhas continuas ativadas por triggers como visita ao site ou evento).

Listar Campanhas

GET/api/v1/accounts/{account_id}/campaigns

Lista todas as campanhas da conta.

bash
curl -s "https://chat.seudominio.com/api/v1/accounts/1/campaigns" \
  -H "api_access_token: YOUR_TOKEN" | jq .
200Array de campanhas (sem envelope data). scheduled_at e um inteiro epoch e so aparece em campanhas one_off.
json
[
  {
    "id": 1,
    "title": "Promocao de Janeiro",
    "description": "Ofertas especiais para clientes ativos",
    "campaign_type": "one_off",
    "inbox": { "id": 1, "name": "WhatsApp Business" },
    "scheduled_at": 1769936400,
    "audience": [
      { "type": "Label", "id": 12 }
    ],
    "message": "Ola {{contact.name}}! Temos ofertas especiais para voce este mes.",
    "enabled": true,
    "campaign_status": "completed",
    "created_at": 1769335200
  }
]
POST/api/v1/accounts/{account_id}/campaigns

Cria uma nova campanha. Body envolto em campaign.

Body envolto em campaign — campaign_type e derivado do canal da inbox

Os campos devem estar dentro do wrapper campaign. O campaign_typenao e enviado pelo cliente — o backend o define pelo tipo de canal da inbox: inboxes WhatsApp/SMS/API/WAHA viram one_off (e o scheduled_at e preenchido automaticamente se ausente); inboxes Website (WebWidget) viram ongoing e o scheduled_at e forcado a nulo. Inboxes do tipo API nao suportam campanha (retornam 422"Unsupported Inbox type").

Body (campaign)

NomeTipoObrigatorioDescricao
titlestringSimTitulo da campanha
descriptionstringNaoDescricao
inbox_idintegerSimID da inbox de envio
messagestringSimMensagem (suporta variaveis {{contact.name}}, etc.)
scheduled_atstringNaoData de envio (ISO 8601) para campanhas one_off. Em inboxes ongoing (WebWidget) e ignorado. Na resposta e serializado como inteiro epoch.
audiencearrayNaoArray de objetos { type, id } para segmentacao (ex: por label)
sender_idintegerNaoID do agente remetente
enabledbooleanNaoCampanha ativa(default: true)
trigger_only_during_business_hoursbooleanNaoDisparar apenas em horario comercial (campanhas ongoing)
message_interval_secondsintegerNaoIntervalo entre mensagens em segundos
trigger_rulesobjectNaoRegras de gatilho para campanhas ongoing
curl -X POST "https://chat.seudominio.com/api/v1/accounts/1/campaigns" \
  -H "api_access_token: YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "campaign": {
      "title": "Boas-vindas novos contatos",
      "inbox_id": 1,
      "message": "Ola {{contact.name}}! Bem-vindo a nossa comunidade.",
      "audience": [{ "type": "Label", "id": 12 }]
    }
  }'
GET/api/v1/accounts/{account_id}/campaigns/{id}

Retorna detalhes de uma campanha com metricas de envio.

PATCH/api/v1/accounts/{account_id}/campaigns/{id}

Atualiza uma campanha. Body envolto em campaign. O {id} na URL e o display_id da campanha (per-account).

Body (campaign)

NomeTipoObrigatorioDescricao
titlestringNaoTitulo
messagestringNaoMensagem
enabledbooleanNaoAtivar/desativar
scheduled_atstringNaoReagendar
DELETE/api/v1/accounts/{account_id}/campaigns/{id}

Remove uma campanha.

Escopo de conta

O {id} e o display_id da campanha — um identificador sequencial por conta, nao um ID global. A campanha e resolvida com Current.account.campaigns.find_by(display_id:); campanhas de outras contas nunca sao alcancadas. A remocao e definitiva.