La Bot API de Telegram permite enviar mensajes a un chat mediante peticiones HTTPS. Con curl puedes hacer una prueba desde un servidor o integrar un aviso sencillo en una tarea administrativa, como el resultado de una copia de seguridad [1].
Para enviar mensajes necesitas un bot, su token de acceso y el identificador del chat de destino. El token permite controlar el bot, así que trátalo como una contraseña: no lo incluyas en notas, repositorios ni capturas [2].
Preparar el bot y obtener el identificador del chat
Crea o selecciona un bot mediante BotFather y guarda su token en un lugar protegido. Después, abre una conversación con el bot y envíale un mensaje; esto genera una actualización que se puede consultar con getUpdates [1][2].
En una sesión de Bash, lee el token sin mostrarlo en pantalla ni escribir su valor literal en el comando:
read -r -s -p "Token del bot: " TELEGRAM_BOT_TOKEN
printf '\n'
Consulta las actualizaciones. La configuración de curl se envía por la entrada estándar para que el token no aparezca como argumento del proceso:
printf 'url = "https://api.telegram.org/bot%s/getUpdates"\n' \
"$TELEGRAM_BOT_TOKEN" | curl --silent --show-error --config -
En la respuesta JSON, localiza message → chat → id. Ese valor es el chat_id para enviar el mensaje. La actualización puede contener texto privado; no compartas la respuesta completa si no es necesario.
getUpdatesy los webhooks son dos métodos excluyentes para recibir actualizaciones. Si el bot ya tiene un webhook configurado, la consulta congetUpdatesno funcionará [1].
Enviar un mensaje de prueba
Guarda el identificador obtenido en una variable de la misma sesión y envía el texto. Sustituye el marcador por el chat_id correcto:
TELEGRAM_CHAT_ID='<CHAT_ID_EJEMPLO>'
{
printf 'url = "https://api.telegram.org/bot%s/sendMessage"\n' \
"$TELEGRAM_BOT_TOKEN"
printf 'data-urlencode = "chat_id=%s"\n' "$TELEGRAM_CHAT_ID"
printf 'data-urlencode = "text=%s"\n' "Prueba de notificación desde el servidor"
} | curl --silent --show-error --config -
sendMessage necesita un destino (chat_id) y el texto del mensaje. curl muestra la respuesta JSON de la API; comprueba que la respuesta indique éxito y que el mensaje llegue al chat esperado [1].
Cuando termines, elimina el token de la sesión actual:
unset TELEGRAM_BOT_TOKEN
Diagnóstico básico
- No aparecen actualizaciones: comprueba que el usuario ya haya iniciado el bot y enviado un mensaje; revisa también si hay un webhook activo.
- La API indica que el chat no es válido: vuelve a obtener el
chat.idy confirma que estás usando el destino correcto. - No llega el mensaje: revisa el resultado JSON, el token y que el bot pueda escribir en ese chat.
- El token se expuso: revócalo y genera uno nuevo desde BotFather. Telegram indica que el token permite controlar el bot [2].
En resumen
getUpdates sirve para inspeccionar actualizaciones y localizar el chat_id; sendMessage envía el aviso. Mantén el token fuera del contenido de los scripts y del historial del shell, verifica la respuesta de la API y limita cada mensaje a un destino que hayas comprobado.