gaveho.
telegrambotsnodejsautomation

Cómo crear un bot de Telegram en 15 minutos (sin complicarte la vida)

May 1, 2026

He creado decenas de bots de Telegram para automatización, notificaciones y experimentos con IA. Te muestro cómo construir uno funcional en minutos, con código real y sin frameworks innecesarios.

Cómo crear un bot de Telegram en 15 minutos (sin complicarte la vida)

Los bots de Telegram son una de las formas más rápidas de construir automatizaciones útiles. No necesitas hosting complicado, la API es ridículamente simple, y puedes tener algo funcionando en minutos.

He usado bots de Telegram para todo: desde recibir alertas de producción hasta experimentos con GPT-4. Déjame mostrarte cómo hacerlo bien desde el inicio.

Por qué Telegram y no Slack o Discord

Tres razones:

  1. API más simple: No necesitas OAuth flows ni configuraciones bizantinas
  2. Sin límites absurdos: 30 mensajes por segundo vs los 1 mensaje por segundo de WhatsApp Business
  3. Serverless-friendly: Webhooks que funcionan de verdad, sin mantener conexiones WebSocket abiertas

Para proyectos personales o MVPs, Telegram gana siempre.

Setup inicial: BotFather es tu mejor amigo

Telegram tiene un bot para crear bots. Sí, es meta, pero funciona perfectamente.

  1. Busca @BotFather en Telegram
  2. Envía /newbot
  3. Elige un nombre y un username (debe terminar en 'bot')
  4. Guarda el token que te da. Lo necesitarás.

Eso es todo. Tu bot ya existe.

Arquitectura: Long polling vs Webhooks

Tienes dos opciones para recibir mensajes:

Long polling (más fácil para empezar):

  • Tu código pregunta constantemente "¿hay mensajes nuevos?"
  • Perfecto para desarrollo local
  • No necesitas HTTPS ni dominio

Webhooks (para producción):

  • Telegram hace POST a tu endpoint cuando llega un mensaje
  • Requiere HTTPS
  • Más eficiente, escala mejor

Empieza con polling, migra a webhooks cuando lo deploys.

Código: El bot más simple que funciona

Usando Node.js y la biblioteca oficial node-telegram-bot-api:

import TelegramBot from 'node-telegram-bot-api';

const token = process.env.TELEGRAM_BOT_TOKEN;
const bot = new TelegramBot(token, { polling: true });

// Responde a /start
bot.onText(/\/start/, (msg) => {
  const chatId = msg.chat.id;
  bot.sendMessage(chatId, '¡Hola! Estoy vivo 🤖');
});

// Echo de cualquier mensaje de texto
bot.on('message', (msg) => {
  if (msg.text && !msg.text.startsWith('/')) {
    bot.sendMessage(msg.chat.id, `Recibí: ${msg.text}`);
  }
});

console.log('Bot corriendo...');

Eso es literalmente todo para tener un bot funcional.

Features útiles que siempre implemento

1. Teclados inline

Los botones hacen que tu bot se sienta profesional:

bot.sendMessage(chatId, '¿Qué quieres hacer?', {
  reply_markup: {
    inline_keyboard: [
      [{ text: 'Opción A', callback_data: 'opt_a' }],
      [{ text: 'Opción B', callback_data: 'opt_b' }]
    ]
  }
});

// Manejar clicks
bot.on('callback_query', (query) => {
  const data = query.data;
  bot.answerCallbackQuery(query.id);
  // Hacer algo con 'data'
});

2. Rate limiting básico

Evita que un usuario abuse de tu bot:

const userLimits = new Map();

function checkRateLimit(userId) {
  const now = Date.now();
  const userLog = userLimits.get(userId) || [];
  const recentRequests = userLog.filter(t => now - t < 60000);
  
  if (recentRequests.length >= 10) return false;
  
  recentRequests.push(now);
  userLimits.set(userId, recentRequests);
  return true;
}

3. Logging que vale la pena

Siempre loggeo el username y chat_id:

bot.on('message', (msg) => {
  console.log(`[${msg.from.username}:${msg.chat.id}] ${msg.text}`);
});

Cuando algo falla en producción, esto salva vidas.

Deployment: Mis opciones favoritas

Para prototipos: Railway o Render con plan gratuito. Deploy directo desde GitHub.

Para producción seria: Vercel Edge Functions o AWS Lambda + API Gateway.

Ejemplo de handler para Vercel:

export default async function handler(req, res) {
  if (req.method === 'POST') {
    const update = req.body;
    // Procesar update de Telegram
    await handleUpdate(update);
    return res.status(200).json({ ok: true });
  }
  return res.status(200).json({ status: 'alive' });
}

Configuras el webhook una vez:

curl https://api.telegram.org/bot<TOKEN>/setWebhook?url=https://tu-dominio.vercel.app/api/bot

Errores que ya cometí por ti

  1. No manejar errores de red: Telegram puede devolver 429 (rate limit). Implementa retry con exponential backoff.

  2. Ignorar chat_id vs from.id: En grupos son diferentes. Siempre usa msg.chat.id para responder.

  3. No sanitizar input del usuario: Si pasas mensajes a una API externa (como OpenAI), valida primero.

  4. Olvidar answering callback queries: Si no llamas answerCallbackQuery, los botones se quedan con el spinner de carga.

Mi stack actual para bots avanzados

  • Runtime: Node.js o Deno
  • DB: Supabase para persistencia simple
  • Caching: Redis en Upstash (tienen free tier generoso)
  • Monitoring: Sentry + logs en Axiom

Para bots que usan IA, agrego un queue (BullMQ) para procesar requests pesadas de forma asíncrona.

Cuándo NO usar un bot de Telegram

Sé honesto con los trade-offs:

  • Si necesitas alcance masivo: Telegram no es WhatsApp en Latinoamérica
  • Si tu audiencia no es tech-savvy: La fricción de "instala Telegram" mata conversión
  • Si necesitas pagos complejos: Usa Stripe directamente

Pero para herramientas internas, notificaciones, o side projects, los bots de Telegram son imbatibles en velocidad de desarrollo.

Siguiente nivel

Una vez dominas lo básico, experimenta con:

  • Inline mode (responder en cualquier chat con @tubot)
  • Telegram Mini Apps (webapps embebidas)
  • Bot API local para archivos grandes

Mi próximo experimento es un bot que use function calling de GPT-4 para ejecutar acciones complejas. La combinación de Telegram + IA conversacional es perfecta.

Arranca con el código simple que compartí. En 15 minutos tendrás algo funcionando. Luego iteras.