Documentación
Captura automática
Reportes automáticos o sugeridos cuando ocurre un error, y señales de comportamiento como rage clicks, dead clicks y Web Vitals.
Por defecto, Wutbug solo crea un reporte cuando una persona lo envía. La captura automática agrega dos modos opcionales para no perder errores que nadie reporta. Además, cada reporte incluye señales de comportamiento que el SDK detecta durante la sesión.
Modos
| Modo | Qué pasa cuando se detecta un problema |
|---|---|
off (por defecto) | Nada. Solo se crean reportes cuando la persona los envía. |
ask | Aparece un aviso discreto: "Parece que algo falló. ¿Nos cuentas qué pasó?". Si la persona toca Reportar, se abre el formulario con lo detectado prellenado. Si no, no se envía nada. |
auto | El SDK envía un reporte solo, sin intervención, con el replay, la consola y la network de ese momento. No incluye captura de pantalla. |
El modo auto necesita endpoint: en modo local no se activa.
Disparadores
| Disparador | Qué cuenta |
|---|---|
errors | Excepciones no capturadas y promesas rechazadas sin catch. |
failedRequests | Errores de red y respuestas 5xx. Los 4xx nunca disparan (suelen ser comportamiento esperado), tampoco las requests canceladas. |
rageClicks | 3 o más clics en ~1 segundo en el mismo lugar (radio de 30 px). |
Configuración
Se configura por proyecto en el dashboard (Proyecto → Captura automática) o en código. Lo que pongas en código gana, campo por campo, y las reglas ignore de ambos lados se combinan.
wutbug.init({
projectKey: 'pk_tu_key',
endpoint: 'https://api.wutbug.dev',
autoCapture: {
mode: 'ask',
triggers: { errors: true, failedRequests: true, rageClicks: false },
sampleRate: 0.25,
cooldownMinutes: 10,
ignore: ['ResizeObserver loop', '/api/analytics'],
},
});| Opción | Tipo | Por defecto | Descripción |
|---|---|---|---|
mode | 'off' | 'ask' | 'auto' | 'off' | Ver arriba. |
triggers.errors | boolean | true | Excepciones y promesas rechazadas. |
triggers.failedRequests | boolean | true | Errores de red y 5xx. |
triggers.rageClicks | boolean | true | Clics repetidos. |
sampleRate | number (0 a 1) | 1 | En modo auto, fracción de sesiones que envían reportes automáticos. 0.25 = 1 de cada 4 sesiones. |
cooldownMinutes | number | 5 | Minutos mínimos entre dos avisos o reportes automáticos en una sesión. Máximo 1.440. |
ignore | string[] | [] | Fragmentos (sin distinguir mayúsculas) del mensaje de error, de la URL de la request o del elemento que nunca disparan. Hasta 50 reglas de 200 caracteres. |
Límites que siempre se aplican
Para que la captura automática nunca inunde tu proyecto ni moleste a tus usuarios:
- Un aviso o reporte por problema y sesión. El mismo error (normalizado) no dispara dos veces en una sesión del navegador.
- Máximo 3 reportes automáticos y 3 avisos por sesión, sin importar la configuración.
- Pausa entre disparos según
cooldownMinutes. - Nunca mientras el formulario está abierto o se está enviando un reporte, así no puede entrar en un bucle con su propio trabajo.
- El estado se guarda en
sessionStorage, así que recargar la página no reinicia los límites. - Los reportes automáticos también cuentan para los límites del proyecto.
En el dashboard, los reportes que no envió la persona por su cuenta llevan una etiqueta de origen: Tras aviso (la persona aceptó el aviso) o Automático. Puedes filtrar la lista de reportes por origen.
Señales de comportamiento
Independiente del modo, cada reporte incluye señales detectadas en la ventana de 2 minutos. Ayudan a entender qué frustró a la persona aunque no haya un error en consola.
| Señal | Cómo se detecta |
|---|---|
| Rage clicks | 3 o más clics en ~1 s dentro de 30 px. |
| Dead clicks | Clic en algo clickeable (botón, link, role="button"…) que en 1 s no cambia la página, no navega y no dispara ninguna request. |
| Requests lentas | Requests de más de 3 segundos. |
| Tareas largas | Cantidad y duración total de tareas que bloquearon el hilo principal. |
| Web Vitals | LCP, CLS, INP (aproximado: la interacción más lenta), FCP y TTFB, con los umbrales de Google. |
El elemento clickeado se describe en corto (etiqueta, id, hasta 2 clases y hasta 40 caracteres de texto visible o aria-label). Si el elemento está dentro de una zona enmascarada, no se guarda su texto; el texto pasa por los mismos filtros de redacción.
Para desactivar las señales:
wutbug.init({ projectKey: 'pk_tu_key', endpoint: 'https://api.wutbug.dev', capture: { behavior: false } });El detector es liviano: un listener pasivo de clics, algunos PerformanceObserver y un MutationObserver que solo existe durante el segundo posterior a un clic. Nunca fuerza cálculos de layout.