Skip to main content
Uma campanha envia o mesmo template para muitos contatos. A Arara valida template e variáveis, reserva a cota do plano, debita o custo total da carteira na criação e processa os envios em segundo plano.
Para 1 mensagem, use POST /v1/messages. Para até 1.000 com o mesmo template, POST /v1/messages/batch. Acima disso, agendado ou com teste A/B, use campanha.

O objeto campanha

Criar uma campanha

Resposta 200 OK (o totalCost do exemplo é ilustrativo):
Acompanhe mensagem a mensagem pelo webhook message.status_updated. O fim da campanha gera o evento campaign.completed.

Regras que valem saber

  • Idempotency-Key é obrigatório. Repetir a chave devolve a campanha já criada, sem cobrar de novo. Derive a chave do identificador da campanha no seu sistema e reuse nas retentativas. A unicidade é global na Arara, não por organização: inclua um prefixo só seu (acme-campanha-8842), nunca um valor genérico como campanha-1. Sem o header, a resposta hoje é 500, e não 400.
  • Cobrança antecipada. O total sai da carteira na criação. Contatos bloqueados no envio (opt-out, número inválido, limite de frequência) são estornados um a um.
  • Pré-requisitos. Número dedicado conectado (403 NO_DEDICATED_NUMBER), saldo para o total (402 INSUFFICIENT_FUNDS) e cota do plano (403 PLAN_LIMIT_REACHED).
  • variables é array posicional. ["João", "30"], não objeto.
  • Estime antes. POST /v1/campaigns/estimate com a lista de telefones calcula por país de destino e bate com o valor cobrado. O GET usa só o preço do mercado local.
  • Cancelar estorna o que não saiu. POST /v1/campaigns/{id}/cancel devolve à carteira os contatos que ainda não viraram mensagem. Mensagens já enfileiradas seguem. Campanha já finalizada responde 422.
  • A lista tem envelope próprio. GET /v1/campaigns responde { content, totalPages, totalElements }, e não { data, pagination }.

Agendar

Envie scheduledAt entre 5 minutos e 30 dias no futuro. A campanha nasce SCHEDULED, já cobrada. Fora da janela: 400 CAMPAIGN_SCHEDULE_TOO_SOON ou 400 CAMPAIGN_SCHEDULE_TOO_FAR.

Teste A/B

Mande abTest junto com a criação: templateName é a variante A e abTest.variantBTemplateName é a B. Uma amostra dos contatos (samplePct, padrão 20%) recebe as duas variantes, e o restante espera a vencedora pela métrica escolhida (metric, padrão CLICKED). Enquanto o teste roda, a campanha fica em AB_TESTING. Prefira abTest na criação. Adicionado depois por POST /v1/campaigns/{campaignId}/ab-test, parte dos contatos pode já ter sido enviada sem o teste. As rotas de teste A/B respondem 404 sem corpo quando a campanha ou o teste não existe.

Endpoints

Erros mais comuns

Próximos passos

Receita: Black Friday

Fluxo completo de campanha sazonal.

Smart Links

Clique e conversão por campanha.