Skip to main content
Nivel: Intermedio · Etiquetas: WhatsApp, Datos de usuario, Conversaciones Funcionalidades: datos de usuario (ctx.user) · namespaces · conversaciones async · validación y maxAttempts · MemoryStore con archivo · comandos slash

Requisitos

  • Node.js 22.12 o superior y una carpeta vacía con "type": "module" en su package.json (Inicio rápido).

El bot completo

Cómo funciona

  1. Una conversación como función. bot.conversation(nombre, fn, { trigger }) es la forma async de un flujo: ifs y variables normales deciden qué preguntar. Su ctx es el contexto completo del mensaje, así que ctx.user funciona directamente.
  2. Memoria por usuario. ctx.user es un perfil por remitente, el mismo en su chat privado y en todos los grupos. ns('orders') separa las claves de esta función del resto del perfil, y /forget borra solo esas.
  3. Estado de la conversación. code y last solo viven mientras dura la conversación; lo que debe sobrevivirla va a ctx.user. orders.update({ last, followed }) escribe las dos claves en una llamada.
  4. Validación. validate rechaza números de pedido desconocidos con una pista, y maxAttempts: 3 termina la conversación tras tres respuestas inválidas.
  5. Sobrevivir a reinicios. MemoryStore({ file }) guarda perfiles y checkpoints en pedidos.json cada minuto y al parar el bot, y los carga al arrancar. Nada para el bot por sí solo con Ctrl+C, así que el bloque de arranque llama a bot.stop() con SIGINT: sin él, se pierden los cambios del último minuto. Usa SQLite o Redis cuando varios procesos comparten los datos.
Fuera de un handler (un webhook de tu tienda, una tarea programada) el mismo perfil es bot.user(userId); por ejemplo, await bot.user(userId).ns('orders').get('followed') para saber a quién avisar cuando sale un pedido.

Pruébalo

:as bob cambia a otro usuario (en su propio chat privado) y :reset reinicia el bot desde la factory:

Ejecútalo en WhatsApp o Telegram

node bot.js muestra un código QR: escanéalo desde WhatsApp → Dispositivos vinculados. Para Telegram, instala @botmesh/telegram y cambia el provider del bloque de arranque por new TelegramProvider({ token: process.env.TELEGRAM_TOKEN ?? '' }), como en O conectar Telegram.

Siguientes pasos