Saltar al contenido principal

Requisitos

  • Node.js 22.12 o superior (descargar). Compruébalo con node -v.
  • npm (viene con Node) o pnpm. Los comandos usan npm; con pnpm, escribe pnpm add, pnpm create y pnpm exec. Con pnpm 11, la primera instalación de @botmesh/baileys se detiene con ERR_PNPM_IGNORED_BUILDS; ver Solución de problemas.
  • Para conectarlo de verdad: un teléfono con WhatsApp (su número pasa a ser el bot) o un token de bot de Telegram de @BotFather. El simulador de la terminal no necesita ninguno.
Betabotmesh está en beta: una instalación sin tag instala la beta, y @beta resuelve siempre a la más reciente (latest se mueve a mano tras cada publicación). Este sitio documenta la beta y después @botmesh/core 2.0.0 estable.

Opción A: generar un proyecto (recomendado)

create-botmesh genera un proyecto que funciona en el simulador y en el canal real:
Escribe hola, luego menu y luego /help. Cuando te convenza, conecta el canal real:
Si al .env le falta una variable que el proyecto necesita, npm start se detiene con una línea que la nombra (Missing TELEGRAM_TOKEN: copy .env.example to .env ...) antes de conectar nada. Las plantillas están escritas en español y fijan lang: 'es'. La lista completa de plantillas, los flags de la CLI y los archivos generados están en Plantillas de proyecto.

Opción B: montarlo a mano

1. Instalar

Para Telegram, instala @botmesh/telegram en lugar de @botmesh/baileys y usa la versión de bot.js para Telegram de O conectar Telegram: el archivo de abajo importa @botmesh/baileys, así que sin ese paquete no carga. botmesh solo publica módulos ES, así que el proyecto necesita "type": "module" (o archivos .mjs) y los paquetes se cargan con import.

2. Escribir el bot

Crea bot.js. El bot es una fábrica (defineBot): recibe un provider y devuelve el Bot configurado. Así el mismo archivo funciona en el simulador y en el canal real:
lang: 'es' pone en español los textos que escribe el framework (/help, reintentos, timeouts); sin él salen en inglés.

3. Probarlo en la terminal

El simulador inyecta un provider en memoria, así que nada sale de tu equipo, y recarga el bot al guardar el archivo. :help lista sus comandos y :quit sale. Más en Simulador en la terminal.

4. Conectar un canal real

Vincular WhatsApp

Aparece un código QR en la terminal. En el teléfono cuyo número será el bot:
  1. Abre WhatsApp → Ajustes → Dispositivos vinculados.
  2. Toca Vincular un dispositivo y escanea el QR.
Cuando salga ✅ Conectado, envía hola a ese número desde otro teléfono. La sesión se guarda en ./sessions/my-bot/, así que el siguiente arranque reconecta sin QR. Mantén esa carpeta privada y fuera de git: quien la tenga controla la cuenta.
Protocolo no oficialBaileys usa el protocolo de WhatsApp Web, que Meta no admite para bots: el número vinculado puede quedar restringido o bloqueado. Usa un número de repuesto mientras pruebas, y la Cloud API oficial en producción.
¿Sin cámara a mano?Vincula con un código: pasa el número del bot al provider e imprime el código que recibe.
Luego en WhatsApp: Dispositivos vinculados → Vincular un dispositivo → Vincular con el número de teléfono, y escribe el código.

O conectar Telegram

Crea un bot con @BotFather (/newbot) y copia su token. En bot.js cambian dos sitios: el import del provider arriba y el bloque de arranque abajo. La fábrica de en medio no cambia.
Crea con tu editor un archivo llamado .env junto a bot.js, con una línea:
No uses echo ... > .env en Windows PowerShell: escribe el archivo en UTF-16 o con BOM, Node no lee la variable y el provider se detiene con `token` is required. Después arranca el bot:
Abre tu bot en Telegram y envía hola. El provider usa long polling por defecto, así que no hace falta una URL pública.

Otros canales

Solo cambia el provider: handlers, flujos, hooks y plugins son los mismos en todos los transportes. La Cloud API oficial de WhatsApp, por ejemplo:
Funciona por webhook: tu servidor HTTP pasa el body crudo de cada POST a provider.ingest(rawBody, headers). Consulta Servidor de webhooks para montarlo y Canales para lo que admite cada transporte.

Solución de problemas

Plantillas de proyecto

Las plantillas de casos de uso (de games a ai-full) usan Baileys. Las de transporte (baileys, meta, telegram, ai) instalan los comandos slash integrados, así que /reset o /cancel sale de su flujo de ejemplo menu. Cada proyecto incluye package.json (con npm start y npm run dev), src/bot.js, .env.example, .gitignore, un README.md y un AGENTS.md que indica a los agentes de código con IA qué API usar y qué comandos ejecutar.

Siguientes pasos