← Blog

·

Recuperação de PIX, boleto e carrinho abandonado pelo WhatsApp

Atualizado em 25/10/2026

Recuperação de vendas no WhatsApp é enviar, pela API oficial, um template aprovado para quem gerou um PIX ou um boleto e não pagou, ou para quem deixou itens no carrinho. PIX e boleto pendentes são avisos sobre uma transação que o cliente já iniciou e podem ser aprovados como utilidade, desde que o texto não tenha tom promocional. Carrinho abandonado é marketing para a Meta, mesmo que o cliente tenha pedido o lembrete, e exige opt-in de marketing.

Este guia mostra de onde vem cada gatilho, quanto tempo esperar, como escrever o template na categoria certa, como colocar o botão de pagamento dentro da mensagem e um exemplo de worker em Node.js.

Três situações, três tratamentos

Antes de escrever qualquer mensagem, separe os casos. Eles parecem iguais no painel de vendas, mas a Meta trata cada um de um jeito.

SituaçãoO que existe no seu sistemaCategoria provávelOpt-in necessário
PIX gerado e não pagoPedido com código PIX e prazo de validadeUtilidade, se o texto for só sobre o pedidoAvisos do pedido
Boleto emitido e não pagoPedido com linha digitável e vencimentoUtilidade, se o texto for só sobre o pedidoAvisos do pedido
Carrinho abandonadoItens no carrinho, sem pedido criadoMarketingOfertas e novidades
Lembrete com cupom ou urgênciaQualquer um dos casos acima com incentivoMarketingOfertas e novidades

A régua é a das diretrizes de categorização de templates: utilidade precisa ser não promocional e específica do usuário (pedido, conta, transação). A Meta cita “você deixou itens no carrinho, finalize a compra” como exemplo de retargeting, que é marketing “mesmo se solicitado pelo usuário”. Conteúdo misto, como um aviso de pedido com promoção, também vira marketing. O artigo sobre como a Meta classifica seu template detalha os critérios.

A diferença de categoria pesa no custo. Para destinatários no Brasil, a tabela da Meta em vigor desde 1º de outubro de 2026 cobra R$ 0,3217 por template de marketing entregue e R$ 0,0350 por template de utilidade (página de preços). Veja os detalhes em preço da API do WhatsApp no Brasil.

De onde vêm os gatilhos

O WhatsApp não sabe que um PIX expirou nem que alguém saiu do checkout. Os eventos vêm de outros sistemas, e o seu backend decide se envia a mensagem:

  • PIX: o banco ou PSP que gera o código dinâmico avisa por webhook quando a cobrança é paga ou expira. Você guarda a data de criação e a validade.
  • Boleto: o PSP informa emissão, pagamento e baixa. A compensação do boleto não é instantânea, então um boleto “não pago” pode estar só aguardando compensação.
  • Carrinho do site: a plataforma de loja ou de checkout registra o abandono quando o cliente informa o telefone e não conclui.
  • Carrinho dentro do WhatsApp: se você vende pelo catálogo, o carrinho do WhatsApp só chega ao seu sistema quando o cliente o envia, pelo webhook de pedido. A documentação de catálogos diz que o carrinho não expira e fica na conversa até ser enviado. Não existe evento de abandono desse carrinho.

Regra de ouro para os três casos: consulte o status do pagamento imediatamente antes de enviar. Um lembrete de “PIX pendente” para quem acabou de pagar gera reclamação e bloqueio.

Quanto tempo esperar

Não há tempo oficial da Meta para isso. Os pontos abaixo são um ponto de partida para testar com os seus dados:

CasoPrimeiro contatoSegundo contatoParar quando
PIXAlguns minutos após a geração, se não pagoPouco antes de o código expirarPago, expirado ou cliente pediu para parar
BoletoNo dia seguinte à emissão, com a linha digitávelNa véspera ou no dia do vencimentoPago, vencido sem renegociação ou opt-out
CarrinhoAlgumas horas após o abandonoEm geral, nenhumCompra feita ou opt-out

Três cuidados valem para todos:

  • Validade do PIX é responsabilidade sua. A Meta avisa que o WhatsApp não lê a validade de dentro do código. Se a oferta acabou, expire o código no PSP também.
  • Horário. Respeite o horário em que o cliente costuma comprar e evite madrugada.
  • Limite de marketing por usuário. Lembretes de carrinho competem com o marketing de outras empresas. A Meta pode deixar de entregar com o erro 131049 (limite por usuário).

Como escrever o template na categoria certa

TextoCategoria provávelPor quê
“Seu pedido {{1}} está aguardando o pagamento via PIX de {{2}}. O código vale até {{3}}.”UtilidadeDados do pedido, sem persuasão
“O boleto do pedido {{1}}, no valor de {{2}}, vence em {{3}}. A linha digitável está no botão abaixo.”UtilidadeAlerta sobre uma transação do cliente
“Seu PIX ainda não foi pago! Corra, o estoque está acabando.”MarketingUrgência comercial
“Pague hoje e ganhe 5% de desconto no pedido {{1}}.”MarketingIncentivo financeiro
“Você deixou {{1}} no carrinho. Finalize sua compra.”MarketingRetargeting, exemplo citado pela Meta

Se você enviar como UTILITY e a Meta entender que é marketing, o template é aprovado como MARKETING. Confira sempre a categoria na resposta da criação e no webhook template_category_update. Insistir em passar marketing como utilidade leva a restrições que podem converter todos os templates de utilidade da conta. O guia de templates da API do WhatsApp explica a escala de restrições.

Botão de pagamento dentro do template

No Brasil, a Meta oferece os payment request CTA templates: um template de utilidade ou marketing com até três botões do tipo PAYMENT_REQUEST, cada um com um meio de pagamento (código PIX dinâmico, linha digitável do boleto, link de pagamento ou pagamento com cartão em um clique). O cliente toca e copia o código, sem precisar de uma integração com o Orders API (documentação).

Criação do template (o valor do código é só exemplo; o real vai no envio):

{
  "name": "pix_pendente",
  "language": "pt_BR",
  "category": "UTILITY",
  "components": [
    { "type": "BODY", "text": "Seu pedido {{1}} está aguardando o pagamento via PIX de {{2}}. O código vale até {{3}}.",
      "example": { "body_text": [["#10482", "R$ 189,90", "18h de hoje"]] } },
    { "type": "BUTTONS", "buttons": [
      { "type": "PAYMENT_REQUEST", "text": "Copy Pix code",
        "payment_setting": { "type": "pix_dynamic_code",
          "pix_dynamic_code": { "code": "00020101021226700014br.gov.bcb.pix..." } } }
    ] }
  ]
}

O campo text do botão aceita apenas os valores fixos da documentação (Copy Pix code, Copy Boleto code, Open payment link ou Review payment). No envio, o código real de cada cliente vai no parâmetro do botão:

{
  "messaging_product": "whatsapp",
  "to": "5584999999999",
  "type": "template",
  "template": {
    "name": "pix_pendente",
    "language": { "code": "pt_BR" },
    "components": [
      { "type": "body", "parameters": [
        { "type": "text", "text": "#10482" },
        { "type": "text", "text": "R$ 189,90" },
        { "type": "text", "text": "18h de hoje" } ] },
      { "type": "button", "sub_type": "payment_request", "index": "0",
        "parameters": [ { "type": "action", "action": { "payment_request": {
          "payment_setting": { "type": "pix_dynamic_code",
            "pix_dynamic_code": { "code": "CODIGO_PIX_DO_PEDIDO" } } } } } ] }
    ]
  }
}

A Meta faz duas ressalvas: o WhatsApp não desativa o botão quando o código ou o link perde a validade, e não faz conciliação. Quem confirma o pagamento é o seu PSP. Para o boleto, troque o payment_setting por { "type": "boleto", "boleto": { "digitable_line": "..." } }.

Quando o cliente responde e a janela de 24 horas está aberta, você também pode enviar uma mensagem interativa order_details, com itens, total e o PIX ou boleto, e depois um order_status quando o pagamento for confirmado.

Opt-in: dois consentimentos

A Meta pede que o opt-in deixe claro que a pessoa aceita receber mensagens e de qual empresa, e recomenda opt-ins separados por tipo de mensagem (Get opt-in for WhatsApp). Para recuperação de vendas, isso vira duas caixas no checkout:

  • Avisos do pedido: cobre PIX e boleto pendentes, confirmação e entrega.
  • Ofertas: cobre carrinho abandonado e qualquer lembrete com incentivo.

O carrinho é o caso delicado: o telefone foi informado, mas a compra não aconteceu. Só envie o lembrete se a caixa de ofertas foi marcada antes do abandono. Guarde data, origem e texto aceito, e ofereça um botão de saída. O tratamento desses dados também está sujeito à LGPD (Lei nº 13.709/2018); este texto não substitui a orientação de um advogado. Veja como montar uma lista opt-in.

Exemplo: worker de recuperação em Node.js

O worker roda a cada minuto, busca pedidos pendentes cujo lembrete venceu, confere o status no PSP e envia o template pela Vectalk, que usa o mesmo payload da Cloud API.

const VECTALK = 'https://apis.vectalk.com.br/api/messages';
const TOKEN = process.env.VECTALK_TOKEN;

async function enviarLembretePix(pedido) {
  const r = await fetch(VECTALK, {
    method: 'POST',
    headers: { Authorization: `Bearer ${TOKEN}`, 'Content-Type': 'application/json' },
    body: JSON.stringify({
      messaging_product: 'whatsapp',
      to: pedido.wa_id,
      type: 'template',
      template: {
        name: 'pix_pendente',
        language: { code: 'pt_BR' },
        components: [
          { type: 'body', parameters: [
            { type: 'text', text: pedido.numero },
            { type: 'text', text: pedido.valorFormatado },
            { type: 'text', text: pedido.validadeFormatada },
          ] },
          { type: 'button', sub_type: 'payment_request', index: '0', parameters: [
            { type: 'action', action: { payment_request: { payment_setting: {
              type: 'pix_dynamic_code', pix_dynamic_code: { code: pedido.pixCopiaECola },
            } } } },
          ] },
        ],
      },
    }),
  });
  const corpo = await r.json();
  if (!r.ok) throw new Error(`Falha ${corpo.error?.code ?? r.status}`);
  return corpo.messages[0].id;
}

export async function rodarRecuperacao(db, psp) {
  const pendentes = await db.pedidosComLembreteVencido('pix');
  for (const pedido of pendentes) {
    const status = await psp.consultarCobranca(pedido.txid); // fonte da verdade
    if (status !== 'ATIVA') { await db.encerrarRegua(pedido.id, status); continue; }
    if (!pedido.optinAvisos || pedido.optout) continue;
    if (await db.lembreteJaEnviado(pedido.id, 'pix_1')) continue; // idempotência
    const wamid = await enviarLembretePix(pedido);
    await db.registrarLembrete(pedido.id, 'pix_1', wamid);
  }
}

Depois do envio, acompanhe entregas e falhas pelo webhook de status, com o wamid salvo. O artigo sobre status de mensagem via webhook mostra como tratar failed.

Como fazer isso com a Vectalk

A Vectalk é um proxy da WhatsApp Cloud API oficial: você cria os templates e envia as mensagens com os mesmos payloads da Meta, troca só a URL base (https://apis.vectalk.com.br/api) e o token, e recebe os webhooks no formato da documentação oficial. A cobrança da Meta vem na fatura da Vectalk, e a coexistência permite manter o número no app WhatsApp Business. Veja a criação de templates em docs.vectalk.com.br e crie sua conta em apps.vectalk.com.br/register. Para o contexto geral, leia o guia da API oficial do WhatsApp e o artigo sobre WhatsApp para e-commerce.

Perguntas frequentes

Lembrete de PIX pendente é sempre utilidade?

Não. Ele tende a ser aprovado como utilidade quando traz só dados do pedido (número, valor, validade). Com desconto, urgência ou sugestão de outros produtos, vira marketing. A decisão final é da Meta, que pode recategorizar depois da aprovação.

Posso mandar lembrete de carrinho para quem só deu opt-in de avisos de pedido?

Não. Carrinho abandonado é marketing e precisa de opt-in de ofertas. O consentimento para avisos de pedido não cobre retargeting.

O WhatsApp confirma o pagamento do PIX para mim?

Não. A documentação de pagamentos da Meta diz que o WhatsApp não faz conciliação. O seu banco ou PSP confirma o pagamento, e o seu sistema encerra a régua.

Quantos lembretes devo enviar?

Para PIX e boleto, dois costumam bastar: um logo depois da geração e outro perto do fim do prazo. Para carrinho, um único lembrete. Mais do que isso aumenta bloqueios e denúncias, que derrubam a qualidade do número.

Funciona para quem vende infoproduto?

Sim. A lógica é a mesma para produto digital. Veja WhatsApp para infoprodutores e, para cobranças recorrentes, a régua de cobrança pelo WhatsApp.


Fontes oficiais consultadas em 25/10/2026: Categorização de templates, Payment request CTA templates (Brasil), Pix dinâmico, Boleto, Orders API (Brasil), Visão geral de catálogos, Get opt-in for WhatsApp, Preços, Documentação da Vectalk.

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.