defineBot) ·
canales ·
ids de chat y remitente ·
identidad por transporte ·
espacio de nombres del almacenamiento ·
store SQLite ·
datos de usuario (ctx.user)
Requisitos
- Node.js 22.12 o superior y una carpeta vacía con
"type": "module"en supackage.json(Inicio rápido). - Un token de bot de Telegram de @BotFather y un teléfono con WhatsApp para el número del bot.
El bot completo
Cómo funciona
- Una factory, varios bots.
defineBotdevuelve una función que construye un bot alrededor del provider que recibe. El bloque de arranque la llama dos veces, una por canal, así que los dos bots tienen los mismos handlers, flujos y comandos. El simulador la llama una vez con su propio provider. - Un solo archivo de base de datos. Cada bot tiene su propia instancia de
SQLiteStoresobre el mismobot.db. No pases una misma instancia de store a dos bots:bot.stop()cierra su store y el otro bot se quedaría sin él. Todo lo que escribe un bot va en el espacio de nombres de su id de bot, que por defecto es el id del provider (baileys,telegram), así que los dos bots nunca leen las filas del otro. Definesession,botIdotenantIden elBotcuando ejecutes varios bots del mismo canal (espacio de nombres). - Los ids son opacos. Cada canal elige su formato de id. Guárdalos y compáralos tal como llegan; nunca extraigas de ellos un número de teléfono.
- Los ids son estables. El provider resuelve los alias antes de que tu
código vea el mensaje: en WhatsApp la misma persona llega con el mismo
ctx.senderaunque WhatsApp alterne entre su número de teléfono y su LID. Asíctx.user, las conversaciones y las listas de acceso siguen funcionando. - Perfiles separados. La misma persona en WhatsApp y en Telegram son dos usuarios con dos perfiles. Para unirlos, guarda tu propia relación (por ejemplo, un código que el usuario envía desde los dos canales).
- Parar. Con
Ctrl+Cse paran los dos bots, lo que cierra sus conexiones y sus manejadores de la base de datos.
quien soy para la misma persona en cada canal:
En un chat privado el chat es el usuario; en un grupo el chat es el grupo y
el remitente es el miembro que escribió.
Pruébalo
El simulador ejecuta un solo bot con su provider en memoria (mock). La base
de datos es el mismo bot.db, así que :reset (un bot nuevo desde la
factory) sigue encontrando el perfil:
Ejecútalo en los dos canales
Pon el token en.env (TELEGRAM_TOKEN=123456:ABC-tu-token) y arranca:
registro en un canal y quien soy en el otro: el nombre
solo está en el primero.
Siguientes pasos
- Canales: qué admite cada transporte, y la Cloud API (
@botmesh/meta) como tercer provider - Varias réplicas: varios procesos para el mismo bot
- Bot de grupo: para qué sirven los ids de grupo de arriba