Bot de Telegram

Enviar foto a Telegram usando cURL y Bot

Siguiendo con los tutoriales que consumen la API de los Bots de Telegram con cURL vamos a ver cómo enviar una foto usando únicamente la línea de comandos con cURL.

Además de enviar la foto a cualquier usuario de Telegram también vamos a enviar la descripción de la foto con Mardown; todo esto usando solo la terminal y la API de Telegram.

Este tutorial funciona perfectamente tanto en Linux como en Windows.

Especificación de la API de Telegram

Entonces para comunicarte con un usuario de Telegram como si fueras un bot desde la terminal, y enviar una foto, debes hacer una petición a:

https://api.telegram.org/botTOKEN/sendPhoto

Por ejemplo, si tu bot tiene el token 123:asd la URL sería:

https://api.telegram.org/bot123:asd/sendPhoto

Como ahora vamos a enviar un archivo, no vamos a usar JSON, en su lugar enviaremos los datos codificados como formulario en formato de clave=valor, ya sea el archivo binario o los otros datos como el id de chat o caption.

Vas a encontrar más detalles sobre sendPhoto en https://core.telegram.org/bots/api#sendphoto

Token e id

En este post asumo que ya tienes tu token del Bot, mismo que el BotFather te debió brindar. Si no, solo habla con él en https://t.me/botfather y crea un nuevo Bot para obtener tu token.

También estoy suponiendo que ya conoces el id de chat, grupo o canal. Si no lo tienes puedes obtener el id de usuario reenviando un mensaje al Bot https://t.me/get_id_bot o https://t.me/JsonDumpBot (no estoy afiliado ni tengo relación con ellos) y estoy seguro de que debe haber distintas maneras de obtenerlo

Sintaxis para enviar foto a Telegram desde cURL

Entonces, para enviar la foto usando un Bot, ejecutamos lo siguiente:

curl -F "chat_id=el id del chat" -F "caption=descripción de la foto" -F "photo=@ubicación de la foto.extensión" "https://api.telegram.org/botTOKEN/sendPhoto"

Estamos usando -F varias veces para especificar la clave y valor. El chat_id es obligatorio, el caption es opcional y sirve para enviar una descripción de dicha foto.

El verdadero envío de la foto está ocurriendo al enviar la clave photo (esta no se puede cambiar) indicando la ruta después de un @, este @ es obligatorio (propio de cURL) y la ruta puede ser relativa o absoluta.

Enviar foto con Bot de Telegram usando cURL

Por ejemplo, si mi id de chat es 123, mi token es ASD y quiero enviar la foto parzibyte.png que se encuentra en la misma ubicación donde estoy ejecutando el comando, ejecutaría:

curl -F "chat_id=123" -F "caption=Parzibyte" -F "photo=@parzibyte.png" "https://api.telegram.org/botASD/sendPhoto"

Como se ve en la siguiente imagen:

Enviar foto con cURL y Bot de Telegram

Bonus 1: Markdown

Al estar haciendo pruebas quise saber si podía formatear la descripción de la foto con MarkdownV2 y es totalmente posible:

curl -F "parse_mode=MarkdownV2" -F "chat_id=id" -F "caption=Hola mundo puedo llevar espacios y no sé si también *markdown*" -F "photo=@parzibyte.png" "https://api.telegram.org/botTOKEN/sendPhoto"

Bonus 2: enviar varias fotos

Para subir varias fotos a Telegram debemos invocar a sendMediaGroup en lugar de sendPhoto. El parámetro media es obligatorio y debe ser un arreglo JSON codificado como cadena. Cada propiedad del arreglo debe tener el type en photo y el media en attach://clave_usada_al_subir_archivo

Por ejemplo, en en el siguiente comando estoy enviando photo1 y photo2, estos nombres los he pensado yo, podrían ser mi_foto_1 o mi_foto_unica, siempre y cuando el nombre no se repita ni sea un parámetro de Telegram. Esos mismos nombres deben ser especificados al momento de enviar los archivos con @.

curl -F "media=[{\"type\":\"photo\",\"media\":\"attach://photo1\"},{\"type\":\"photo\",\"media\":\"attach://photo2\"}]" -F "chat_id=el id de chat" -F "photo1=@parzibyte.png" -F "photo2=@Tortuga.jpg" "https://api.telegram.org/botTOKEN/sendMediaGroup"

Fíjate en que estoy especificando 2 fotos (pueden ser hasta 10). Indico la primera con attach://photo1 y luego la envío con -F "photo1=@parzibyte.png". Para la segunda indico attach://photo2 y la subo con -F "photo2=@Tortuga.jpg".

El resultado es el siguiente:

cURL y Telegram – sendMediaGroup para enviar varias fotos

Ahora las fotos son un álbum. Me parece que se respeta el orden del arreglo codificado como JSON. Imagino que se pueden enviar fotos y vídeos cambiando el type del media.

Los detalles de sendMediaGroup están en https://core.telegram.org/bots/api#sendmediagroup y el formato de archivos lo encontré en https://core.telegram.org/bots/api#inputmediaphoto.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Servidor HTTP en Android con Flutter

El día de hoy te mostraré cómo crear un servidor HTTP (servidor web) en Android…

3 días hace

Imprimir automáticamente todos los PDF de una carpeta

En este post te voy a enseñar a designar una carpeta para imprimir todos los…

4 días hace

Guía para imprimir en plugin versión 1 desde Android

En este artículo te voy a enseñar la guía para imprimir en una impresora térmica…

1 semana hace

Añadir tasa de cambio en sistema de información

Hoy te voy a mostrar un ejemplo de programación para agregar un módulo de tasa…

2 semanas hace

Comprobar validez de licencia de plugin ESC POS

Los usuarios del plugin para impresoras térmicas pueden contratar licencias, y en ocasiones me han…

2 semanas hace

Imprimir euro € en impresora térmica

Hoy voy a enseñarte cómo imprimir el € en una impresora térmica. Vamos a ver…

3 semanas hace

Esta web usa cookies.