Skip to main content
Com a API de campanhas, sua integração faz os mesmos disparos do painel: escolhe a plataforma, o modelo de mensagem, a cadência de envio e o público, filtrado por etiquetas, funil, canal, datas e outros critérios. Este guia cobre o fluxo completo, da escolha do modelo ao acompanhamento do envio. Para chaves e autenticação, veja a Introdução à API. Para o disparo no produto, veja Disparos e Modelos de mensagem.

Pré-requisitos

URL base: https://gateway.crmspark.com.br, com o prefixo /v1.

Como funciona

Toda campanha nasce como rascunho e é iniciada numa segunda chamada:
  1. POST /v1/campaigns salva a campanha em draft, com modelo, plataforma, cadência e filtros.
  2. POST /v1/campaigns/{id}/start confere as variáveis manuais, monta o público e começa o envio.
Entre as duas chamadas, você pode estimar o público com audience-preview. As variáveis manuais do modelo são informadas só no início, como no diálogo “Iniciar” do painel. Não há agendamento nem pausa. Um rascunho é iniciado uma vez, e uma campanha em andamento pode ser cancelada.

Endpoints

Os modelos de mensagem usados nas campanhas são gerenciados pelos endpoints de modelos de mensagem. A referência interativa documenta cada campo, código de erro e exemplo.

Passo a passo

1

Escolha o modelo de mensagem

Liste os modelos e anote o id do que você vai usar:
isOfficial: true indica um modelo oficial, aprovado pela Meta. Modelos oficiais só podem ser usados com platform igual a whatsapp ou instagram.
2

Consulte as variáveis do modelo

Veja quais variáveis manuais você vai precisar informar:
Cada item de commonVariables é uma variável manual. As variáveis automáticas, como o nome do chat, não aparecem na lista: o Spark preenche para cada destinatário.
3

Monte os filtros de público

Consulte o catálogo de campos:
Estime o tamanho do público antes de criar a campanha:
Se estimatedCount for 0, revise os filtros.
4

Crie a campanha

Guarde o campaignId para as próximas chamadas.
5

Inicie o envio

Envie commonVariables se o modelo tiver variáveis manuais:
Se o modelo não tiver variáveis manuais, envie {}.
6

Acompanhe o progresso

Consulte a execução até status ser completed, failed ou canceled:
Consulte a cada 10 a 30 segundos.

Plataforma

O campo platform define o canal de envio, a velocidade máxima e quais modelos podem ser usados: Telegram não é aceito em campanhas novas. No WhatsApp Business, só modelos oficiais aprovados chegam a contatos fora da janela de 24 horas. Modelos internos funcionam como mensagens comuns e só são entregues dentro da janela de atendimento do canal. Um modelo oficial com platform: "whatsapp_lite" é recusado com CAMPAIGN_TEMPLATE_PLATFORM_MISMATCH.
O campo platform não limita quais chats entram no público. Para enviar só para chats de um canal, inclua um filtro chat.platform ou chat.entrypointId. Veja Filtros de público.

Cadência

cadence é o número de mensagens por minuto que a campanha tenta enviar: um inteiro maior ou igual a 1. Com "cadence": 10, a campanha envia até 10 mensagens por minuto, em intervalos iguais. Valores acima da velocidade máxima da plataforma (veja a tabela acima) não aceleram o envio. O Spark respeita esse teto para reduzir o risco de bloqueio dos números.
Na primeira campanha, use uma cadência de 5 a 10 e aumente aos poucos, conforme a taxa de sucesso e as respostas dos contatos.

Variáveis do modelo

Os modelos podem ter trechos variáveis ({{1}}, {{2}}, …) de dois tipos.

Variáveis manuais (commonVariables)

Você informa o valor uma vez, no início, e ele vale para todos os destinatários da execução.
Para saber o que enviar, chame GET /v1/message-templates/{id} e leia commonVariables. Cada item tem key (por exemplo var1), label (nome da variável) e required. Se faltar alguma variável manual, o início falha com CAMPAIGN_MISSING_COMMON_VARIABLES.

Variáveis automáticas

São as variáveis configuradas como “Automático — dados do chat” (nome, contato, aniversário ou campo personalizado). O Spark preenche cada uma com os dados de cada destinatário no momento do envio. Não envie essas variáveis no corpo.
Se um chat não tiver o dado (por exemplo, sem nome ou com o campo personalizado vazio), a variável sai em branco. Antes de um disparo grande, confira os dados ou use filtros para excluir chats incompletos.

Exemplo com os dois tipos

Modelo: "Olá {{1}}, aproveite {{2}} com desconto exclusivo!"
  • {{1}}: automática (nome do chat). Não envie.
  • {{2}}: manual (nome da promoção). Envie como "var2": "Black Friday".
Corpo do início:
Cada destinatário recebe, por exemplo, "Olá Maria, aproveite Black Friday com desconto exclusivo!". “Maria” vem do chat e “Black Friday” é igual para todos.

Filtros de público

Os filtros definem quais chats recebem a campanha. A estrutura é a mesma dos filtros do painel de disparos.

Estrutura

Regras de combinação

Exemplo: chats com a etiqueta VIP ou Premium, desde que sejam do WhatsApp Business.

Campos

A lista atualizada está sempre em GET /v1/campaigns/filters/schema. Os IDs (tag_…, funnel_step_…, wa_entrypoint_… e outros) são os mesmos devolvidos pela API.

Operadores por tipo

exists e not-exists não usam value. between e not-between usam value e value2.

Exemplos de filtros

Só WhatsApp Business:
Chats com a etiqueta “Cliente ativo”:
Chats sem as etiquetas “Inativo” e “Bloqueado”:
Última mensagem depois de uma data (calcule a data no seu código, por exemplo hoje menos 7 dias):
Nascidos entre duas datas:
Chats numa etapa do funil:
Chats que a equipe ainda não respondeu:
Chats de canais específicos:

Estimar o público

POST /v1/campaigns/audience-preview calcula quantos chats atendem aos filtros, sem criar campanha e sem enviar mensagens. Aceita os mesmos filtros de POST /v1/campaigns.
Sem filters, a contagem inclui todos os chats da organização.

Status e acompanhamento

Status da campanha

Detalhe com execuções

GET /v1/campaigns/{id} retorna a campanha e o histórico de execuções:

Progresso de uma execução

GET /v1/campaigns/{id}/executions/{executionId}:

Cancelar

Resposta: 204 No Content. Só campanhas em processing podem ser canceladas. As mensagens ainda na fila não são enviadas; as que já estavam sendo enviadas podem chegar ao destino.

Limite de destinatários

Cada campanha tem um tamanho máximo, igual a 24 horas de envio na velocidade máxima da plataforma: cerca de 21.600 chats no WhatsApp Business e no Instagram e 4.800 no WhatsApp Lite. O limite é conferido depois do início. Se o público passar dele, a execução termina em failed sem enviar mensagens e a campanha volta para draft. Use audience-preview antes de iniciar e, para públicos maiores, divida o envio em campanhas com filtros diferentes (por etiqueta, funil ou data).

Exemplo completo com o SDK TypeScript

Veja Começar com TypeScript para instalar e configurar o SDK.

Erros comuns

As respostas de erro seguem o formato { statusCode, code, message }. Use code na lógica do seu código, não a mensagem.

Boas práticas

  1. Segmente o público com etiquetas, funil e datas. Públicos menores e relevantes respondem melhor.
  2. Chame audience-preview antes de criar a campanha, para evitar público vazio ou maior do que o esperado.
  3. Consulte GET /v1/message-templates/{id} antes de iniciar. Erros de variável só aparecem no início.
  4. Fora da janela de atendimento, use modelos oficiais. Modelos internos só chegam dentro da janela.
  5. Acompanhe failedCount. Falhas podem indicar chats fora da janela, números inválidos ou problemas no modelo.
  6. Comece com cadência de 5 a 10 mensagens por minuto e ajuste conforme os resultados.
  7. Use nomes únicos e descritivos, como “Promoção maio VIP”.
  8. Se o início falhar por timeout de rede, consulte GET /v1/campaigns/{id} antes de tentar de novo. Se a campanha já estiver em processing, a nova tentativa devolve CAMPAIGN_NOT_DRAFT.

Leitura adicional