Taller práctico con código y referencias para montar un bot de telegram solo para la comunidad de suscriptores premium 🧡 de Web Reactiva
- El código para crear tu propio bot
- Diferentes ejemplos de uso basados en la API del bot de telegram
- Usaremos node (v20.10 o superior) y la librería telegraf
Son los que están en la carpeta bots
- Crear el bot en @BotFather y generar el API token
- Duplicar
.env.example
para crear.env
- Usar el API Token en
BOT_TOKEN
en el.env
(el resto solo son necesarios en algunos bots) - Ejecuta
npm install
para cargar las depencias de la carpeta - Con node (versión 20.10 o superior) puedes levantar el bot así:
node --env-file=.env --watch NOMBRE_FICHERO.js
- Entra en tu bot generado en telegram y envía los mensajes
--
Crear un bot de Telegram con Node.js y Telegraf sigue un flujo bien definido. Aquí te lo explico paso a paso:
¿Por qué telegraf? Porque lleva muchos años de desarrollo, porque la API de Bots de telegram es muy estable y porque no tenemos que reinventar la rueda.
Antes de programar, necesitas obtener un Token de acceso.
- Abre Telegram y busca @BotFather.
- Escribe
/newbot
y sigue las instrucciones para darle un nombre y un usuario único. - Una vez creado, BotFather te dará un Token. Guárdalo porque lo necesitarás en tu código.
Primero, inicia un nuevo proyecto en Node.js y instala Telegraf:
mkdir my-telegram-bot
cd my-telegram-bot
npm init -y
npm install telegraf dotenv
Para manejar variables de entorno, crea un archivo .env
:
BOT_TOKEN=tu_token_aquí
Y en index.js
, carga las variables de entorno:
import { Telegraf } from "telegraf";
const bot = new Telegraf(process.env.BOT_TOKEN);
El bot responde a comandos y mensajes. Puedes definir respuestas para /start
, /help
, o mensajes de texto específicos.
// Responde al comando /start
bot.start((ctx) => ctx.reply('¡Hola! Soy tu bot de Telegram 🤖. ¿En qué puedo ayudarte?'));
// Responde al comando /help
bot.help((ctx) => ctx.reply('Usa /start para iniciar y /help para ver esta ayuda.'));
// Responde a un mensaje de texto específico
bot.hears('Hola', (ctx) => ctx.reply('¡Hola! ¿Cómo estás?'));
// Maneja cualquier otro mensaje
bot.on('text', (ctx) => {
ctx.reply(`Has dicho: ${ctx.message.text}`);
});
Para que el bot empiece a funcionar, usa:
bot.launch();
console.log('Bot en funcionamiento...');
Si quieres que el bot corra en producción sin interrupciones, puedes usar PM2:
npm install -g pm2
pm2 start index.js --name my-telegram-bot
Si prefieres Webhooks en lugar de polling, deberás configurar un servidor en Express o Fastify y usar bot.telegram.setWebhook()
.
- El usuario envía un mensaje a tu bot en Telegram.
- Telegram envía el mensaje a tu bot usando el token de la API.
- Telegraf recibe y procesa el mensaje según las reglas definidas.
- El bot responde al usuario con texto, imágenes o comandos personalizados.
Aquí tienes un resumen de las principales diferencias entre polling y webhook a la hora de recibir mensajes en un bot de Telegram, así como sus ventajas, inconvenientes y usos recomendados.
- Long polling (polling): Tu bot solicita periódicamente a los servidores de Telegram si hay nuevos mensajes; es un ciclo continuo de “¿Hay algo nuevo?”.
- Webhook: Telegram envía los mensajes a una URL (endpoint) específica que tu bot expone; básicamente, Telegram “empuja” las actualizaciones al bot.
- Facilidad de configuración: No necesitas un servidor con SSL ni una URL pública. Puedes ejecutar tu bot en local sin complicaciones.
- Ideal para desarrollo y testing: Para pruebas rápidas, solo inicias tu bot y listo.
- Menos requisitos de infraestructura: No hace falta configurar dominios ni certificados.
- Menor eficiencia: Hay un ciclo constante de preguntar por nuevas actualizaciones. Puede no ser el método más óptimo si tu bot recibe mucho tráfico.
- Mayor latencia en algunos casos: Dependiendo de la configuración, el bot puede tardar un poco más en recibir los mensajes.
- Consumo de recursos: Cada request de polling mantiene conexiones abiertas, lo que puede aumentar el uso de CPU y red en cargas altas.
- Mayor inmediatez: En cuanto Telegram recibe un mensaje, lo envía a la URL configurada. No esperas a que el bot pregunte.
- Menor consumo de recursos: No se hacen peticiones continuas; solo hay tráfico cuando realmente hay un mensaje nuevo.
- Escalabilidad: En proyectos con alto volumen de mensajes, la comunicación “push” suele ser más eficiente que “pull”.
- Requiere un servidor accesible: Necesitas una URL pública y, habitualmente, un certificado SSL válido (HTTPS).
- Configuración más compleja: Hay que gestionar dominios, certificados, puertos, etc.
- Dependencia de la disponibilidad del servidor: Si tu servidor está caído o inaccesible, las actualizaciones no se recibirán.
-
Usa polling:
- Si estás en fase de desarrollo o haciendo pruebas locales.
- Si no necesitas respuesta inmediata en tiempo real y prefieres una configuración más sencilla.
- Si no tienes un servidor con certificado SSL o una URL pública disponible.
-
Usa webhook:
- Si tienes un bot en producción con alto volumen de mensajes.
- Quieres respuestas instantáneas y optimizar el uso de recursos.
- Tienes la posibilidad de configurar un servidor con SSL y un dominio accesible.
# Publica el webhook
curl -X POST "https://api.telegram.org/bot{BOT_TOKEN}/setWebhook?url={WEBHOOK_URL}"
# Comprueba el webhook
curl -s "https://api.telegram.org/bot{BOT_TOKEN}/getWebhookInfo"
# Borra el webhook publicado
curl -X POST "https://api.telegram.org/bot{BOT_TOKEN}/deleteWebhook"
# Test para comprobar que ahí algo ahí
curl -X POST "{WEBHOOK_URL}"
🧡 Este taller sería imposible sin el apoyo de la comunidad de suscriptores de pago de Web Reactiva