Enviar eventos pelo código do site
Para quem desenvolve o site próprio: como avisar a Bevean de produto visto, carrinho e compra, com o formato aceito de cada evento.
Em site próprio, o script da Bevean carrega os formulários, mas não sabe sozinho qual produto o visitante abriu, o que ele pôs no carrinho ou se comprou. Quem desenvolve o site avisa a Bevean de cada um desses momentos com uma linha de JavaScript — e, com o visitante identificado, os gatilhos de comportamento passam a disparar.
Antes: o código da tag de Site próprio precisa estar em todas as páginas do site. Veja Instalar o script em um site próprio.
Loja de plataforma integrada não precisa disto
Nas tags de integração (Shopify, Bagy, Wbuy, VNDA, Wake, Nuvemshop, Loja Integrada e VTEX), o script já envia esses eventos sozinho.
Como enviar um evento
Cada evento é um objeto com o nome do evento em event e os dados em data, enviado com window.bevean.push:
window.bevean = window.bevean || [];
window.bevean.push({
event: 'product_viewed',
data: { productId: '123', name: 'Camiseta Azul', price: 89.9 }
});A primeira linha faz a chamada funcionar mesmo antes de o script terminar de carregar: o evento espera numa fila e sai assim que o script fica pronto. O script envia os eventos em lotes — a cada 2 segundos, ou assim que juntar 5 — e completa sozinho o endereço da página, o horário e quem é o visitante.
Use sempre o formato com event e data
Chamadas como window.bevean.push('product_viewed', dados) ou no formato do Google Analytics (['track', 'product_viewed', dados]) se perdem quando acontecem antes de o script carregar.
Identificar o visitante
As automações só começam para contatos. Enquanto a Bevean não sabe quem é o visitante, os eventos ficam registrados como anônimos e nenhum gatilho dispara para eles.
| Como o visitante é identificado | O que acontece |
|---|---|
| Formulário da Bevean enviado com e-mail ou telefone | O navegador passa a ser daquele contato. |
resolveUser no código do script, com e-mail | O navegador é ligado ao contato com aquele e-mail. Se não houver, a Bevean cria o contato. |
resolveUser só com telefone, ou só com o id do cliente | Não identifica. Para o código do site identificar o visitante, o e-mail é obrigatório. |
Para usar resolveUser, copie o código na tela da tag e acrescente a função depois da linha platform. Ela devolve os dados do cliente logado no seu site, ou null quando não há ninguém logado:
<script>
(function (w, d, s, src, cfg) {
w.beveanConfig = cfg;
w.bevean = w.bevean || [];
var js = d.createElement(s);
js.async = true;
js.src = src;
d.head.appendChild(js);
})(window, document, 'script', "https://cdn.bevean.ai/tracker/bevean.sdk.js", {
publicKey: "pk_bevean_...",
platform: "core",
resolveUser: function () {
var cliente = window.clienteLogado; // o objeto que o seu site expõe
if (!cliente || !cliente.email) return null;
return {
userId: String(cliente.id),
email: cliente.email,
name: cliente.nome,
phone: cliente.telefone
};
}
});
</script>| Regra | Por quê |
|---|---|
A função é síncrona: não use await nem devolva uma Promise. | Com uma Promise, o visitante fica anônimo. |
Todos os valores são texto. Converta o id com String(...). | Número no lugar de texto é ignorado. |
| O e-mail precisa ser válido. | Um e-mail inválido faz a Bevean recusar o lote inteiro de eventos. |
| A função é chamada a cada envio de lote. | O visitante que entra na conta no meio da navegação passa a ser identificado a partir do próximo lote. |
Computador compartilhado
Depois de identificado, o navegador continua ligado ao primeiro contato, mesmo que outra pessoa entre na conta depois.
Os eventos aceitos
A Bevean aceita só os eventos abaixo. Qualquer outro nome faz o lote inteiro ser recusado — inclusive os eventos certos que iam junto com ele.
| Evento | Quando enviar | O que libera |
|---|---|---|
page_viewed | A cada página vista. Em site de página única (SPA), a cada troca de tela. | Gatilho Página visualizada. |
product_viewed | Ao abrir a página de um produto. | Gatilho Produto visualizado. É também a base do Produto abandonado. |
category_viewed | Ao abrir uma categoria ou uma lista de produtos. | Gatilho Categoria visualizada. |
product_added_to_cart | Quando o visitante põe um produto no carrinho. | Gatilho Produto adicionado ao carrinho. Cancela o Produto abandonado. |
cart_viewed | Ao abrir o carrinho. | Fica no histórico do contato, para condições de automação. |
checkout_initiated | Quando o visitante começa a finalizar a compra. | Gatilho Carrinho abandonado — veja os limites em Carrinho abandonado em site próprio, abaixo. Cancela o Produto abandonado. |
add_payment_info | Quando o visitante escolhe a forma de pagamento. | Fica registrado. Não dispara automação. |
purchase | Na página de pedido confirmado. | Cancela o Produto abandonado. Não vira pedido na Bevean. |
form_viewed e form_submitted o script envia sozinho, com os formulários da Bevean. Não envie esses dois pelo código.
Exemplos de cada evento
Os campos são os mesmos em todos os eventos de produto. Nenhum é obrigatório para o evento ser aceito, mas é deles que saem o nome, a foto, o preço e o link do produto nas mensagens.
Página vista
O script completa sozinho o endereço, o caminho e o título da página. Em site de página única (SPA), mande os três a cada troca de tela, porque o script lê o endereço na hora em que o lote sai:
window.bevean.push({
event: 'page_viewed',
data: {
url: 'https://www.sualoja.com.br/camisetas',
path: '/camisetas',
title: 'Camisetas | Sua Loja'
}
});Produto visto
window.bevean.push({
event: 'product_viewed',
data: {
productId: '123',
variantId: '123-AZ-M',
sku: 'CAM-AZ-M',
name: 'Camiseta Azul',
price: 89.9,
currency: 'BRL',
image: 'https://www.sualoja.com.br/img/camiseta-azul.jpg',
url: 'https://www.sualoja.com.br/p/camiseta-azul',
categoryId: '10',
category: 'Camisetas',
brand: 'Sua Marca'
}
});Categoria vista
window.bevean.push({
event: 'category_viewed',
data: {
categoryId: '10',
name: 'Camisetas',
handle: 'camisetas',
url: 'https://www.sualoja.com.br/c/camisetas',
items: [
{ productId: '123', name: 'Camiseta Azul', price: 89.9, url: 'https://www.sualoja.com.br/p/camiseta-azul', image: 'https://www.sualoja.com.br/img/camiseta-azul.jpg' }
]
}
});Produto adicionado ao carrinho
Mande o carrinho em items e repita os campos do produto que acabou de entrar na raiz de data. É da raiz que a mensagem do gatilho Produto adicionado ao carrinho tira o produto:
window.bevean.push({
event: 'product_added_to_cart',
data: {
productId: '123',
variantId: '123-AZ-M',
sku: 'CAM-AZ-M',
name: 'Camiseta Azul',
price: 89.9,
quantity: 2,
image: 'https://www.sualoja.com.br/img/camiseta-azul.jpg',
url: 'https://www.sualoja.com.br/p/camiseta-azul',
cartToken: 'c_abc123',
value: 179.8,
currency: 'BRL',
items: [
{ productId: '123', variantId: '123-AZ-M', sku: 'CAM-AZ-M', name: 'Camiseta Azul', price: 89.9, quantity: 2 }
]
}
});Carrinho visto
window.bevean.push({
event: 'cart_viewed',
data: {
cartToken: 'c_abc123',
value: 179.8,
currency: 'BRL',
items: [
{ productId: '123', variantId: '123-AZ-M', sku: 'CAM-AZ-M', name: 'Camiseta Azul', price: 89.9, quantity: 2 }
]
}
});Início da finalização da compra
Envie numa página cujo endereço traga o carrinho de volta: é esse endereço que a mensagem de carrinho abandonado usa como link.
window.bevean.push({
event: 'checkout_initiated',
data: {
value: 179.8,
currency: 'BRL',
coupon: 'BEMVINDO10',
items: [
{ productId: '123', variantId: '123-AZ-M', sku: 'CAM-AZ-M', name: 'Camiseta Azul', price: 89.9, quantity: 2 }
]
}
});Forma de pagamento escolhida
window.bevean.push({
event: 'add_payment_info',
data: {
value: 179.8,
currency: 'BRL',
paymentType: 'pix',
items: [
{ productId: '123', name: 'Camiseta Azul', price: 89.9, quantity: 2 }
]
}
});Compra concluída
window.bevean.push({
event: 'purchase',
data: {
transactionId: 'PED-1043',
value: 179.8,
currency: 'BRL',
coupon: 'BEMVINDO10',
items: [
{ productId: '123', variantId: '123-AZ-M', sku: 'CAM-AZ-M', name: 'Camiseta Azul', price: 89.9, quantity: 2 }
]
}
});Campos dos produtos
| Campo | Tipo | Observação |
|---|---|---|
productId | texto | O identificador do produto no seu site. |
variantId | texto | A variação: cor, tamanho. |
sku | texto | — |
name | texto | O nome que aparece nas mensagens. |
price | número | Sem símbolo de moeda: 89.9, não 'R$ 89,90'. |
quantity | número | — |
currency | texto | 'BRL'. |
image | texto | Endereço completo, começando com https://. Um endereço relativo, começando com /, não mostra a imagem nas mensagens. |
url | texto | Endereço completo da página do produto. |
category, categoryId, brand | texto | — |
Valores do pedido e do carrinho (value) também são número. Identificadores (transactionId, cartToken) são texto.
Carrinho abandonado em site próprio
O gatilho Carrinho abandonado dispara com o checkout_initiated do seu site, para visitantes identificados. Antes de ativar uma automação com ele, conheça os limites:
A compra do site não conta como pedido
A condição Fez um pedido pago só enxerga pedidos que chegam por integração. O evento purchase não é pedido para a Bevean — então quem comprou no seu site também pode receber a mensagem de carrinho abandonado.
| O que | Em site próprio |
|---|---|
| Link do carrinho na mensagem | É o endereço da página em que o checkout_initiated foi enviado. |
| Itens e valor do carrinho na mensagem | Não aparecem: a Bevean só guarda o carrinho de lojas integradas. |
O que impede de funcionar
| Sintoma | Causa provável |
|---|---|
| Nenhum evento chega, nem os certos | Algum evento do lote tem nome fora da lista, ou o e-mail do resolveUser é inválido. A Bevean recusa o lote inteiro. |
| Os eventos chegam, mas a automação não começa | O visitante não está identificado. Confira o resolveUser ou se o visitante preencheu um formulário da Bevean. |
| Em site de página única, todos os eventos saem com o mesmo endereço | O script lê o endereço na hora do envio do lote. Mande url, path e title no page_viewed. |
| A mensagem sai sem foto ou com link errado | Use endereços completos em image e url. |
Para conferir os envios, abra as ferramentas de desenvolvedor do navegador, na aba Rede (Network), e filtre por events: cada lote aparece como uma chamada.