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
/api/v1/accounts/{account_id}/campaignsLista todas as campanhas da conta.
curl -s "https://chat.seudominio.com/api/v1/accounts/1/campaigns" \
-H "api_access_token: YOUR_TOKEN" | jq .[
{
"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
}
]/api/v1/accounts/{account_id}/campaignsCria 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)
| Nome | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
title | string | Sim | Titulo da campanha |
description | string | Nao | Descricao |
inbox_id | integer | Sim | ID da inbox de envio |
message | string | Sim | Mensagem (suporta variaveis {{contact.name}}, etc.) |
scheduled_at | string | Nao | Data de envio (ISO 8601) para campanhas one_off. Em inboxes ongoing (WebWidget) e ignorado. Na resposta e serializado como inteiro epoch. |
audience | array | Nao | Array de objetos { type, id } para segmentacao (ex: por label) |
sender_id | integer | Nao | ID do agente remetente |
enabled | boolean | Nao | Campanha ativa(default: true) |
trigger_only_during_business_hours | boolean | Nao | Disparar apenas em horario comercial (campanhas ongoing) |
message_interval_seconds | integer | Nao | Intervalo entre mensagens em segundos |
trigger_rules | object | Nao | Regras 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 }]
}
}'/api/v1/accounts/{account_id}/campaigns/{id}Retorna detalhes de uma campanha com metricas de envio.
/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)
| Nome | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
title | string | Nao | Titulo |
message | string | Nao | Mensagem |
enabled | boolean | Nao | Ativar/desativar |
scheduled_at | string | Nao | Reagendar |
/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.