Acesso Comercial / Docs / Storefront
Ctrl K

Ferramentas Embarcáveis (SDK de Marketing)

Adicione social proof, timers, barras de anúncio, modais de desconto e mais em qualquer frontend — com uma única linha de código.

Zero dependências: O script funciona em qualquer site — WordPress, HTML puro, React, Vue, Angular, ou qualquer outra plataforma. Basta colar o snippet e configurar as ferramentas no painel administrativo.

Início Rápido

Cole este snippet antes do </body> do seu site:

HTML
<script
  src="https://storefront.acessocomercial.com/tools/loader.js"
  data-hostname="minha-loja"
  async
></script>

Substitua "minha-loja" pelo hostname da sua loja no painel. Pronto — as ferramentas configuradas no painel serão automaticamente aplicadas ao seu site.

Como funciona

O sistema usa uma arquitetura de dois arquivos para performance máxima:

~2 KB
loader.js

Carregado imediatamente. Busca configuração e carrega o bundle principal apenas se houver ferramentas ativas.

~31 KB
tools.js

Carregado sob demanda. Contém todos os widgets com isolamento CSS via Shadow DOM.

Fluxo de carregamento

  1. O loader.js lê o data-hostname do script tag
  2. Busca a configuração das ferramentas da API: GET /api/storefront/tools/{hostname}
  3. Armazena em cache no localStorage por 5 minutos (navegação instantânea entre páginas)
  4. Se existem ferramentas ativas, carrega o tools.js dinamicamente
  5. Cada widget se auto-inicializa dentro de Shadow DOM (sem conflito de CSS)

Ferramentas disponíveis

Todas configuráveis pelo painel administrativo. Ativam automaticamente quando configuradas.

FerramentaDescriçãoRequer data attributes?
Barra de Anúncio Barra fixa no topo com mensagens rotativas (ex: "Frete grátis acima de R$99") Não
Timer Contagem regressiva em cards de produto com data de expiração Sim — data-ac-product-id
Indicador Badge colorido nos produtos (ex: "Novo", "Mais vendido", "Exclusivo") Sim — data-ac-product-id
Últimas Unidades Alerta de escassez ("Restam apenas 3!") em produtos com baixo estoque Sim — data-ac-product-id + data-ac-quantity
Desconto à Vista Preço com desconto PIX exibido nos cards de produto Sim — data-ac-product-id + data-ac-price
Modal de Desconto Popup com formulário para captura de leads e exibição de cupom Não
Prova Social Notificações tipo toast mostrando compras e visualizações recentes Não
Funil Modal de upsell exibido após adicionar ao carrinho Não (via Data Layer)
Session Replay Gravação de sessão do visitante para análise no painel Não

Data Attributes para Produtos

Ferramentas que atuam em produtos individuais precisam saber qual produto está sendo exibido. Adicione estes atributos nos elementos que representam cards de produto:

HTML
<div class="product-card"
  data-ac-product-id="abc123"
  data-ac-price="14900"
  data-ac-quantity="5"
>
  <!-- conteúdo do card -->
</div>
AtributoTipoDescrição
data-ac-product-id String Obrigatório. ID do produto na plataforma (Relay Global ID).
data-ac-price Number Preço em centavos (ex: 14900 = R$149,00). Usado pelo Desconto à Vista.
data-ac-quantity Number Estoque disponível. Usado pelo Últimas Unidades.
SPA compatível: O SDK usa MutationObserver para detectar novos elementos com data-ac-product-id. Em aplicações SPA (React, Vue, Angular), os widgets são aplicados automaticamente quando os cards são renderizados no DOM.
Templates Acesso Comercial: Se você usa nossos templates (Vanilla ou Astro), os data attributes já são adicionados automaticamente — nenhuma configuração extra necessária.

Data Layer (Eventos)

O SDK implementa uma fila de eventos no padrão GTM. Você pode enviar eventos antes ou depois do SDK carregar:

JavaScript
// Inicializa a fila (pode ser feito antes do script carregar)
window.acDataLayer = window.acDataLayer || [];

// Evento de visualização de página
window.acDataLayer.push({
  event: "page_view",
  page: "product",
  productId: "abc123"
});

// Evento de adição ao carrinho (ativa o Funil/Upsell)
window.acDataLayer.push({
  event: "add_to_cart",
  productId: "abc123",
  productName: "Camiseta Premium",
  quantity: 1
});

Eventos suportados

EventoCamposEfeito
page_view page, productId Ativa prova social para o produto
add_to_cart productId, productName, quantity Ativa funil/upsell, alimenta prova social
purchase customerName, city, productName Alimenta prova social

API Global

Após o carregamento, o SDK expõe um objeto global para controle programático:

JavaScript
// Acessar configuração carregada
console.log(window.AcessoComercial.config);

// Enviar evento via API global
window.AcessoComercial.push({
  event: "add_to_cart",
  productId: "abc123"
});

// Destruir todos os widgets (SPA cleanup)
window.AcessoComercial.destroy();

Endpoint de Configuração

O loader busca a configuração das ferramentas do seguinte endpoint REST:

MétodoRotaDescrição
GET /api/storefront/tools/{hostname} Retorna configuração JSON de todas as ferramentas ativas para a loja.
GET /api/storefront/tools/loader.js Bundle do loader (~2KB, IIFE).
GET /api/storefront/tools/tools.js Bundle completo dos widgets (~31KB, IIFE, lazy loaded).

Exemplo de resposta

JSON
{
  "hostname": "minha-loja",
  "tools": {
    "adBar": { "messages": ["Frete grátis acima de R$99!", "10% OFF no PIX"] },
    "timers": [{
      "endDate": "2026-07-01T00:00:00.000Z",
      "variant": "danger",
      "targets": [{ "type": "product", "productId": "abc123" }]
    }],
    "indicators": [{
      "text": "Novo",
      "variant": "success",
      "productIds": ["abc123", "def456"]
    }],
    "lastUnitsRule": {
      "active": true,
      "maximumUnits": 5,
      "variant": "danger",
      "productIds": []
    },
    "cashDiscounts": [{
      "discountPercentage": 10,
      "productIds": []
    }],
    "discountModals": [],
    "socialProofRule": {
      "active": true,
      "showViews": true,
      "showAddToCart": true,
      "showOrders": true
    },
    "sessionReplay": { "enabled": true, "sampleRate": 100 }
  },
  "theme": null
}

Desenvolvimento Local

Em desenvolvimento, aponte o script para o servidor local:

HTML
<script
  src="http://localhost:8082/api/storefront/tools/loader.js"
  data-hostname="demo"
  async
></script>

Isolamento CSS (Shadow DOM)

Todos os widgets são renderizados dentro de Shadow DOM. Isso significa:

Cache e Performance