Saltar para o conteúdo
Glossia Documentação
⌘K
Português (Brasil)
English Deutsch Español Français 日本語 한국어 Português (Brasil) 简体中文
Entrar
⌘K
esc

SDK de Análise

Edition: Community and Enterprise Compare editions

Os campos coletados, o endpoint de eventos e o modelo de privacidade por trás das análises web da Glossia.

Endpoint de Eventos

POST https://glossia.ai/v1/collect

POST /api/analytics/events permanece disponível para compatibilidade. O script hospedado deriva /v1/collect de sua própria origem; integrações de pacote devem definir endpoint explicitamente.

Aceita um evento JSON do SDK @glossia/web. Sempre responde 202 Accepted, inclusive para domínios desconhecidos ou cargas de dados malformadas, para que o SDK nunca divulgue quais projetos coletam análises.

O projeto é resolvido pelo domínio do site que o trecho declara. d é autoritativo; quando ausente, o servidor recai para o host de u (o URL da página) e depois para o cabeçalho do pedido Origin/Referer.

Corpo do pedido

Campo Tipo Descrição
d string Domínio do site que identifica o projeto (por exemplo, example.com). Enviado pela biblioteca do navegador; a resolução alternativa é descrita acima.
n string Nome do evento. Padrão pageview.
u string URL da página (location.href).
r string Referrer (document.referrer).
l string Idiomas do navegador (navigator.languages.join(",")).
sl string Idioma da página atual (document.documentElement.lang). Vazio se não declarado.
al string Idiomas de tradução separados por vírgula de link[rel="alternate"][hreflang], excluindo x-default.
tz string Fuso horário IANA (Intl.DateTimeFormat().resolvedOptions().timeZone).
sw string Largura da tela em pixels CSS.
sid string ID de sessão por aba (sessionStorage, limpo ao fechar).

CORS está aberto (Access-Control-Allow-Origin: *) porque o endpoint não aceita credenciais.

Campos derivados do servidor

Estes são computados na ingestão e armazenados no lado do servidor. O IP bruto e o User-Agent nunca são armazenados.

Campo Origem Descrição
visitor_id HMAC Hash rotativo diariamente de IP + UA + projeto. Não vinculável entre dias.
country_code Cloudflare / GeoIP Código ISO 3166-1 alpha-2 de um cabeçalho CF-IPCountry confiável, ou o adaptador de geolocalização de IP configurado. Vazio quando nenhum resolve um país.
device User-Agent desktop, mobile, tablet, bot, ou unknown.
browser User-Agent chrome, safari, firefox, edge, opera, ou unknown.
os User-Agent windows, macos, ios, android, linux, ou unknown.
hostname URL da página Host com minúsculas.
pathname URL da página Componente do caminho.
referrer_source Referrer Host do referrer, iniciando com www./m. removido.
browser_language Idiomas Local mais preferido normalizado (por exemplo, pt-BR).
served_locale Idioma da página sl normalizado, ou vazio (mostrado como Não notificado) se não foi coletado.
has_locale_gap Computado 1 quando nenhum dos idiomas preferidos do visitante corresponde aos alvos do projeto, traduções anunciadas (al), ou idioma da página (sl). Preferências ausentes não contam como uma lacuna.

Resolução do IP do cliente

Para pedidos de um reengressor privado, o Glossia usa o cabeçalho X-Real-IP sobrescrito do nginx, não a primeira entrada controlada pelo chamador em X-Forwarded-For. Conexões públicas diretas usam o endereço do socket. No Hetzner, tanto o balanciante de carga quanto o nginx devem habilitar o protocolo PROXY para que o nginx receba o endereço do visitante em vez do endereço do balanciante de carga. Outros proxies reversos também devem substituir X-Real-IP usando uma fonte autenticada, não um cabeçalho X-Forwarded-For de entrada não restrito. A política de cabeçalho encaminhado do gráfico genérico por si só não garante isso. Pares privados são infraestrutura confiável, portanto limite o acesso direto ao pod.

GLOSSIA_TRUST_CLOUDFLARE_CLIENT_IP_HEADER=true permite que CF-Connecting-IP sobreponha o endereço canônico para pedidos de um reengressor privado. Está desabilitado por padrão, independentemente da confiança no cabeçalho do país. Habilitar apenas depois que a borda autentica o Cloudflare ou remove cabeçalhos forjados em pedidos que desviam o Cloudflare. Implantações DNS-only devem mantê-lo desabilitado. Este endereço também chaveia limites de taxa de IP e o hash diário de visitante.

Resolução de país

GLOSSIA_TRUST_CLOUDFLARE_COUNTRY_HEADER=true habilita o caminho rápido CF-IPCountry. Está desabilitado por padrão. Habilite apenas depois que o origem autentica o Cloudflare, rejeita pedidos que desviam o Cloudflare, ou o reengressor remove cópias não confiáveis do cabeçalho. A configuração de Geolocalização de IP do Cloudflare também deve estar habilitada para a zona. CF-Connecting-IP, CF-Ray e use-forwarded-headers do nginx não autenticam um pedido por si próprios.

Quando a confiança em cabeçalho está habilitada, um único código ISO de país válido é usado imediatamente, sem pesquisa de IP ou acesso ao cache. O valor atual da borda sempre tem prioridade sobre qualquer pesquisa em cache. Códigos ausentes, duplicados, malformados ou desconhecidos, inclusive os valores XX (desconhecido) e T1 (Tor) do Cloudflare, recai para o adaptador de geolocalização configurado.

Sem banco de dados MaxMind configurado, as pesquisas alternativas usam api.ipapi.is, depois api.country.is quando o pedido primário falha ou retorna nenhum país reconhecido. Cada pedido tem um limite de tempo de conexão e resposta de um segundo com reenvios desabilitados. Resultados bem-sucedidos de qualquer provedor são cacheados pelo Cachex por 24 horas, com limite de tamanho agendado de 100.000 entradas e reclusão automática de expiração. Cachex.fetch/3 colapsa erros concorrentes para o mesmo IP em um único resolutor. Falhas não são cacheadas. Endereços privados e reservados não são enviados a nenhum provedor.

Idioma da página ausente

O painel exibe Não notificado quando um evento não tem sl. Isso inclui eventos coletados por versões mais antigas do rastreador e páginas sem um atributo HTML lang. O idioma da página não é inferido das preferências do navegador ou do URL. Eventos históricos mantêm os metadados coletados naquele momento; novas versões do rastreador não preenchem esses dados retrospectivamente.

Modelo de Privacidade

  • Sem identificador persistente de sessão cruzada. O SDK não define cookies e armazena apenas um ID de sessão por aba em sessionStorage, que o navegador limpa ao fechar.
  • Sem fingerprinting. Prints de canvas, WebGL, fontes e áudio não são coletados. O hash rotativo diariamente do servidor fornece unicidade sem eles.
  • Sem identificadores brutos persistidos. IP e User-Agent são lidos uma vez, hashados com um segredo do servidor e um sal diário, depois descartados.
  • Escopo por projeto. O mesmo navegador em dois projetos gera IDs de visitante não relacionados, para que visitantes não possam ser rastreados entre clientes do Glossia.