Se o teu sítio publica eventos de negócio no window.dataLayer (porque montaste o Google Tag Manager para o Google Analytics), esses eventos já chegam à Skomi. Não há nada para reescrever, nenhum adaptador para instalar, e nenhum segundo envio para acrescentar ao lado do primeiro.

Esta página explica o que acontece, o que não acontece, e os limites que vale a pena conhecer antes de dependeres disto.

Nada para fazer

Instala o fragmento. A Skomi liga-se ao dataLayer e lê o que lá é enviado.

As duas formas funcionam:

// a forma de objeto
dataLayer.push({ event: 'purchase', value: 49.00, currency: 'EUR' });

// gtag, que envia os próprios argumentos em vez de um objeto
gtag('event', 'purchase', { value: 49.00, currency: 'EUR' });

Podes ficar com o GTM. Podes ficar com o Google Analytics a correr ao lado da Skomi enquanto os comparas; é essa a maneira sensata de migrar, e não há nada aqui que interfira com ela.

Porque funciona seja qual for o script que carregue primeiro

O GTM substitui o dataLayer.push pelo seu próprio invólucro quando o gtm.js acaba de carregar, e os dois scripts carregam de forma assíncrona. Com uma atribuição simples, o que carregasse em segundo lugar sobrescreveria o invólucro do outro e engoliria os eventos dele em silêncio.

A Skomi instala o push como um acessor, portanto a atribuição do GTM chega ao setter e passa a ser a função para a qual a Skomi delega. O nosso fica à frente seja qual for o desfecho da corrida. Não tens de ordenar as tuas etiquetas.

O que é recolhido

O nome do evento: o event no objeto, ou o segundo argumento do gtag.

Todas as propriedades, achatadas em caminhos com pontos, porque as propriedades de um evento são guardadas como texto:

dataLayer.push({
  event: 'purchase',
  transaction_id: 'ORD-1234',
  value: 49.00,
  currency: 'EUR',
  ecommerce: { items: [{ item_name: 'Pro plan', price: 49.00 }] }
});

chega como transaction_id, value, currency, ecommerce.items.0.item_name, ecommerce.items.0.price.

O valor monetário, lido do value ou do ecommerce.value. O texto é aceite, porque os valores do dataLayer chegam muitas vezes de um modelo como texto.

A moeda, do currency ou do ecommerce.currency da mesma maneira. Um evento de comércio eletrónico do GA4 já traz o { value, currency } junto, portanto um sítio ligado ao Google está a enviar à Skomi uma compra completamente denominada sem dar por isso.

O número da encomenda. O servidor lê o transaction_id das propriedades, e uma repetição do mesmo número é deitada fora em vez de contada, o que importa mais do que parece. Uma página de confirmação dispara em todos os carregamentos: uma recarga, um botão de recuar, reabrir o email uma semana depois. Sem um número de encomenda, isso são três vendas.

O que não é recolhido

Os eventos de ciclo de vida do próprio GTM. Tudo o que esteja no espaço de nomes gtm., e as chaves que o GTM usa para controlar o seu próprio despacho: event, eventCallback, eventTimeout, eventModel, _clear. Não dizem nada sobre o teu negócio e ultrapassariam em número os eventos verdadeiros em várias vezes.

Tudo o que passe dos limites. São reais e vale a pena conhecê-los antes de dares com eles:

Limite Valor
Propriedades por evento 25
Profundidade de aninhamento 3 níveis
Nome da propriedade 64 caracteres
Valor da propriedade 255 caracteres
Número da encomenda 128 caracteres

⚠ Um ecommerce.items grande não cabe. Cada item contribui com várias propriedades, portanto uma encomenda de dez linhas passa bem dos vinte e cinco e o resto é deitado fora em vez de cortado item a item. Se o detalhe por linha te importa, pertence aos relatórios da tua própria loja; a Skomi grava a encomenda, o valor dela e a moeda, não o conteúdo. Não há uma dimensão de produto em lado nenhum da Skomi.

As integrações do próprio Google. A sinalização do Consent Mode, a exportação de audiências, a ligação ao Google Ads. Isso é entre o GTM e o Google e a Skomi não faz parte disso.

Onde os eventos aparecem

Com os nomes deles, ao lado dos que a Skomi recolhe sozinha. Cada evento grava de onde veio: datalayer para estes, api para uma chamada skomi.track() escrita à mão, auto para as ligações para fora e os descarregamentos que a Skomi recolhe sem lhe pedirem, para que consigas distinguir um evento que pediste de um que apenas permitiste.

Transforma qualquer um deles num objetivo para obteres a taxa de conversão dele.

Se preferires chamá-lo diretamente

skomi.track('purchase', { plan: 'pro' }, 49.00, 'EUR', 'ORD-1234');

Nome, propriedades, valor, moeda, número da encomenda, os três últimos opcionais. Usa-o para eventos que não têm razão nenhuma para passar pelo GTM. Um sítio que não tem dataLayer nenhum não precisa de um.

Confirmar que resultou

Envia um evento de teste a partir da consola no domínio verdadeiro:

dataLayer.push({ event: 'test_event', value: 1, currency: 'EUR' });

Depois procura o test_event nos teus eventos. Se não estiver lá, percorre o que verificar quando o fragmento não funciona, e repara que o localhost não recolhe nada, porque não é o domínio que registaste.