Boas-vindas ao comprador de infoproduto no WhatsApp: uma mensagem por checkout
A mensagem de boas-vindas é a mais segura e a mais útil de toda a operação de infoproduto: o comprador acabou de pagar, quer saber onde está o acesso e está receptivo. O risco é técnico, não de tom. Plataformas mandam um evento por compra, e um checkout com order bump são duas ou mais compras. Sem tratamento, o aluno recebe duas boas-vindas seguidas. Esta receita resolve isso.
Publicado em · 4 min de leitura
O evento certo em cada plataforma
| Plataforma | Evento de compra aprovada | Onde está o telefone |
|---|---|---|
| --- | --- | --- |
| Hotmart (2.0.0) | PURCHASE_APPROVED | data.buyer.checkout_phone e checkout_phone_code (DDD separado para brasileiro) |
| Kiwify | compra_aprovada (webhook_event_type order_approved, order_status paid) | bloco Customer do payload; confira em Testar Webhook |
| Eduzz | myeduzz.invoice_paid | data.buyer.cellphone, phone e phone2 |
Para assinatura, cada renovação aprovada é uma nova compra. A Kiwify manda compra_aprovada e subscription_renewed juntos; para a boas-vindas, use só a primeira compra (o subscription_id é o mesmo em todas as cobranças, então grave quem já foi recebido). Os detalhes por plataforma estão em Hotmart, Kiwify e Eduzz.
Caminho sem código e o que ele cobre
Em Fluxos, Recuperar vendas, escolha a plataforma e o objetivo 'Boas-vindas pós-compra'. O assistente cria um fluxo com uma única mensagem, que usa {nome} e {produto}, e gera a URL do webhook. Cole a URL na plataforma, marque o evento de compra aprovada e informe a chave da plataforma no assistente para validar a origem. Em poucos minutos o comprador passa a receber a mensagem.
O texto de partida é curto e genérico; troque pela sua voz. Um bom padrão: agradecimento, o que o comprador recebeu, onde está o acesso e como pedir ajuda. Não coloque senha nem link de acesso pessoal de uso único em texto aberto no WhatsApp se a sua plataforma já entrega isso por e-mail com segurança; use o WhatsApp para avisar que o e-mail saiu e para tirar dúvida.
O problema do order bump
Order bump é a oferta extra marcada no checkout. Para a plataforma, ele é outra compra, com outro evento. Se você manda boas-vindas por evento, o comprador recebe uma por produto. Na Hotmart, o payload diz quando a compra é um bump (purchase.order_bump.is_order_bump) e traz o id da compra principal (parent_purchase_transaction); quando esse id vem vazio para um bump, a própria compra é a principal. Na Eduzz, o campo data.orderBump.mainSaleId aponta para a fatura principal.
A regra é: uma boas-vindas por checkout. Calcule a chave do checkout (a transação principal), tente 'reivindicar' essa chave numa tabela com UNIQUE e só envie se conseguir. O assistente sem código não faz esse agrupamento por checkout: ele ignora o mesmo telefone no mesmo fluxo por 10 minutos, o que cobre muitos casos de bump, mas não é garantia se os eventos chegarem com mais de 10 minutos de diferença. Se isso importa para você, use o código abaixo.
Node.js (Express), Hotmart 2.0.0
// Hotmart 2.0.0: one welcome per checkout, even with order bumps
app.post("/hotmart", express.json(), async (req, res) => {
if (req.get("X-HOTMART-HOTTOK") !== process.env.HOTMART_HOTTOK) return res.sendStatus(401);
const { id, event, data } = req.body;
res.sendStatus(200);
if (event !== "PURCHASE_APPROVED") return;
if (!(await saveEventOnce(id, req.body))) return; // duplicate delivery
// An order bump is a separate purchase. The parent transaction id is the same for the whole checkout.
const ob = data.purchase.order_bump;
const parent = ob?.is_order_bump && ob.parent_purchase_transaction
? ob.parent_purchase_transaction
: data.purchase.transaction;
if (!(await claimWelcome(parent))) return; // UNIQUE(parent): only the first purchase of the checkout welcomes
const b = data.buyer;
const phone = String((b.checkout_phone_code || "") + (b.checkout_phone || "")).replace(/\D/g, "");
if (phone.length < 10) return; // no usable phone: log it, never guess
await sendWhatsApp(phone.startsWith("55") ? phone : "55" + phone,
"Oi, " + b.first_name + "! Sua compra de " + data.product.name + " foi confirmada. O acesso chega no e-mail " + b.email + ". Se não encontrar, olhe o spam ou responda aqui.");
});
// Shared helper: one send through the ZapZap API
async function sendWhatsApp(number, text) {
const r = await fetch(`https://api.zapzapapi.com/api/v1/${process.env.ZAPZAP_INSTANCE}/send/text`, {
method: "POST",
headers: {
"x-api-key": process.env.ZAPZAP_API_KEY,
"x-api-secret": process.env.ZAPZAP_API_SECRET,
"Content-Type": "application/json",
},
body: JSON.stringify({ number, text }),
});
if (!r.ok) throw new Error("ZapZap " + r.status + ": " + (await r.text()));
}Telefone ausente: o que fazer e o que não fazer
Nem todo comprador deixa telefone, e em produto de afiliado o produtor precisa liberar o dado do comprador. Se o telefone não vier, o caminho certo é registrar e seguir: não tente adivinhar número, não use telefone de outro campo (como o do produtor) e não mande para um número que você 'achou'. Na Hotmart, o telefone de comprador brasileiro pode vir sem DDD, com o DDD em checkout_phone_code; o código acima junta os dois e descarta o que ficar com menos de 10 dígitos.
A ZapZap só dispara pelo assistente quando detecta um telefone de 10 a 13 dígitos. Quando o payload traz o número quebrado em dois campos, o assistente não junta; use o endpoint do exemplo.
Mensagem transacional não é campanha
A boas-vindas é transacional: acontece por causa de uma compra, para quem comprou. Isso a separa da campanha para a base, que pede consentimento específico e outro ritmo. Se você aproveitar a mensagem para empurrar outra oferta, ela deixa de ser só transacional e o risco muda. Se quiser ofertar depois, espere e peça licença: 'Quer receber dicas e novidades por aqui? Responda SIM'.
Inclua uma saída em toda mensagem e respeite. Veja o guia de LGPD no WhatsApp. A ZapZap conecta números por um canal não oficial e gerenciado; uma mensagem de boas-vindas por compra, sem repetição, é o uso de menor risco.
Resumo rápido
- Os eventos são PURCHASE_APPROVED (Hotmart), compra_aprovada (Kiwify) e myeduzz.invoice_paid (Eduzz).
- Order bump é outra compra: agrupe pela transação principal e envie uma boas-vindas por checkout.
- O assistente cobre o caso simples; o endpoint próprio resolve bump com mais de 10 minutos de diferença e telefone sem DDD.
- Boas-vindas é transacional: não misture oferta nova na mesma mensagem.
Continue lendo
Perguntas frequentes
O comprador recebeu duas boas-vindas. Por quê?
Provavelmente por order bump. Para a plataforma, o bump é outra compra com outro evento. Agrupe pela transação principal (na Hotmart, parent_purchase_transaction; na Eduzz, orderBump.mainSaleId) e envie uma mensagem por checkout.
Posso mandar o link de acesso pelo WhatsApp?
Prefira avisar que o acesso saiu por e-mail e oferecer ajuda. Link pessoal ou senha em texto no WhatsApp expõe o aluno se o aparelho for compartilhado. Se o link é público do curso, tudo bem.
A boas-vindas precisa de consentimento?
É uma mensagem transacional para quem acabou de comprar, o que tem base diferente de campanha. Ainda assim, informe o canal no checkout, ofereça saída e respeite o pedido de parar. Para ofertas, peça consentimento específico.
Funciona para assinatura recorrente?
Para a primeira compra, sim. Para renovações, cada cobrança aprovada gera novo evento: grave quem já recebeu boas-vindas para não repetir. Na Kiwify, o subscription_id é o mesmo em todas as cobranças.
Meu comprador não recebeu nada. O que olhar?
Três pontos: se o evento chegou (histórico da plataforma), se a resposta da ZapZap foi triggered: 1 e se o telefone tem de 10 a 13 dígitos. Na Hotmart, o DDD pode vir separado do número.
Posso usar a mesma instância para tudo?
Pode, mas o número é um só e o ritmo conta. Mensagens transacionais por compra costumam ser baixo volume, o que ajuda. Em lançamento com picos, avalie o limite de 120 requisições por minuto por webhook e o ritmo de envio.
Dê boas-vindas no minuto da compra
Ligue sua plataforma em Fluxos, Recuperar vendas, ou use o código da receita. R$15 por número ativo ao mês, com crédito de boas-vindas sujeito à campanha vigente.
