Ejercicio: Cómo funciona un bot de WhatsApp
Objetivo
Aplicar la regla de la ventana de 24 horas con código y reconocer a qué categoría pertenece cada plantilla, para que el bot decida qué puede enviar en cada momento.
Cómo se trabaja
La parte A es de investigación y la haces con tu navegador: sirve para conocer la documentación oficial, que será tu mejor aliada. La parte B son tres funciones de JavaScript puro que se comprueban en esta página. Todas las horas se manejan como números en milisegundos (Date.now()), así que no necesitas fechas complicadas.
La ventana de 24 horas equivale a 24 * 60 * 60 * 1000 milisegundos. Considera que la ventana está abierta si pasó menos de ese tiempo desde el último mensaje del cliente.
| Motivo | Categoría |
|---|---|
codigo-verificacion |
authentication |
confirmacion-pedido, pedido-en-camino, recordatorio-pedido |
utility |
promocion, oferta, descuento |
marketing |
💡 Reto extra
Añade una función horasRestantes(ultimoMensajeCliente, ahora) que diga cuántas horas le quedan a la ventana (redondeando hacia abajo y sin devolver números negativos). Más adelante la usarás para decidir cuándo conviene enviar un recordatorio como texto libre y cuándo como plantilla.
Pasos
Marca cada paso a medida que lo completes. Tu avance se guarda en este navegador.
💡 Pista 1: Cómo medir el tiempo
Resta: ahora - ultimoMensajeCliente. Compara el resultado con 24 * 60 * 60 * 1000. No olvides el caso en que ultimoMensajeCliente sea null.
💡 Pista 2: puedoEnviar reutiliza ventanaAbierta
Si tipo === "plantilla", devuelve true. Si es "texto", devuelve lo que diga ventanaAbierta(...). Para cualquier otro tipo, devuelve false.
💡 Pista 3: Tabla de categorías
Un objeto como { "codigo-verificacion": "authentication", ... } y tabla[motivo] ?? "marketing" resuelve el caso por defecto con una sola línea.
🔎 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.
const VENTANA_MS = 24 * 60 * 60 * 1000;
function ventanaAbierta(ultimoMensajeCliente, ahora) {
if (ultimoMensajeCliente == null) return false;
return ahora - ultimoMensajeCliente < VENTANA_MS;
}
function puedoEnviar(tipo, ultimoMensajeCliente, ahora) {
if (tipo === "plantilla") return true;
if (tipo === "texto") return ventanaAbierta(ultimoMensajeCliente, ahora);
return false;
}
const CATEGORIAS = {
"codigo-verificacion": "authentication",
"confirmacion-pedido": "utility",
"pedido-en-camino": "utility",
"recordatorio-pedido": "utility",
"promocion": "marketing",
"oferta": "marketing",
"descuento": "marketing",
};
function categoriaPlantilla(motivo) {
return CATEGORIAS[motivo] ?? "marketing";
}