Uma checagem de bots fica nas páginas que mais importam: o login, o cadastro, o checkout. É isso que a torna útil, e também o que a torna perigosa. Se todo checkout espera por ela, no dia em que ela estiver lenta o seu checkout fica lento; no dia em que ela cair, você cai junto.
Fail-open, fail-closed
Quando a checagem não consegue responder, há duas escolhas. Fail-closed bloqueia o visitante: seguro contra bots, fatal para o negócio, porque todo cliente de verdade também é bloqueado. Fail-open deixa o visitante passar: durante a indisponibilidade, os bots entram como entravam antes de você ter uma checagem, e mais ninguém percebe.
Para quase todo site, fail-open é o certo. Alguns minutos sem proteção contra bots custam pouco; alguns minutos sem checkout custam muito, inclusive a confiança de quem viu.
Quatro regras para chamar uma checagem de bots
- Um timeout curto. Escolha o máximo que você aceita somar à página, de 100 a 200 ms, e imponha no seu código. Nunca dependa de o outro lado ser rápido.
- Qualquer erro deixa o visitante passar. Um timeout, um erro de conexão, um 5xx, um 402 de plano esgotado ou uma resposta que você não consegue ler: tudo significa "sem resposta", e sem resposta significa seguir em frente.
- Só aja com uma resposta clara. Bloqueie na classe de bot mais alta; com evidência mais fraca, adicione atrito, como um código por email, nunca um muro.
- Registre o que falhou. Conte os timeouts e erros, para que uma indisponibilidade vire um gráfico, não um mistério.
Como fica no código
const d = await fetch(API + "/v1/decide", {
method: "POST",
headers: { Authorization: `Bearer ${KEY}` },
body: JSON.stringify({ ip, user_agent, token, path }),
signal: AbortSignal.timeout(150),
}).then((r) => r.json()).catch(() => null);
if (d?.class === "bot_high") return res.status(403).end();
// qualquer outra coisa, inclusive sem resposta: siga em frente
O catch é a política inteira: o que der errado vira null, e null nunca é um bot.
O lado do navegador também é fail-open
O script na sua página também nunca deve travá-la. Se não conseguir falar com o serviço, a página funciona exatamente como funcionaria sem ele; a decisão do servidor só tem menos evidência daquela vez.
Como o Bot Protection foi pensado para isso
O Bot Protection é uma chamada do seu servidor, não um proxy na frente do seu site, então ele nunca fica no caminho de uma requisição que você não escolheu checar. A tag espera um tempo limitado e desiste em silêncio. Ao atingir o seu limite de gasto, ele responde 402, que o seu código trata como qualquer outro erro: os visitantes passam, e você recebe um email antes de isso acontecer.