Magic Link na Nuvemshop: Cupons Automatizados no Checkout Sem Vazamento de Margem
O Problema: Duas Falhas Simultâneas no Fluxo de Cupons
Operações de e-commerce na Nuvemshop enfrentam um conflito estrutural entre conversão e proteção de margem quando usam cupons promocionais.
Falha 1: Fricção no Checkout
O fluxo padrão de cupom exige que o comprador:
- Lembre o código do cupom visto no anúncio.
- Navegue até o checkout.
- Encontre o campo de cupom (frequentemente colapsado ou pouco visível em mobile).
- Digite o código manualmente.
- Clique em “Aplicar”.
Cada etapa é um ponto de abandono. Dados de mercado indicam que 30-40% dos usuários mobile abandonam o checkout quando precisam interagir com campos de texto adicionais. O cupom — que deveria ser um incentivo — se torna fricção.
Uma parcela desses usuários abre uma nova aba, pesquisa “[nome da loja] cupom” no Google, e cai em um site agregador de cupons. Se encontra um código genérico válido, aplica. Se não encontra, abandona o carrinho. A loja perdeu a conversão ou a margem.
Falha 2: Vazamento de Cupons Genéricos
Cupons com código fixo (ex: FRETEGRATIS, 10OFF) são indexáveis. Sites como Pelando, Cuponomia e similares coletam e publicam esses códigos — as rotas de entrada do código nesses agregadores são mais numerosas do que parece. O resultado:
- Visitantes que não viram o anúncio e não teriam desconto passam a usá-lo. O cupom subsidia tráfego orgânico que já converteria sem incentivo.
- A margem por pedido cai em segmentos que o media buyer não planejou descontar.
- O cálculo de CAC e POAS fica contaminado: o custo real do cupom não é atribuído à campanha que o gerou.
O cenário extremo: uma campanha com ROAS aparente de 5x que, após contabilizar o vazamento de cupons para tráfego orgânico, opera com margem negativa.
A Arquitetura: Deep-Links Tokenizados com Aplicação Silenciosa
O Nexopath Magic Link resolve ambas as falhas com uma abordagem que separa o veículo de entrega (o link) do mecanismo de aplicação (o checkout). O comprador não precisa ver, lembrar ou digitar um código de cupom.
Geração do Token
Cada link promocional carrega um token opaco no query parameter:
https://loja.com.br/produto?ml=ojZwNabBrF9xWDr3EtVsn
O token é um identificador aleatório (nanoid) — ele não carrega o cupom nem as regras dentro de si. Quem guarda essa informação é o servidor: cada token está associado, no banco de dados, a um registro de resgate com:
- Código do cupom — o cupom real da Nuvemshop, configurado normalmente no painel da loja.
- Expiração absoluta — data/hora após a qual o token é inválido, independentemente de quantas vezes foi acessado.
- Limite de cliques — número máximo de acessos permitidos para aquele link.
Como o token é opaco e toda a validação acontece no servidor, adulterar a URL não dá acesso a nada: um token que não existe no banco é simplesmente rejeitado.
O ponto crítico: mesmo que alguém extraia e publique a URL completa em um site de cupons, o token expira. Um link gerado para uma campanha de 7 dias para de funcionar no dia 8. Um link com limite de 500 usos para de funcionar no uso 501. O cupom subjacente (FRETE10) continua existindo na Nuvemshop, mas sem o token válido, ninguém consegue aplicá-lo automaticamente.
Captura do Token no Storefront
Quando o visitante acessa a URL com ?ml=, o app do Magic Link roda num Web Worker isolado (NubeSDK) — sem acesso ao DOM, a window ou ao sessionStorage da página. Ele lê o token da query e o guarda no asyncLocalStorage do NubeSDK, o único armazenamento compartilhado entre vitrine e checkout:
// Contexto de vitrine (Web Worker, via NubeSDK)
const token = state.location.queries.ml;
if (token) {
await storage.setItem("ml_token", token, TTL);
}
Três decisões técnicas nesse trecho:
asyncLocalStorageem vez de cookie ousessionStorage— o checkout da Nuvemshop roda em domínio próprio (iframe + Web Worker) e não enxerga cookies ou storage da vitrine. OasyncLocalStorageé a ponte oficial que a plataforma compartilha entre os dois contextos para o mesmo app.- Salvo cedo, no carregamento — o token é guardado assim que a vitrine carrega, não no clique de “Comprar agora” (que redireciona na hora e perderia a corrida).
- TTL — o token expira do armazenamento junto com a validade do link, e sobrevive à navegação entre páginas até o checkout.
Aplicação Silenciosa no Checkout via NubeSDK
A Nuvemshop expõe o NubeSDK — um ambiente seguro de Web Worker que permite apps autorizados interagirem com o checkout sem acesso direto ao DOM do formulário de pagamento.
Quando o comprador chega ao checkout, o fluxo é:
- No evento
checkout:ready, o app lê oml_tokendoasyncLocalStorage. - Consulta o backend do Nexopath (
GET /api/redeem/preview) para validar o token e obter o código do cupom — sem consumir o token. - O backend verifica no banco: o token existe, não expirou, o limite não estourou, a cobrança está ativa.
- Se válido, o app dispara
coupon:addpara aplicar o cupom ao carrinho. - Quando o cupom é aplicado com sucesso, o app consome o token de uso único (
POST /api/redeem). Se a aplicação falha (regra de carrinho, valor mínimo), o token é preservado para uma próxima tentativa.
// Pseudocódigo simplificado do fluxo NubeSDK (contexto de checkout)
nube.on("checkout:ready", async () => {
const token = await storage.getItem("ml_token");
if (!token) return;
const res = await fetch(`${API}/api/redeem/preview?token=${token}`);
if (!res.ok) return; // 422 = token morto, 403 = cobrança inativa
const { coupon_code } = await res.json();
nube.send("coupon:add", () => ({ cart: { coupon: { code: coupon_code } } }));
});
O comprador vê o desconto aparecer no resumo do pedido sem ter digitado nada — sem campo de cupom para preencher, sem etapa adicional. O código do cupom aparece no resumo (é um cupom real da Nuvemshop), mas o comprador nunca precisou conhecê-lo ou digitá-lo.
Proteção de Margem: Três Camadas
Camada 1: Expiração temporal — cada token tem um expires_at absoluto. Campanhas de Black Friday geram tokens que expiram no dia seguinte. Não existe cupom “eterno” circulando na internet.
Camada 2: Limite de cliques — o limite é contabilizado no backend do Nexopath, não na Nuvemshop. Isso permite controle granular: 500 cliques para a campanha do Google, 300 para a do Meta, cada um com seu link independente — mesmo que ambos usem o mesmo cupom subjacente. É a mesma mecânica usada para calibrar links por influenciador pelo tamanho da audiência de cada creator.
Camada 3: Validação server-side — cada token é validado contra o banco a cada acesso (existe? expirou? limite estourou? cobrança ativa?). Como o token é um identificador opaco, não há payload no cliente para adulterar: um token inexistente ou já usado é rejeitado.
Comparação: Fluxo Manual vs. Magic Link
| Aspecto | Cupom Manual | Magic Link |
|---|---|---|
| Input do usuário no checkout | Digitar código + clicar “Aplicar” | Nenhum (aplicação automática) |
| Risco de vazamento | Alto (código fixo, indexável) | Baixo (token expirável com limite de uso) |
| Atribuição por campanha | Impossível (mesmo código para todas) | Por link (cada campanha tem seu token e contagem de cliques) |
| Taxa de resgate | 15-25% (típica para cupons manuais) | 60-80% (sem fricção de input) |
| Dependência de GTM | Geralmente sim (para injetar campo) | Não (script nativo via API) |
| Compatibilidade PCI | Depende da implementação | Garantida (NubeSDK opera fora do contexto de pagamento) |
Rastreamento por Link
Como cada campanha usa um link próprio, o painel do Nexopath mostra, por link:
- Cliques — quantos acessos o link recebeu.
- Status — ativo, esgotado (limite de cliques atingido) ou expirado.
Isso permite comparar o volume de tráfego que cada canal — cada influencer, cada anúncio — gerou, sem misturar origens sob um mesmo código. Para estimar o desconto concedido e a receita por campanha, cruze esses cliques com os pedidos no painel da Nuvemshop. Para o caso de uso de recuperação de carrinho com desconto pré-aplicado via WhatsApp e CRM, veja Automações de WhatsApp com Desconto Pré-Aplicado.
Limitações
- Checkout headless — lojas com checkout totalmente customizado (headless, fora da Nuvemshop) não usam NubeSDK. O Magic Link funciona apenas com o checkout nativo da Nuvemshop.
- Múltiplos cupons — a Nuvemshop permite apenas um cupom por pedido. Se o comprador já tiver um cupom aplicado manualmente, o Magic Link não sobrescreve. O app detecta essa condição e não tenta aplicar.
- Sem token guardado — se o comprador chega à loja sem nunca ter passado por um link com
?ml=(ou depois de o TTL expirar), não há token noasyncLocalStoragee o desconto não é aplicado. É o comportamento esperado: o desconto é para quem chegou pelo link.
Próximo Passo
O Nexopath Magic Link está na Nuvemshop App Store. O free trial de 14 dias inclui criação ilimitada de links e acesso completo ao painel. O setup leva menos de 5 minutos: instale, configure o primeiro link no painel, e use a URL gerada nos seus anúncios.