Passar para o conteúdo principal

Campanha de Carrinho Abandonado da Loja Integrada

Como configurar o Carrinho Abandonado - Loja Integrada

Atualizado há mais de 3 meses

Vamos aprender nesse passo a passo como configurar a Campanha de Carrinho Abandonado para a sua loja. Em poucos passos você poderá realizar este processo e começar a recuperar vendas perdidas!

📋 Pré-requisitos

Antes de começar, certifique-se de que:

  • Sua campanha de carrinho abandonado está configurada no painel da Zeki - Templates de Mensagens.

🚀 Passo a Passo da Configuração

Passo 1: Acesse o Painel Administrativo

Passo 2: Navegue até a Seção de Códigos HTML

No menu lateral, vá para: Personalize sua Loja > Incluir códigos HTML

Passo 3: Crie um Novo Código

Clique no botão "Adicionar novo código"

Passo 4: Configure as Informações do Código

Preencha os campos conforme abaixo:

Campo

Valor a ser inserido

Descrição

Carrinho Abandonado Zeki

Local publicação

Rodapé

Página publicação

Página de Checkout

Tipo

Javascript

Passo 5: Personalize o Código (ATENÇÃO!)

Código de Javascript para anexar:

const API_URL = "https://api.zekitec.com.br/api/v1/stores/1/abandoned_cart_intent"; const USER_AUTHENTICATION_TOKEN = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjo0OTE5NjYyNDE4LCJqdGkiOiI0YTBjNDJhODAyZjY0MjIyOGFjNGQ5ZmJmMGRkYzU0MCIsInVzZXJfaWQiOjYyMX0.aO7610RGd03A_XTHIlff8i06v6Wnv1_EugjwObwUwnA";  let lastSent = {};   let domItemsObserver = null;   function getProductNames() {   const products = [];   document.querySelectorAll('.resumo-compra .produto-info').forEach(function (el) {     let nome = el.childNodes[0].nodeValue || el.textContent;     if (nome) {       nome = nome.trim().replace(/"/g, "'");       products.push(nome);     }   });   return products; }   function getCustomerData() {   const emailInput = document.querySelector('#id_email');   const nameInput = document.querySelector('#id_nome');   const phoneInput = document.querySelector('#id_telefone_celular');    let email = emailInput ? emailInput.value : '';   let name = nameInput ? nameInput.value : '';   let phone = phoneInput ? phoneInput.value : '';    if (!email) {     const caixaInfoLis = document.querySelectorAll('.caixa-info li');     caixaInfoLis.forEach(function (li) {       const match = li.textContent.match(/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/);       if (match) {         email = match[0];       }     });   }    if (phone) {     phone = phone.replace(/\D/g, '');   }    return { email, name, phone }; }   function shouldSend(data) {   return (     data.email &&     (       data.email !== lastSent.email ||       data.name !== lastSent.name ||       data.phone !== lastSent.phone     )   ); }   function sendCustomerIntent() {      const products = getProductNames();   const { email, name, phone } = getCustomerData();    if (!products || !email) return { sent: false, reason: 'missing-products-or-email' };    const payload = {     email,     name,     phone,     products,     cart_url: window.location.href,     imported_from: "LOJA_INTEGRADA"   };    if (!shouldSend(payload)) return { sent: false, reason: 'no-change' };    lastSent = { email, name, phone };    return fetch(API_URL, {     method: "POST",     headers: {        "Content-Type": "application/json",       "Authorization": `Bearer ${USER_AUTHENTICATION_TOKEN}`,     },     body: JSON.stringify(payload)   }).then((res) => ({ sent: true, status: res.status }))     .catch((err) => ({ sent: false, reason: 'network-error', error: err && (err.message || err.toString()) })); }   function setupListeners() {   ['#id_email', '#id_nome', '#id_telefone_celular'].forEach(function (selector) {     const el = document.querySelector(selector);     if (el) {       el.addEventListener('blur', sendCustomerIntent);       el.addEventListener('change', sendCustomerIntent);     }   });    if (document.querySelector('.caixa-info')) {     sendCustomerIntent();   } }   function startLojaIntegradaAbandonedCart() {   setupListeners();   if (domItemsObserver) {     try { domItemsObserver.disconnect(); } catch (e) {}   }   domItemsObserver = new MutationObserver(function () {     setupListeners();   });   if (document && document.body) {     domItemsObserver.observe(document.body, { childList: true, subtree: true });   }   return { started: true }; }   if (typeof window !== 'undefined') {   window.startLojaIntegradaAbandonedCart = startLojaIntegradaAbandonedCart;        window.ZekiAbandonedCart = {     start: startLojaIntegradaAbandonedCart,     send: sendCustomerIntent,     data: getCustomerData,     products: getProductNames,     shouldSend: shouldSend,     lastSentRef: function () { return lastSent; }   }; }  startLojaIntegradaAbandonedCart()

No campo Conteúdo, você encontrará este trecho no código:

const API_URL = "https://api.zekitec.com.br/api/v1/stores/1/abandoned_cart_intent";

Você precisa fazer apenas UMA alteração:
Substitua o número 1 pelo CNPJ da sua empresa sem máscara (sem pontos, barras ou hífens).

Exemplo:
Se seu CNPJ é 16.097.187/0001-23, o código ficará:

const API_URL = "https://api.zekitec.com.br/api/v1/stores/16097187000123/abandoned_cart_intent";

⚠️ Importante: Não altere nenhuma outra parte do código!

Passo 6: Salve as Alterações

Clique no botão "Salvar alterações"

🎉 Pronto! Seu carrinho abandonado está configurado!

🔍 Como Testar a Configuração

Teste 1: Verificação Básica

  1. Acesse sua loja como um cliente

  2. Adicione produtos ao carrinho

  3. Vá até o checkout

  4. Preencha pelo menos o e-mail ou telefone

  5. Saia da página sem finalizar a compra

⚙️ Observações Importantes

Quando a campanha funciona:

✅ Cliente chega até o checkout
✅ Cliente preenche e-mail ou telefone (dependendo do canal configurado da sua campanha)
✅ Carrinho é abandonado e não realiza uma nova compra.

Quando a campanha NÃO funciona:

❌ Cliente não preenche nenhum contato
❌ Compra é finalizada com sucesso
❌ Cliente não chega na página de checkout

Tempo de Disparo:

⏰ A mensagem é enviada entre 30 minutos a 1 hora após o abandono do carrinho.

Respondeu à sua pergunta?