Saltar al contenido principal
Nivel: Principiante · Etiquetas: WhatsApp, Telegram, Flujos, Botones Funciones que muestra: menús numerados con flow().choose() · sub-flujos con then · c.state · bot.conversation() · botones por transporte · matriz de capacidades

Requisitos previos

Node.js 22.12 o superior y una carpeta con "type": "module" (ver Inicio rápido). Después instala:

El bot completo

Transcripción de ejemplo

Capturada con npx botmesh dev bot.js. El simulador muestra botones nativos, así que valorar los enseña; :click 1 toca el primero:

Cómo funciona

  • .choose(texto, opciones, clave) envía un menú numerado y espera. El usuario responde con el número, la clave o la etiqueta (“pepperoni”); cualquier otra cosa reenvía el menú. La clave elegida queda en c.state[clave].
  • then corre cuando se elige esa opción: un flujo entero (pedido, que se ejecuta en línea y vuelve) o una función como (_ctx, c) => c.say(...). flow([]) no tiene trigger, así que solo corre desde el menú.
  • Botones. WhatsApp Web dejó de soportar los botones nativos, así que en Baileys ctx.buttons() llegaría como una lista numerada que el usuario responde con un número. ctx.capabilities?.buttons indica si el canal los muestra; un toque llega como un mensaje buttons cuyo texto es el id del botón, por eso lo recibe c.waitAny() (c.waitText() solo acepta texto escrito, y el usuario aún puede escribir en vez de tocar). En el resto, c.choose() hace la misma pregunta como menú numerado.
  • Salida de emergencia. Añade slashCommandsPlugin y /cancel sale de cualquier menú: los comandos siempre ganan a una conversación activa.

Ejecutarlo en WhatsApp o Telegram

node bot.js muestra un QR: escanéalo en WhatsApp → Dispositivos vinculados (los menús salen numerados). En Telegram, instala @botmesh/telegram y cambia el provider como se muestra en O conectar Telegram: valorar muestra entonces un teclado inline.

Siguientes pasos