Saltar al contenido
nvíame
Capítulo 5 de 59 min2 oct 2026

Métricas de bot

Contención, resolución, abandono y CSAT: qué medir y cómo no engañarte.

Medir un bot es fácil; medirlo bien no. La métrica más citada, la contención, puede mejorar mientras la experiencia empeora.

Métricas que importan

  • Resolución: conversaciones donde el objetivo del usuario se cumplió (turno agendado, pedido rastreado).
  • Contención: conversaciones sin derivación a humano.
  • Abandono por paso: dónde se van los usuarios. Revela el paso mal diseñado.
  • Recontacto: usuarios que vuelven por el mismo tema en 48 h. Indica falsa resolución.
  • CSAT al cierre, con una pregunta simple de 1 a 5.

Instrumenta con eventos

track("bot.step", { flow: "turnos", step: "pedir_hora", session });
track("bot.resolved", { flow: "turnos", durationMs });
track("bot.handoff", { flow: "turnos", reason: "misses" });

Un bot sin métricas es una caja negra que se degrada en silencio. Las métricas útiles no son las de volumen —cuántos mensajes— sino las de resultado: cuántas conversaciones terminan resueltas, cuántas se derivan y cuántas se abandonan a mitad de flujo.

Instrumenta cada transición de estado como un evento con usuario, paso de origen, paso de destino y tiempo transcurrido. Con eso puedes construir un embudo por flujo y ver exactamente en qué pregunta se va la gente.

Pruébalo

// Record funnel events for each state transition
const eventos = [];
let paso = "inicio";

function ir(nuevo) {
  eventos.push({ de: paso, a: nuevo, t: Date.now() });
  paso = nuevo;
}

mx.bot.onMessage(({ text }) => {
  const t = text.trim().toLowerCase();
  if (t === "resumen") {
    const embudo = {};
    eventos.forEach((e) => { embudo[e.a] = (embudo[e.a] || 0) + 1; });
    return mx.bot.reply("Embudo: " + JSON.stringify(embudo));
  }
  if (paso === "inicio") { ir("pidio_correo"); return mx.bot.reply("¿Cuál es tu correo?"); }
  if (paso === "pidio_correo") {
    if (!t.includes("@")) { ir("error_correo"); paso = "pidio_correo"; return mx.bot.reply("Ese correo no parece válido."); }
    ir("resuelto"); return mx.bot.reply("¡Listo! Escribe 'resumen' para ver el embudo.");
  }
  ir("inicio"); return mx.bot.reply("Escribe cualquier cosa para empezar de nuevo.");
});

mx.bot.reply("Hola. Escribe algo para empezar.");
Se completa automáticamente al leer el 80%.

Comentarios (3)

Sofía Castillo2 oct 2026

¿La tasa de contención alta es siempre buena?

Equipo nvíameAutor2 oct 2026

No. Un bot que nunca deriva tiene contención alta y usuarios furiosos. Mírala siempre junto a resolución real y a la tasa de recontacto en 48 horas.

Diego Fernández2 oct 2026

Lo apliqué en el proyecto del trabajo. La sección «Métricas de bot» me ahorró una discusión larga con el equipo: ahora tenemos un criterio compartido.

Joaquín Vega2 oct 2026

¿Hay alguna diferencia importante si lo implemento en un servicio con varias instancias detrás de un balanceador?

Equipo nvíameAutor2 oct 2026

Sí: todo estado que hoy vive en memoria (contadores, sesiones, claves vistas) debe moverse a un almacén compartido con TTL, como Redis. Si no, cada instancia ve solo una parte de la historia.

Los comentarios se guardan solo en este navegador.