Skip to content

webreactiva-devs/workshop-bot-telegram

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Taller de bot de telegram

Taller práctico con código y referencias para montar un bot de telegram solo para la comunidad de suscriptores premium 🧡 de Web Reactiva

Qué encontrarás en este taller

  • 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

Referencias


Ejecutar los bots básicos

Son los que están en la carpeta bots

  1. Crear el bot en @BotFather y generar el API token
  2. Duplicar .env.example para crear .env
  3. Usar el API Token en BOT_TOKEN en el .env (el resto solo son necesarios en algunos bots)
  4. Ejecuta npm install para cargar las depencias de la carpeta
  5. Con node (versión 20.10 o superior) puedes levantar el bot así: node --env-file=.env --watch NOMBRE_FICHERO.js
  6. Entra en tu bot generado en telegram y envía los mensajes

--

Así funciona un bot de telegram

Ver gráfico

image


Primeros pasos para crear el bot de telegram

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.

1. Crear un bot en Telegram

Antes de programar, necesitas obtener un Token de acceso.

  1. Abre Telegram y busca @BotFather.
  2. Escribe /newbot y sigue las instrucciones para darle un nombre y un usuario único.
  3. Una vez creado, BotFather te dará un Token. Guárdalo porque lo necesitarás en tu código.

2. Configurar el proyecto en Node.js

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);

3. Definir los comandos y eventos

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}`);
});

4. Lanzar el bot

Para que el bot empiece a funcionar, usa:

bot.launch();
console.log('Bot en funcionamiento...');

5. Desplegar en producción

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().

Flujo de funcionamiento

  1. El usuario envía un mensaje a tu bot en Telegram.
  2. Telegram envía el mensaje a tu bot usando el token de la API.
  3. Telegraf recibe y procesa el mensaje según las reglas definidas.
  4. El bot responde al usuario con texto, imágenes o comandos personalizados.

Ver gráfico

image


Diferencias entre polling y webhook

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.

Diferencias generales

  • 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.

Ventajas de polling

  1. Facilidad de configuración: No necesitas un servidor con SSL ni una URL pública. Puedes ejecutar tu bot en local sin complicaciones.
  2. Ideal para desarrollo y testing: Para pruebas rápidas, solo inicias tu bot y listo.
  3. Menos requisitos de infraestructura: No hace falta configurar dominios ni certificados.

Inconvenientes de polling

  1. 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.
  2. Mayor latencia en algunos casos: Dependiendo de la configuración, el bot puede tardar un poco más en recibir los mensajes.
  3. Consumo de recursos: Cada request de polling mantiene conexiones abiertas, lo que puede aumentar el uso de CPU y red en cargas altas.

Ventajas de webhook

  1. Mayor inmediatez: En cuanto Telegram recibe un mensaje, lo envía a la URL configurada. No esperas a que el bot pregunte.
  2. Menor consumo de recursos: No se hacen peticiones continuas; solo hay tráfico cuando realmente hay un mensaje nuevo.
  3. Escalabilidad: En proyectos con alto volumen de mensajes, la comunicación “push” suele ser más eficiente que “pull”.

Inconvenientes de webhook

  1. Requiere un servidor accesible: Necesitas una URL pública y, habitualmente, un certificado SSL válido (HTTPS).
  2. Configuración más compleja: Hay que gestionar dominios, certificados, puertos, etc.
  3. Dependencia de la disponibilidad del servidor: Si tu servidor está caído o inaccesible, las actualizaciones no se recibirán.

¿Cuándo usar cada uno?

  • 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.

Polling

Ver gráfico

image

Webhook

Ver gáfico

image

Comandos para levantar el webhook

# 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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published