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ção | O que existe no seu sistema | Categoria provável | Opt-in necessário |
|---|---|---|---|
| PIX gerado e não pago | Pedido com código PIX e prazo de validade | Utilidade, se o texto for só sobre o pedido | Avisos do pedido |
| Boleto emitido e não pago | Pedido com linha digitável e vencimento | Utilidade, se o texto for só sobre o pedido | Avisos do pedido |
| Carrinho abandonado | Itens no carrinho, sem pedido criado | Marketing | Ofertas e novidades |
| Lembrete com cupom ou urgência | Qualquer um dos casos acima com incentivo | Marketing | Ofertas 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:
| Caso | Primeiro contato | Segundo contato | Parar quando |
|---|---|---|---|
| PIX | Alguns minutos após a geração, se não pago | Pouco antes de o código expirar | Pago, expirado ou cliente pediu para parar |
| Boleto | No dia seguinte à emissão, com a linha digitável | Na véspera ou no dia do vencimento | Pago, vencido sem renegociação ou opt-out |
| Carrinho | Algumas horas após o abandono | Em geral, nenhum | Compra 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
| Texto | Categoria provável | Por quê |
|---|---|---|
| “Seu pedido {{1}} está aguardando o pagamento via PIX de {{2}}. O código vale até {{3}}.” | Utilidade | Dados 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.” | Utilidade | Alerta sobre uma transação do cliente |
| “Seu PIX ainda não foi pago! Corra, o estoque está acabando.” | Marketing | Urgência comercial |
| “Pague hoje e ganhe 5% de desconto no pedido {{1}}.” | Marketing | Incentivo financeiro |
| “Você deixou {{1}} no carrinho. Finalize sua compra.” | Marketing | Retargeting, 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.
