- Cuenta de Telegram (la app que ya usas, en móvil o escritorio)
- Una terminal — si no has usado ninguna, en la guía de webhooks se explica cómo abrirla
- Nada que instalar ni pagar
Introducción
Un bot de Telegram es una cuenta de Telegram que no maneja una persona, sino un programa. No se controla desde la app: se le dan órdenes llamando a una dirección web que Telegram pone a tu disposición, la Bot API (se abre en una pestaña nueva).
Esa dirección tiene esta forma, y a la parte final (sendMessage) se le llama método: es la orden que le estás dando.
https://api.telegram.org/bot<TOKEN>/sendMessageLe mandas dos datos —a qué chat y qué texto— y Telegram entrega el mensaje. Quien haga esa llamada da igual: un script tuyo, un servidor, una tarea automática que corre al desplegar, o tú desde la terminal para probar.
En una frase: algo llama a esa dirección → aparece un mensaje en tu chat.
El <TOKEN> que aparece ahí es la contraseña del bot, y te la dará BotFather en el primer paso.
Problema que resuelve
Quieres que algo te avise al móvil, o al grupo del equipo, sin montar infraestructura. Con un bot mínimo basta: se despliega algo y falla, entra un pedido, alguien rellena un formulario. Cualquier cosa que tu sistema ya detecte puede acabar en un mensaje.
Piezas que debes conocer
| Pieza | Qué es | Cuidado |
|---|---|---|
| Bot | Cuenta creada con @BotFather (se abre en una pestaña nueva) | Solo envía a chats donde alguien haya iniciado conversación (o a grupos donde esté añadido) |
| Token | 123456:ABC… que da BotFather | Quien lo tenga controla el bot — secreto |
chat_id | Identificador del chat (número; en grupos suele ser negativo) | No es secreto como el token, pero no lo publiques en sitios raros |
sendMessage | Método de la API para publicar texto | Hay límites de longitud y de ritmo |
- Creas el bot en BotFather
- Alguien abre el chat y pulsa Start
- Tu código llama sendMessage
- Telegram muestra el aviso
Setup mínimo
Haz primero el camino chat privado contigo (es el más simple). El grupo viene después.
Un detalle que sorprende: un bot no puede escribirte hasta que tú le hables primero. Telegram lo impone para que nadie pueda spamearte creando un bot y adivinando tu usuario. De ahí que el tercer paso sea pulsar Start: sin eso, el envío falla aunque el token sea correcto.
- En Telegram, habla con @BotFather → /newbot → elige nombre y un username que acabe en bot.
- Copia el token (no lo pegues en issues ni capturas).
- Abre el chat con tu bot y pulsa Start (o escribe hola).
- Con el token, pide getUpdates para ver el chat_id y prueba un sendMessage.
1. Obtener el chat_id
Tras el Start, abre una terminal. Elige tu sistema en el bloque y pega el token de BotFather (parecido a 123456:AAH…) donde dice pega-aqui-tu-token.
TOKEN="pega-aqui-tu-token"
curl -sS "https://api.telegram.org/bot${TOKEN}/getUpdates"Ese comando pregunta a Telegram «¿qué mensajes ha recibido mi bot?», y la respuesta incluye de quién venían — que es justo el dato que buscas.
Lo que sale es un JSON: el formato en el que las APIs devuelven datos, con etiquetas y valores entre llaves. Viene largo y en una sola línea; no hace falta entenderlo entero. Busca un trozo como este (los números serán los tuyos):
"chat": {
"id": 123456789,
"type": "private"
}Ese "id" es tu chat_id. Si la lista viene vacía ("result": []), manda otro mensaje al bot y vuelve a lanzar el comando.
2. Enviar un mensaje de prueba
Usa el mismo token y el chat_id que acabas de ver (solo el número). Sustituye también 123456789 por el tuyo.
TOKEN="pega-aqui-tu-token"
CHAT_ID="123456789"
curl -sS -X POST "https://api.telegram.org/bot${TOKEN}/sendMessage" \
-H "Content-Type: application/json" \
-d "{\"chat_id\":${CHAT_ID},\"text\":\"Hola desde la guía\"}"Respuesta típica si fue bien: "ok": true y un message_id. En Telegram deberías ver el texto.
Eso basta para comprobar token + chat + sendMessage.
¿Y un grupo?
- Crea un grupo (o usa uno) y añade el bot.
- Dale permiso para enviar mensajes.
- Escribe algo en el grupo (para que haya un update).
- Vuelve a lanzar
getUpdates. El"chat"."id"del grupo suele ser negativo (p. ej.-100123…). Úsalo igual ensendMessage.
Si solo necesitas avisos a ti, quédate con el chat privado.
Seguridad
- Preferible un bot solo para avisos operativos, no mezclado con otros usos personales.
- No hace falta exponer una URL pública para enviar avisos (este flujo usa
sendMessagesaliente). - Manda texto plano. Telegram admite un parámetro
parse_modepara poner negritas y enlaces, pero entonces trata caracteres como_o.como marcas de formato: un nombre de rama o un mensaje de error los lleva a menudo y el envío falla con un error poco descriptivo. Empieza sin él.
Errores habituales
| Síntoma | Causa probable | Qué hacer |
|---|---|---|
Unauthorized | Token mal copiado | Regenera / vuelve a pegar sin espacios |
chat not found | Nadie ha hablado al bot | Start en el chat privado, o añade el bot al grupo |
Sin chat_id en getUpdates | No hay mensajes recientes al bot | Envía un mensaje y reintenta el comando |
getUpdates vacío aunque escribiste | Telegram solo guarda los mensajes recientes, y algunas herramientas los dan por leídos | Manda otro hola al bot y lanza el comando justo después |
Siguiente paso
Cuando sendMessage te funcione:
- Engánchalo a tu origen — el mismo
POSTdesde un script, un cron, un job de CI o el receptor de un webhook. - Piensa el formato — empieza en texto plano; añade Markdown/HTML solo si lo necesitas.
- Secretos — token (y a veces
chat_id) en variables de entorno o el almacén de secretos de tu plataforma.
Con sendMessage funcionando, el bot ya está listo para tus propios flujos: cualquier origen que pueda hacer un POST sirve.
Automatizaciones guiadas
Aplica lo aprendido en la guía con una de nuestras automatizaciones: