El tráfico de agentes (Claude, ChatGPT, Perplexity, marcos de agentes) llegará a su sitio más que los navegadores humanos para fines de 2026. Los análisis estándar pasan por alto la mayor parte. Este tutorial agrega un clasificador de tráfico agente en tiempo real a cualquier Nodo o tiempo de ejecución de borde, con búsqueda inversa a través de Scavio para clasificar agentes de usuario desconocidos.
Requisitos previos
- Nodo 20+ o tiempo de ejecución perimetral (Cloudflare Workers, Vercel)
- Una clave API de Scavio
- Acceso a encabezados/registros de solicitudes
Guia paso a paso
Paso 1: Capturar señales de solicitud
Los encabezados User-Agent, IP y Accept son la base.
function captureSignals(req) {
return {
ua: req.headers['user-agent'] || '',
ip: req.headers['x-forwarded-for'] || req.ip,
accept: req.headers['accept'] || ''
};
}Paso 2: Coincidir con UA de agentes conocidos
Comience con una lista codificada.
const KNOWN = [
/ChatGPT-User/, /GPTBot/, /ClaudeBot/, /PerplexityBot/, /OAI-SearchBot/,
/anthropic/i, /Claude-Web/, /Agent\//i
];
function isKnownAgent(ua) { return KNOWN.some(r => r.test(ua)); }Paso 3: Búsqueda inversa de UA desconocidos
Para UA sospechosos desconocidos, la búsqueda de Scavio confirma si se trata de un bot documentado.
async function classifyUnknown(ua) {
const r = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST',
headers: { 'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({ query: `\"${ua}\" bot OR crawler OR agent\` })
});
const data = await r.json();
return data.organic_results?.some(o => /bot|crawler|agent/i.test(o.snippet));
}Paso 4: Emitir un evento estructurado
Envíe visitas clasificadas a su canal de registros.
function emit(signals, type) {
console.log(JSON.stringify({ ts: Date.now(), type, ...signals }));
}Paso 5: Cree un panel en vivo
Transmita eventos a Grafana o a un contador SQLite simple para un conteo en vivo.
# SQLite counter example
sqlite3 agentic.db 'SELECT type, COUNT(*) FROM hits GROUP BY type;'Ejemplo en Python
import os, requests, re
API_KEY = os.environ['SCAVIO_API_KEY']
KNOWN = [r'ChatGPT-User', r'GPTBot', r'ClaudeBot', r'PerplexityBot']
def classify(ua):
if any(re.search(p, ua) for p in KNOWN):
return 'known_agent'
r = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'query': f'"{ua}" bot OR crawler'})
hits = r.json().get('organic_results', [])
return 'probable_agent' if hits else 'human'
print(classify('ChatGPT-User/1.0'))Ejemplo en JavaScript
const API_KEY = process.env.SCAVIO_API_KEY;
const KNOWN = [/ChatGPT-User/, /GPTBot/, /ClaudeBot/, /PerplexityBot/];
export async function classify(ua) {
if (KNOWN.some(r => r.test(ua))) return 'known_agent';
const r = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST',
headers: { 'x-api-key': API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({ query: `"${ua}" bot OR crawler` })
});
const data = await r.json();
return data.organic_results?.length ? 'probable_agent' : 'human';
}Salida esperada
Real-time stream of classified hits: known_agent, probable_agent, human. Typical finding: 30-45% of 2026 traffic is agentic on B2B SaaS landing pages.