Saltar al contenido

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

ModoQué pasa cuando se detecta un problema
off (por defecto)Nada. Solo se crean reportes cuando la persona los envía.
askAparece 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.
autoEl 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

DisparadorQué cuenta
errorsExcepciones no capturadas y promesas rechazadas sin catch.
failedRequestsErrores de red y respuestas 5xx. Los 4xx nunca disparan (suelen ser comportamiento esperado), tampoco las requests canceladas.
rageClicks3 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.

TypeScript
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ónTipoPor defectoDescripción
mode'off' | 'ask' | 'auto''off'Ver arriba.
triggers.errorsbooleantrueExcepciones y promesas rechazadas.
triggers.failedRequestsbooleantrueErrores de red y 5xx.
triggers.rageClicksbooleantrueClics repetidos.
sampleRatenumber (0 a 1)1En modo auto, fracción de sesiones que envían reportes automáticos. 0.25 = 1 de cada 4 sesiones.
cooldownMinutesnumber5Minutos mínimos entre dos avisos o reportes automáticos en una sesión. Máximo 1.440.
ignorestring[][]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ñalCómo se detecta
Rage clicks3 o más clics en ~1 s dentro de 30 px.
Dead clicksClic 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 lentasRequests de más de 3 segundos.
Tareas largasCantidad y duración total de tareas que bloquearon el hilo principal.
Web VitalsLCP, 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:

TypeScript
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.