← Blog

·

API de Conversões da Meta para WhatsApp: enviar a venda de volta aos anúncios

Atualizado em 25/10/2026

A API de Conversões para mensagens comerciais (Conversions API for Business Messaging) é o canal oficial da Meta para avisar que uma conversa iniciada por anúncio de clique para o WhatsApp virou venda, lead ou outro resultado. Você captura o ctwa_clid no webhook, guarda junto da conversa e, quando o evento acontece, envia um POST para o dataset da sua conta do WhatsApp com action_source: "business_messaging" e messaging_channel: "whatsapp". O evento aparece no Gerenciador de Eventos e passa a ser atribuído ao anúncio.

Este guia mostra os requisitos, o passo a passo, os eventos aceitos, um exemplo em Node.js e os cuidados com duplicidade e dados pessoais.

Por que enviar a venda de volta

Sem esse retorno, a Meta só enxerga o começo do funil: quantas pessoas clicaram e iniciaram uma conversa. A venda acontece depois, no atendimento ou no seu checkout, e fica invisível para o Gerenciador de Anúncios. Com a API de Conversões, você entrega à Meta o resultado real de cada clique.

O primeiro passo é ter a atribuição no seu sistema: guardar o referral do webhook e ligar o pedido ao clique. Isso está em como saber qual anúncio gerou a venda. Este artigo começa de onde aquele termina.

Requisitos

Pelo guia de integração da API de Conversões para mensagens comerciais, para anúncios de clique para o WhatsApp você precisa de:

RequisitoDetalhe
App de desenvolvedor da MetaCriado no painel de apps
Permissão whatsapp_business_managementCom acesso avançado
Permissão whatsapp_business_manage_eventsCom acesso avançado; quem já tem acesso avançado a whatsapp_business_messaging tem aprovação automática ao pedir
Nível de acesso à API de MarketingRecurso “Marketing API Access Tier” no app
Integração com a Cloud APIHospedada pela Meta (a recomendada)
Token com as duas permissõesDe usuário do sistema, de usuário do sistema de integração empresarial ou do Cadastro Incorporado

Para gerar um token que não expira, veja token permanente com usuário do sistema.

Passo a passo

1. Descubra o waba_id

É o ID da conta do WhatsApp Business (conta de mensagens). Ele aparece no WhatsApp Manager e no webhook, no campo entry[].id.

2. Crie ou recupere o dataset

O dataset é onde a Meta reúne eventos de várias origens (site, app, loja física, conversas). Ele pertence à empresa. Um POST no endpoint de dataset da conta do WhatsApp cria um, ou devolve o que já existe:

curl -X POST "https://graph.facebook.com/v26.0/WABA_ID/dataset?access_token=TOKEN"

Um GET no mesmo endpoint retorna o dataset_id existente. A resposta é um ID: guarde, ele é o destino dos eventos.

3. Capture o ctwa_clid

O ctwa_clid vem no objeto referral da mensagem recebida quando a conversa nasce de um anúncio de clique para o WhatsApp. A Meta o descreve como um identificador pessoal, único por clique, e orienta guardá-lo com a conversa. Ele não vem em anúncios exibidos no Status do WhatsApp.

4. Envie o evento

Quando a conversão acontece, envie para /{DATASET_ID}/events:

curl -X POST "https://graph.facebook.com/v26.0/DATASET_ID/events?access_token=TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "data": [
      {
        "event_name": "Purchase",
        "event_time": 1761400000,
        "action_source": "business_messaging",
        "messaging_channel": "whatsapp",
        "user_data": {
          "whatsapp_business_account_id": "WABA_ID",
          "ctwa_clid": "ARAkLkA8rmlFeiCktEJQ-QTwRiyYHAFDLMNDBH0CD3qpjd0HR4..."
        },
        "custom_data": {
          "currency": "BRL",
          "value": 297.00
        }
      }
    ]
  }'

event_time é o momento da conversão em segundos Unix. O exemplo oficial também traz partner_agent, campo usado por parceiros para se identificar; se você integra direto, sem parceiro, ele não se aplica.

5. Confira no Gerenciador de Eventos

Depois do envio, o evento aparece no Gerenciador de Eventos, dentro do dataset. É ali que você valida se a integração está chegando.

Eventos aceitos

Segundo as perguntas frequentes do guia oficial, a API de Conversões para mensagens comerciais aceita:

EventoQuando usar
PurchasePagamento confirmado
LeadSubmittedPessoa enviou os dados pedidos (nome, e-mail, interesse)
QualifiedLeadLead qualificado pelo time ou pela IA
ViewContentPessoa viu um produto ou catálogo na conversa
AddToCartItem adicionado ao carrinho
InitiateCheckoutLink de pagamento ou PIX gerado
CartAbandonedCarrinho não concluído
OrderCreatedPedido criado
OrderShippedPedido enviado
OrderDeliveredPedido entregue
OrderCanceledPedido cancelado
OrderReturnedPedido devolvido
RatingProvidedCliente deu uma nota (por exemplo, NPS no pós-venda)
ReviewProvidedCliente deixou uma avaliação

A Meta faz uma ressalva: esses eventos devem representar interações que acontecem na conversa. Se a compra acontece no seu site ou app, use a API de Conversões para web ou para apps, com a origem correspondente.

Exemplo em Node.js

O exemplo abaixo envia o Purchase quando o pedido é pago, usando o ctwa_clid gravado na conversa. Ele marca o pedido como enviado para não repetir o evento, porque a Meta não deduplica eventos dessa API: a recomendação oficial é que o anunciante faça a deduplicação antes de enviar.

const GRAPH = 'https://graph.facebook.com/v26.0';
const { META_CAPI_TOKEN, DATASET_ID, WABA_ID } = process.env;

export async function enviarCompra(pedido, db) {
  if (!pedido.ctwa_clid || pedido.capi_enviado_em) return; // sem clique ou já enviado

  const corpo = {
    data: [{
      event_name: 'Purchase',
      event_time: Math.floor(new Date(pedido.pago_em).getTime() / 1000),
      action_source: 'business_messaging',
      messaging_channel: 'whatsapp',
      user_data: { whatsapp_business_account_id: WABA_ID, ctwa_clid: pedido.ctwa_clid },
      custom_data: { currency: 'BRL', value: pedido.total },
    }],
  };

  const r = await fetch(`${GRAPH}/${DATASET_ID}/events?access_token=${META_CAPI_TOKEN}`, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify(corpo),
  });

  const resposta = await r.json();
  if (!r.ok) throw new Error(`CAPI: ${resposta.error?.message ?? r.status}`);

  await db.marcarCapiEnviado(pedido.id, new Date());
  return resposta;
}

Se você prefere ferramentas sem código, o mesmo POST pode sair de um nó HTTP no n8n.

Sem ctwa_clid: dados do cliente com hash

Nem toda conversão tem ctwa_clid, por exemplo uma conversa que começou antes de você passar a gravar o clique. Nesse caso, o guia oficial permite enviar dados do cliente com hash SHA-256 no lugar do clique, e a Meta tenta casar o evento com um anúncio. Regras desse caminho:

  • user_data precisa ter page_id (o ID da página do Facebook). Sem ele, o evento é rejeitado, mesmo com dados válidos.
  • Inclua pelo menos um parâmetro de cliente, como ph (telefone) ou em (e-mail), normalizado e com hash SHA-256.
  • external_id não é usado para casar eventos nesse caminho.
  • A atribuição vale só para interações com anúncio dos últimos 7 dias e está disponível apenas em parte dos países.
import { createHash } from 'node:crypto';

const sha256 = (v) => createHash('sha256').update(v).digest('hex');

// telefone só com dígitos e código do país: 5511988887777
const user_data = {
  page_id: process.env.PAGE_ID,
  whatsapp_business_account_id: process.env.WABA_ID,
  ph: [sha256('5511988887777')],
};

Sempre que tiver o ctwa_clid, prefira ele: a própria Meta diz que ele casa de forma mais confiável e não tem essas limitações.

Cuidados

  • Duplicidade. Envie cada conversão uma vez. Use uma marca no pedido (como capi_enviado_em) ou uma tabela de eventos enviados.
  • Um dataset por página. O guia informa que só é possível vincular um dataset a cada página. Se você já usa a API de Conversões para o site, dá para reaproveitar o dataset existente; a Meta diz que acrescentar mensagens comerciais não interfere na integração atual.
  • Dados pessoais. O ctwa_clid e os telefones com hash são dados pessoais. Registre a base legal, limite quem acessa e defina prazo de guarda. Veja LGPD e WhatsApp, lembrando que o texto não substitui a orientação de um advogado.
  • Token no servidor. O token da API de Conversões nunca vai para o navegador nem para o app do cliente.

Como fazer com a Vectalk

A Vectalk repassa os webhooks no formato da Meta, então o referral com ctwa_clid chega na sua URL sem conversão, pronto para ser gravado (documentação de webhooks). A chamada da API de Conversões é feita do seu servidor direto para a Meta, com um app e um token que tenham as permissões listadas acima. Se a venda é fechada por campanhas de reengajamento, a recuperação de PIX e carrinho dentro da janela gratuita aberta pelo anúncio ajuda a aumentar o número de conversões que você vai reportar.

Para o panorama da API, veja o guia da API oficial do WhatsApp e o artigo sobre webhook da API do WhatsApp. Crie sua conta em apps.vectalk.com.br/register.

Perguntas frequentes

Preciso do Pixel da Meta para usar a API de Conversões no WhatsApp?

Não. Para eventos de conversa, o destino é um dataset ligado à conta do WhatsApp Business, criado pela API de dataset ou pelo Gerenciador de Eventos. O Pixel é para eventos de site.

Posso enviar a venda que aconteceu no meu site?

Sim, mas não por esse caminho. Os eventos de mensagens comerciais devem representar interações dentro da conversa. Para compras no site, use a API de Conversões para web.

Quanto tempo depois do clique posso enviar o evento?

Com ctwa_clid, o guia não fixa um prazo. Sem ele, usando dados com hash, a atribuição só vale para interações com anúncio dos últimos 7 dias; eventos posteriores são aceitos, mas não atribuídos.

A Meta deduplica eventos enviados duas vezes?

Não nessa API. O guia oficial recomenda que o anunciante faça a deduplicação antes de enviar.

Que valor colocar em custom_data?

O valor da conversão e a moeda, por exemplo "currency": "BRL" e "value": 297.00 para uma venda de R$ 297,00.


Fontes oficiais consultadas em 25/10/2026: API de Conversões para mensagens comerciais, Parâmetros de informações do cliente, Webhook de mensagens de texto (referral), Tokens de acesso, Vectalk: webhooks.

Integre o WhatsApp oficial ao seu sistema

A Vectalk entrega a Cloud API da Meta com os mesmos payloads e webhooks, um token para todas as contas e documentação completa.