Status da instalação
Verifique se o rastreador Zenovay está funcionando sem precisar acompanhar o globo em tempo real. O endpoint Install Health retorna um retrato estruturado da atividade recente do rastreador, da acessibilidade do seu site, da configuração atual de cookieless e consentimento, além de uma lista acionável de problemas.
Você não pode abrir esta URL diretamente em um navegador. O endpoint exige um JWT Bearer — abrir a URL em uma nova aba retornará 401 Missing or invalid authorization header. As formas suportadas de ver o relatório:
- Painel (recomendado) — entre em app.zenovay.com, abra o seu domínio e clique em Configurações → Status da instalação.
- API — chame o endpoint com um JWT Bearer válido (o token de sessão do seu painel). Veja a referência da API abaixo.
Onde encontrá-lo
No painel Zenovay:
- Abra a página Domínios e clique no seu domínio.
- Abra Configurações e clique na aba Status da instalação.
- O relatório se atualiza automaticamente a cada 30 segundos. Use Atualizar para forçar uma nova checagem.
Lendo a resposta
Cada chamada retorna um objeto JSON com os seguintes campos:
| Campo | Tipo | Significado |
|---|---|---|
last_event_seen_at | ISO8601 | null | Carimbo de tempo mais recente em que o Zenovay recebeu algum evento para este site. |
minutes_since_last_event | number | null | Derivada prática do valor acima. |
last_event_count_5m | number | Visualizações de página + eventos personalizados recebidos nos últimos 5 minutos. |
last_event_count_24h | number | Mesma métrica nas últimas 24 horas. |
script_reachable | boolean | null | Resultado de uma sonda HEAD no servidor para o seu domínio. null = sonda bloqueada ou ambiente sandbox; false = erro HTTP; true = site respondeu normalmente. |
script_version | string | null | Versão do rastreador que o Zenovay está servindo no momento. |
csp_blocking_suspected | boolean | Reservado para uma heurística futura; sempre false em V1. |
cookieless_enabled | boolean | true quando ou o interruptor sem cookies do painel está ativado, ou o HTML servido contém data-cookieless="true" na tag de script do Zenovay. SPAs que injetam a tag de script a partir de um bundle JS separado (Next.js, loaders dinâmicos) não são detectados pelo scan do HTML — ative a configuração do painel explicitamente nesse caso. |
consent_recording_active | boolean | Se o banner de consentimento de cookies (CMP) está configurado para este site. Isto NÃO é session replay — a gravação de sessões é um recurso Pro+ separado controlado em Domínio → Configurações → Relatórios. |
last_5_event_types | string[] | Os cinco tipos de eventos personalizados mais recentes recebidos. |
issues | array | Itens acionáveis detectados pelo diagnóstico — veja abaixo. |
Cores de status no painel
Os quatro cartões no topo da aba usam os seguintes limites:
- Verde — eventos recebidos nos últimos 5 minutos.
- Amarelo — eventos recebidos na última hora, mas não nos últimos 5 minutos.
- Vermelho — silencioso por mais de uma hora ou nenhum evento jamais recebido.
Problemas comuns e correções
O array issues enumera os códigos de diagnóstico que o Zenovay pode retornar. Cada item carrega uma severity, um code estável, uma message legível e uma fix_url.
| Código | Severidade | Significado | O que fazer |
|---|---|---|---|
awaiting_first_event | info | O site foi criado há menos de 24 horas e o Zenovay ainda não viu nenhum evento. | Recarregue seu site para enviar a primeira visualização de página. |
script_never_installed | error | O Zenovay nunca recebeu eventos para este código de rastreamento. | Confirme que o script de rastreamento está em todas as páginas. |
silent_tracker | error | O intervalo atual entre eventos é pelo menos 10× maior do que o intervalo típico para este site (mínimo 6 horas, máximo 7 dias). Só dispara quando o site recebeu ≥5 eventos nas últimas 24 horas — sites pessoais com uma visita por dia nunca o disparam por engano. | Verifique se a tag de script ainda está presente, se um bloqueador de anúncios intercepta a requisição ou se uma Content Security Policy bloqueia api.zenovay.com. |
tracker_quiet | warn | O intervalo atual é pelo menos 3× maior do que o intervalo típico para este site (mínimo 1 hora, máximo 24 horas). Só dispara quando o site recebeu ≥10 eventos nas últimas 24 horas; sites de baixo tráfego não recebem aviso deliberadamente. | Abra seu site em uma nova aba para confirmar que continua rastreando. O aviso inclui o intervalo real e o intervalo típico para você julgar se é uma falha real. |
site_not_reachable | warn | O Zenovay alcançou seu site, mas recebeu um erro HTTP. | Verifique o status do seu provedor de hospedagem. |
probe_blocked | info | Uma regra de rede ou CSP bloqueou a sonda. O rastreador pode ainda estar funcionando. | Informativo — compare com o contador de eventos recentes. |
sandbox_detected | info | Seu domínio corresponde a um padrão conhecido de desenvolvimento (localhost, *.vercel.app, *.netlify.app etc.). | Esperado para ambientes de staging. |
Precisa ver exatamente o que está sendo enviado? Ative o Debug Overlay e acrescente ?zenovay_debug=1 a qualquer URL do seu site. Você verá os últimos 20 eventos enviados pelo rastreador com os dados pessoais mascarados — útil quando o Install Health relata tracker_quiet e você quer confirmar se uma página específica está disparando eventos.
Alertas por e-mail (opt-in por domínio)
Quando o diagnóstico dispara um erro silent_tracker para o seu domínio, o Zenovay envia um e-mail único para o proprietário do site. Quando os eventos voltam, você recebe um único e-mail de "tudo certo". Máximo de um e-mail por incidente — cinco camadas de deduplicação previnem spam:
- O cron executa a cada 6 horas, não a cada minuto.
- O próprio limite
silent_trackerexige um intervalo de no mínimo 6 horas. - Sites com menos de 5 eventos nas últimas 24 horas nunca disparam um alerta (um blog pessoal com uma visita por dia nunca lhe enviará um e-mail).
- Uma máquina de estados interna dispara apenas em transições (saudável → silencioso ou silencioso → saudável), nunca em execuções de cron consecutivas.
- A chave de idempotência do log de e-mails é ancorada no carimbo de tempo do primeiro silêncio do incidente — nem um bug na máquina de estados pode enviar dois e-mails silenciosos por incidente.
Domínios de sandbox/desenvolvimento (localhost, *.vercel.app, *.netlify.app, *.pages.dev, *.workers.dev, *.test, *.local) são totalmente excluídos dos alertas.
Ative ou desative os alertas por domínio em Domínio → Configurações → Status da instalação → Alertas por e-mail. Ativo por padrão.
Referência da API
/api/install-health/:trackingCodeDiagnóstico autenticado para um único site.
URL: https://api.zenovay.com/api/install-health/<SEU_CODIGO> — substitua <SEU_CODIGO> pelo seu código (ex.: ZV_AbCdEf...). A definição da rota usa a notação Express :trackingCode, mas o dois-pontos inicial não faz parte da URL real.
Autenticação: JWT Bearer (token de sessão do seu painel).
Cache: As respostas são armazenadas em cache por 30 segundos na borda para manter o polling do painel leve.
Privacidade: Nenhum dado pessoal (endereços IP, strings user-agent ou valores de referrer) aparece na resposta — apenas contadores, flags e nomes de tipos de evento.
Exemplo de requisição
# A URL NÃO leva dois-pontos no início — substitua ZV_SEU_CODIGO
# pelo seu código real em app.zenovay.com → Domínio → Configurações.
# O JWT Bearer é obrigatório; copie-o de uma sessão logada do painel
# via DevTools → Rede → /api/auth/user.
curl https://api.zenovay.com/api/install-health/ZV_SEU_CODIGO \
-H "Authorization: Bearer $SEU_JWT"Exemplo de resposta
{
"last_event_seen_at": "2026-05-02T21:15:42.110Z",
"minutes_since_last_event": 0,
"last_event_count_5m": 12,
"last_event_count_24h": 1843,
"script_reachable": true,
"script_version": "v2.0.1",
"csp_blocking_suspected": false,
"cookieless_enabled": true,
"consent_recording_active": false,
"last_5_event_types": ["pageview", "click", "scroll", "form_submit", "outbound_click"],
"issues": []
}O endpoint é intencionalmente autenticado. Os códigos de rastreamento são essencialmente públicos (estão embutidos no HTML do seu site), então um diagnóstico sem autenticação precisaria de sua própria lógica antiabuso. Use o JWT do seu painel.