← Blog

·

Botão de URL dinâmica com UTM no template do WhatsApp: medir clique e venda no GA4

Atualizado em 29/10/2026

Para medir clique e venda de um template do WhatsApp no GA4, use um botão de URL com sufixo dinâmico: o template aprovado tem um endereço fixo terminado em {{1}}, e a cada envio você passa um valor que identifica a campanha (e, se quiser, o envio). Esse valor vira UTMs (utm_source=whatsapp, utm_medium, utm_campaign) direto na URL ou por um redirecionamento no seu domínio, e o GA4 atribui a sessão e a compra à campanha. Do lado do WhatsApp, você cruza com o webhook de status e com as análises de template da Meta para ter o funil completo: entregue, lida, clicada e vendida.

Este guia mostra as regras da Meta para URLs em templates, dois jeitos de montar as UTMs, o payload de envio e um modelo de relatório.

As regras da Meta para o botão de URL

Segundo a documentação de componentes de template:

RegraLimite
Botões de URL por templateAté 2
Texto do botãoAté 25 caracteres
Tamanho da URLAté 2.000 caracteres
Variáveis na URLNo máximo 1, sempre no fim do endereço
ExemploObrigatório quando a URL tem variável
Caracteres especiaisDevem ser codificados (ex.: espaço vira %20); caracteres não codificados podem fazer o envio falhar

A consequência prática é importante: você não pode colocar a variável no meio da URL nem ter duas variáveis (uma para campanha e outra para contato). Todo o rastreio tem que caber num único sufixo no final.

Duas formas de levar a UTM

Opção 1: UTM fixa na URL, variável no último parâmetro

O template já nasce com as UTMs da campanha, e a variável preenche só o último parâmetro:

https://www.loja.com.br/ofertas?utm_source=whatsapp&utm_medium=template&utm_campaign=bf2026&utm_content={{1}}

No envio, {{1}} recebe algo como oferta_tenis_a. Vantagens: simples, não precisa de servidor. Desvantagens: utm_campaign fica presa ao template, então cada campanha nova exige um template novo (e nova aprovação); e o valor passado precisa estar codificado para URL.

Opção 2: redirecionamento no seu domínio (recomendado)

O template tem uma URL curta no seu próprio domínio:

https://www.loja.com.br/w/{{1}}

No envio, {{1}} recebe um código curto, como k7Qm2x. O seu servidor guarda o que esse código significa (campanha, template, destino, ID do envio) e responde com um redirecionamento 302 para a URL final com todas as UTMs. Vantagens:

  • um template serve para muitas campanhas, sem nova aprovação;
  • você troca o destino depois do envio, se a página mudar;
  • o servidor registra o clique na hora, com o código do envio;
  • o cliente vê o domínio da sua empresa, não um encurtador desconhecido.

A documentação da Meta não trata de encurtadores de terceiros. Usar o próprio domínio evita a dúvida e deixa claro para o cliente para onde ele vai.

Um redirecionador mínimo em Node.js (Express):

import express from 'express';
const app = express();

app.get('/w/:code', async (req, res) => {
  const link = await db.links.findOne({ code: req.params.code });
  if (!link) return res.redirect(302, 'https://www.loja.com.br/');

  await db.cliques.insert({ code: link.code, wamid: link.wamid, em: new Date() });

  const url = new URL(link.destino);
  url.searchParams.set('utm_source', 'whatsapp');
  url.searchParams.set('utm_medium', 'template');
  url.searchParams.set('utm_campaign', link.campanha);
  url.searchParams.set('utm_content', link.template);
  url.searchParams.set('utm_id', link.campanha_id);
  res.redirect(302, url.toString());
});

Quer testar enquanto lê? Crie sua conta na Vectalk e envie a primeira mensagem pela API oficial. Criar conta grátis →

Como montar as UTMs para o GA4

O GA4 recomenda sempre preencher utm_source, utm_medium e utm_campaign, e sugere também utm_id (ajuda do Google Analytics sobre UTMs). Os valores diferenciam maiúsculas de minúsculas: whatsapp e WhatsApp viram duas origens diferentes. Defina um padrão e use letras minúsculas.

ParâmetroValor sugeridoPara quê
utm_sourcewhatsappOrigem do tráfego
utm_mediumtemplate (marketing) ou utilidadeSeparar campanha de aviso transacional
utm_campaignbf2026, reativacao_outNome da campanha
utm_contentnome do template ou variação do testeComparar textos e botões
utm_idID da campanha no seu sistemaLigar com dados de custo

Sobre os agrupamentos de canal: no grupo padrão do GA4, as regras de canal olham origem e meio. Com utm_medium=template, o tráfego pode cair em “Unassigned” ou em outro canal, dependendo das regras e da lista de sites que o Google mantém. Para ver o WhatsApp como canal próprio, crie um grupo de canais personalizado com a condição “Origem da sessão exatamente igual a whatsapp”.

Não coloque telefone, nome, e-mail ou outro dado pessoal na UTM. O Google proíbe o envio de informações de identificação pessoal ao Analytics, e a URL também fica no histórico do navegador. Para ligar o clique ao contato, use o código opaco do redirecionamento e guarde a relação no seu banco.

O template e o payload de envio

Criação do template (o mesmo formato da Cloud API), com corpo, botão de URL dinâmica e botão de saída:

{
  "name": "oferta_semana_url",
  "language": "pt_BR",
  "category": "MARKETING",
  "components": [
    {
      "type": "BODY",
      "text": "Oi, {{1}}! O kit que você viu está com 20% até domingo.",
      "example": { "body_text": [["Ana"]] }
    },
    {
      "type": "BUTTONS",
      "buttons": [
        {
          "type": "URL",
          "text": "Ver oferta",
          "url": "https://www.loja.com.br/w/{{1}}",
          "example": ["k7Qm2x"]
        },
        { "type": "QUICK_REPLY", "text": "Não quero ofertas" }
      ]
    }
  ]
}

Envio para um contato, passando o nome no corpo e o código no botão. O index é a posição do botão de URL na lista (começa em 0):

{
  "messaging_product": "whatsapp",
  "to": "5511999999999",
  "type": "template",
  "template": {
    "name": "oferta_semana_url",
    "language": { "code": "pt_BR" },
    "components": [
      {
        "type": "body",
        "parameters": [{ "type": "text", "text": "Ana" }]
      },
      {
        "type": "button",
        "sub_type": "url",
        "index": "0",
        "parameters": [{ "type": "text", "text": "k7Qm2x" }]
      }
    ]
  }
}

O fluxo no seu sistema, por contato:

  1. Gere um código curto único e salve code → campanha, template, destino.
  2. Envie o template com o código no parâmetro do botão.
  3. Guarde o wamid devolvido pela API junto do código.
  4. Atualize delivered, read ou failed quando o webhook de status chegar.
  5. Registre o clique no redirecionador e deixe o GA4 cuidar da sessão e da compra.

Se o envio é para muitos contatos, gere os códigos em lote antes da campanha. O artigo como enviar template pela API detalha os outros componentes do payload.

Medindo o clique pela Meta

Além do seu redirecionador, a Meta conta cliques em botões. Segundo a documentação de análises, as análises de template retornam cliques em botões de URL e de resposta rápida para templates de marketing e de utilidade, com os tipos url_button (total) e unique_url_button (contas distintas que clicaram). Três detalhes:

  • é preciso ativar as análises de template na conta antes (pelo WhatsApp Manager ou com is_enabled_for_insights=true), e depois de ativadas elas não podem ser desligadas;
  • os dados de leitura e clique ficam disponíveis por até 7 dias a partir do envio;
  • o rastreio de cliques pode ser desligado por template com cta_url_link_tracking_opted_out.

Consulta de exemplo (com IDs ilustrativos):

curl -g 'https://graph.facebook.com/v26.0/<WABA_ID>/template_analytics?start=1793145600&end=1793232000&granularity=daily&metric_types=sent,delivered,read,clicked&template_ids=[<TEMPLATE_ID>]' \
  -H 'Authorization: Bearer <TOKEN>'

Os números da Meta e os do seu redirecionador não precisam bater exatamente: são medições diferentes. Use a Meta para comparar templates entre si e o seu redirecionador para ligar clique a envio e a venda.

Relatório: do envio à venda

Com o código do redirecionamento, dá para juntar tudo numa tabela por campanha. Exemplo em SQL, supondo as tabelas envios (uma linha por mensagem, com o código do link e o último status do webhook), cliques (redirecionador) e pedidos (com o código do link gravado no checkout):

SELECT
  e.campanha,
  COUNT(*) FILTER (WHERE e.status IN ('delivered', 'read')) AS entregues,
  COUNT(*) FILTER (WHERE e.status = 'read') AS lidas,
  COUNT(c.code) AS clicaram,
  COALESCE(SUM(p.pedidos), 0) AS pedidos,
  COALESCE(SUM(p.receita), 0) AS receita,
  ROUND(COUNT(*) FILTER (WHERE e.status IN ('delivered', 'read')) * 0.3217, 2) AS custo_meta_brl
FROM envios e
LEFT JOIN (SELECT DISTINCT code FROM cliques) c ON c.code = e.code
LEFT JOIN (
  SELECT link_code, COUNT(*) AS pedidos, SUM(valor) AS receita
  FROM pedidos GROUP BY link_code
) p ON p.link_code = e.code
GROUP BY e.campanha;

O resultado vira um relatório assim (exemplo fictício, só para mostrar o formato):

CampanhaEntreguesLidasClicaramPedidosReceitaCusto Meta
bf2026_tenis4.0002.90061048R$ 9.120,00R$ 1.286,80
reativacao_out1.500820957R$ 980,00R$ 482,55

O custo usa a tarifa de marketing para o Brasil em vigor desde 1º/10/2026 (R$ 0,3217 por mensagem entregue). No GA4, a mesma análise aparece no relatório de aquisição de tráfego filtrado por Origem da sessão = whatsapp, com o evento de compra marcado como evento principal.

Uma ressalva: sem identificação do usuário (User-ID), o GA4 em geral só atribui a venda se ela acontecer no mesmo navegador do clique. Se o cliente clica no celular e compra no computador, a venda some do relatório do GA4, mas pode aparecer no seu, se o checkout guardar o código do link. Para enviar a venda de volta à Meta, veja API de Conversões para WhatsApp.

Como fazer isso com a Vectalk

Na Vectalk você cria o template com botão de URL dinâmica pela API (criar template), com os componentes no formato da Cloud API mostrado acima, e envia com o parâmetro do botão pelo endpoint de mensagens (enviar template, exemplo “Botão com parâmetro dinâmico”). Os webhooks de status chegam no endpoint que você registrar, prontos para alimentar a tabela envios.

O redirecionador, o GA4 e o relatório ficam no seu sistema: a Vectalk não tem ferramenta de campanhas nem encurtador no painel. Cada mensagem entregue desconta do saldo pré-pago, sem cartão na Meta. Crie sua conta em apps.vectalk.com.br/register. Se está começando, leia o guia da API oficial do WhatsApp.

Perguntas frequentes

Posso colocar a variável no meio da URL?

Não. A Meta aceita no máximo uma variável na URL do botão, e ela é sempre anexada ao fim do endereço.

Posso usar link encurtado de terceiros no botão?

A documentação de componentes não fala de encurtadores. Recomendamos um redirecionamento no seu próprio domínio: o cliente reconhece o endereço, e você controla o destino e registra o clique.

Funciona em template de utilidade?

Sim, o botão de URL dinâmica existe em templates de utilidade, como link de rastreio do pedido. Use um utm_medium diferente (por exemplo, utilidade) para não misturar com campanhas. A Meta também conta cliques de templates de utilidade nas análises.

Por que o GA4 mostra menos cliques que o meu redirecionador?

Bloqueadores, consentimento de cookies, páginas que demoram a carregar e cliques repetidos fazem os números divergirem. O redirecionador conta a requisição; o GA4 conta a sessão que carregou a tag.

Como rastrear anúncios que levam para o WhatsApp?

É outro caminho: anúncios de clique para o WhatsApp trazem dados de origem na primeira mensagem do cliente. Veja como rastrear anúncios Click-to-WhatsApp.


Fontes oficiais consultadas em 29/10/2026: Componentes de template, Análises da WhatsApp Business Platform, Preços, Parâmetros UTM no Google Analytics, Grupos de canais padrão do GA4, Boas práticas para evitar dados pessoais no Analytics, Documentação da Vectalk: enviar template.

Coloque o WhatsApp oficial da sua empresa para funcionar

Crie sua conta, conecte seu número à API oficial (dá para manter o app com coexistência) e comece a atender e enviar mensagens.