Telegram Bot API
🌐 Español

Cómo crear un bot en Telegram paso a paso: de BotFather a tu primer mensaje

· 7 min de lectura

Para crear un bot de Telegram solo necesitas hablar con @BotFather: envías /newbot, eliges un nombre y un username que termine en bot, y recibes un token. Con ese token ya puedes usar la Bot API desde curl, Python o cualquier lenguaje. En esta guía vas a crear el bot, comprobar el token y enviar tu primer mensaje en unos diez minutos.

Qué necesitas antes de empezar

Paso 1: crear el bot con @BotFather y /newbot

  1. Abre @BotFather y pulsa Iniciar.
  2. Envía /newbot.
  3. Escribe el nombre del bot. Es el que se ve en los chats, puede llevar espacios y lo puedes cambiar después con /setname.
  4. Escribe el username: de 5 a 32 caracteres, solo letras latinas, números y guion bajo, y debe terminar en bot, por ejemplo tienda_pedidos_bot o TiendaPedidosBot. A diferencia del nombre, no se puede cambiar después.
  5. Si el username ya está ocupado, BotFather te pedirá otro. Cuando lo acepte, te responderá con el enlace t.me/tu_username y el token del bot.

Paso 2: copiar y guardar el token

El token tiene este formato: 123456789:AAEexampleTokenReplaceWithYours. El número antes de los dos puntos es el id del bot y el resto es la parte secreta. Quien tenga el token controla el bot por completo, así que trátalo como una contraseña: guárdalo en una variable de entorno y nunca lo subas a un repositorio público. Si lo pierdes o se filtra, en la guía del token del bot explicamos cómo encontrarlo y revocarlo.

Paso 3: comprobar el token con getMe

Todas las peticiones siguen el formato https://api.telegram.org/bot<token>/MÉTODO; fíjate en la palabra bot pegada al token. El método getMe no necesita parámetros y devuelve los datos de tu bot:

TOKEN="123456789:AAEexampleTokenReplaceWithYours"
curl "https://api.telegram.org/bot$TOKEN/getMe"

Si el token es correcto, verás algo así (respuesta abreviada):

{
  "ok": true,
  "result": {
    "is_bot": true,
    "first_name": "Tienda Pedidos",
    "username": "tienda_pedidos_bot"
  }
}

¿Prefieres no usar la terminal? Pega el token en Bot API Tester y ejecuta getMe desde el navegador. Si recibes 401 Unauthorized, el token está mal copiado o fue revocado.

Paso 4: obtener tu chat id y enviar el primer mensaje

Un bot no puede iniciar una conversación: primero tienes que escribirle tú. Abre t.me/tu_username, pulsa Iniciar (se envía /start) y pide las actualizaciones pendientes:

curl "https://api.telegram.org/bot$TOKEN/getUpdates"

En la respuesta busca message.chat.id: ese número es tu chat id (en los ejemplos, 123456789). Para grupos y canales el proceso cambia un poco; lo explicamos en cómo obtener el chat id. Ahora envía un mensaje con sendMessage:

curl -X POST "https://api.telegram.org/bot$TOKEN/sendMessage" \
  -H "Content-Type: application/json" \
  -d '{"chat_id": 123456789, "text": "¡Hola! Soy tu primer bot."}'

Lo mismo en Python con requests:

import requests

TOKEN = "123456789:AAEexampleTokenReplaceWithYours"  # mejor: os.environ["TELEGRAM_BOT_TOKEN"]

resp = requests.post(
    f"https://api.telegram.org/bot{TOKEN}/sendMessage",
    json={"chat_id": 123456789, "text": "¡Hola desde Python!"},
    timeout=10,
)
print(resp.json())

Si la respuesta trae "ok": true, el mensaje ya está en tu chat. Para dar formato, añadir botones o publicar en canales, sigue con cómo enviar mensajes con la API.

Tu primer bot con Python que responde

Este bot de eco usa long polling: pregunta por mensajes nuevos con getUpdates y responde a cada texto. El parámetro offset confirma las actualizaciones ya procesadas para no recibirlas dos veces.

import requests

API = "https://api.telegram.org/bot123456789:AAEexampleTokenReplaceWithYours"
offset = None

while True:
    updates = requests.get(f"{API}/getUpdates",
                           params={"timeout": 30, "offset": offset}, timeout=40).json()
    for upd in updates["result"]:
        offset = upd["update_id"] + 1
        msg = upd.get("message")
        if msg and "text" in msg:
            requests.post(f"{API}/sendMessage", timeout=10,
                          json={"chat_id": msg["chat"]["id"], "text": "Dijiste: " + msg["text"]})

Paso opcional: descripción y comandos

Los comandos también se configuran desde código con setMyCommands:

curl -X POST "https://api.telegram.org/bot$TOKEN/setMyCommands" \
  -H "Content-Type: application/json" \
  -d '{"commands": [{"command": "start", "description": "Iniciar el bot"}, {"command": "ayuda", "description": "Ver la ayuda"}]}'

Problemas frecuentes

Siguientes pasos: polling, webhook y librerías

El bot de eco usa long polling, que funciona en tu computadora sin HTTPS ni IP pública. En producción suele usarse un webhook: Telegram envía cada actualización por POST a tu URL HTTPS. Lo explicamos en la guía de webhook para bots de Telegram.

Para proyectos reales usa una librería: en Python, python-telegram-bot, aiogram o pyTelegramBotAPI; en Node.js, grammY o Telegraf. Todas llaman a los mismos métodos de la Bot API, así que lo que pruebes en el tester funcionará igual en tu código. Y si quieres una interfaz web dentro de Telegram, experimenta con las Mini Apps en el Mini App Tester.

Preguntas frecuentes

¿Crear un bot de Telegram es gratis?

Sí. Registrar el bot con @BotFather y usar la Bot API no cuesta nada. Solo pagarías el hosting si tu bot corre en un servidor, o funciones opcionales como los envíos masivos pagados con Telegram Stars.

¿Necesito saber programar para crear un bot en Telegram?

Para registrar el bot con BotFather, no. Para que responda y haga algo útil necesitas código o una herramienta de automatización que llame a la Bot API por ti, como n8n.

¿Puedo cambiar el username de mi bot después?

El nombre visible lo cambias cuando quieras con /setname, pero el username con el que creaste el bot (el que termina en bot) no se puede cambiar. Elígelo bien desde el inicio.

¿Qué lenguaje de programación conviene para un bot de Telegram?

Cualquiera que pueda hacer peticiones HTTPS. Los más usados son Python (python-telegram-bot, aiogram, pyTelegramBotAPI) y Node.js (grammY, Telegraf); en Go existen telebot y go-telegram-bot-api.

¿Mi bot tiene que estar encendido todo el tiempo?

Si debe responder a los usuarios, sí: algún proceso tiene que recibir actualizaciones con getUpdates o con un webhook. Si solo envía avisos desde un script o un cron, basta con llamar a sendMessage cuando lo necesites.

¿Por qué mi bot no responde en un grupo?

Por el modo de privacidad, activo por defecto: en grupos el bot solo recibe comandos dirigidos a él (como /start@tu_bot), respuestas a sus mensajes y mensajes de servicio. Desactívalo con /setprivacy y vuelve a añadir el bot, o hazlo administrador.

Cómo enviar mensajes con la API de Telegram: sendMessage paso a paso

Envía mensajes con la Bot API de Telegram: sendMessage con curl, Python y JavaScript, formato HTML y MarkdownV2, botones inline y errores 400, 403 y 429.

Cómo obtener el token de un bot de Telegram (y qué hacer si se filtra)

Cómo obtener el token de tu bot de Telegram con @BotFather, encontrarlo si el bot ya existe, comprobarlo con getMe y revocarlo si se filtró.

Webhook de Telegram: cómo configurar setWebhook para tu bot (Python y n8n)

Configura el webhook de tu bot de Telegram: requisitos HTTPS, setWebhook con secret_token, getWebhookInfo, handler en Python y errores típicos en n8n.

Cómo obtener el chat id de Telegram: usuarios, grupos, canales y temas

Obtén el chat id de Telegram para tu bot con getUpdates: usuarios, grupos, supergrupos (-100…), canales y temas, y qué hacer si result viene vacío.