Saltar al contenido
Chatbots de WhatsApp desde cero
Temario

Ejercicio: Pruebas, registros y errores comunes

  • ⏱ 45 minutos
  • 📶 Nivel: intermedio

Objetivo

Escribir las cuatro piezas de fiabilidad que usa el bot en producción: decidir si un fallo se reintenta, calcular la espera entre intentos, interpretar un código de error de Meta y ocultar teléfonos en los logs.

Cómo se trabaja

La parte A es práctica real en tu terminal con el código de referencia. La parte B son cuatro funciones de JavaScript puro que se comprueban en esta página. No uses import ni process: solo funciones.

💡 Reto extra

Escribe reintentarConEsperas(estados): recibe una lista de estados HTTP simulados (por ejemplo [500, 503, 200]) y devuelve cuántos intentos hizo y cuánto esperó en total, aplicando esReintentable y esperaReintento con un máximo de 3 intentos.

▶ Prueba tu código aquí (opcional)
Consola

Pasos

Marca cada paso a medida que lo completes. Tu avance se guarda en este navegador.

💡 Pista 1: Potencias de dos

El intento 1 espera baseMs, el 2 espera el doble, el 3 el cuádruple... Eso es baseMs * 2 ** (intento - 1). Con Math.min(valor, maxMs) pones el tope.

💡 Pista 2: Tabla de errores

Un objeto como { 131047: "plantilla", 131030: "corregir", ... } y tabla[codigo] ?? "revisar" resuelve el caso por defecto. Las claves numéricas de un objeto se convierten en texto, pero tabla[131047] funciona igual.

💡 Pista 3: Teléfonos

Convierte a texto con String(tel) y usa slice(0, 3) y slice(-3) para tomar el principio y el final.

🔎 Comprueba tu trabajo

Pega tu código y pulsa Comprobar. La revisión ocurre en tu navegador; nada se envía a ningún sitio. Cada punto en rojo incluye una pista. Pega solo el JavaScript, sin las etiquetas <script>.

    ✅ Ver una solución posible

    Intenta resolverlo antes de mirar. Tu versión puede ser distinta y también correcta.

    fiabilidad.js
    function esReintentable(estadoHttp) {
      return estadoHttp === 429 || estadoHttp >= 500;
    }
    
    function esperaReintento(intento, baseMs = 500, maxMs = 8000) {
      return Math.min(baseMs * 2 ** (intento - 1), maxMs);
    }
    
    const ACCIONES = {
      131047: "plantilla",
      131030: "corregir",
      190: "corregir",
      131008: "corregir",
      131009: "corregir",
      131056: "esperar",
      131048: "esperar",
      131026: "ignorar",
    };
    
    function accionParaError(codigo) {
      return ACCIONES[codigo] ?? "revisar";
    }
    
    function ocultarTelefono(tel) {
      const s = String(tel);
      return s.length <= 6 ? "***" : s.slice(0, 3) + "***" + s.slice(-3);
    }