Cómo crear un bot en Telegram paso a paso: de BotFather a tu primer mensaje
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
- Una cuenta de Telegram, en el celular o en Telegram Desktop.
- Una terminal con
curl, o Python 3 con la libreríarequests(pip install requests). - Nada más: para empezar no hacen falta servidor ni dominio, y crear bots es gratis.
Paso 1: crear el bot con @BotFather y /newbot
- Abre @BotFather y pulsa Iniciar.
- Envía
/newbot. - Escribe el nombre del bot. Es el que se ve en los chats, puede llevar espacios y lo puedes cambiar después con
/setname. - Escribe el username: de 5 a 32 caracteres, solo letras latinas, números y guion bajo, y debe terminar en
bot, por ejemplotienda_pedidos_botoTiendaPedidosBot. A diferencia del nombre, no se puede cambiar después. - Si el username ya está ocupado, BotFather te pedirá otro. Cuando lo acepte, te responderá con el enlace
t.me/tu_usernamey 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
/setdescription: texto de hasta 512 caracteres que se ve en el chat vacío, antes de pulsar Iniciar./setabouttext: biografía corta (hasta 120 caracteres) del perfil del bot./setuserpic: foto de perfil./setcommands: comandos que se sugieren al escribir/. Envía una línea por comando con el formatocomando - Descripción.
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
404 Not Found: falta la palabrabotantes del token o el nombre del método está mal escrito."result": []en getUpdates: no hay mensajes nuevos. Escríbele algo al bot y vuelve a llamar; las actualizaciones se guardan como máximo 24 horas.409 Conflict: hay un webhook activo ygetUpdatesno funciona mientras exista. Elimínalo condeleteWebhook.403 Forbidden: el usuario no ha iniciado el bot o lo bloqueó.400 Bad Request: chat not found: elchat_ides incorrecto. No uses el número del token: es el id del bot, no el tuyo.
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.
Guías relacionadas
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.