Enviar imagen a Telegram con JavaScript usando Bot

Enviar foto de JavaScript a Telegram usando Bot

En este tutorial de Bot de Telegram con JavaScript del lado del cliente te voy a enseñar a enviar una foto en nombre de un Bot a cualquier usuario, canal o grupo, todo esto desde JavaScript en el navegador web.

Enviar imagen a Telegram con JavaScript usando Bot
Enviar imagen a Telegram con JavaScript usando Bot

Vamos a consumir la API de Bots de Telegram en el endpoint sendPhoto enviando el chat_id, caption y photo. No necesitaremos librerías adicionales, todo será con funciones nativas como fetch.

Ya te enseñé a enviar una foto a Telegram usando cURL, ahora veremos cómo hacerlo desde la web.

Especificación de la API de Telegram

Entonces para comunicarte como si fueras un Bot de Telegram  desde JavaScript y enviar un archivo seleccionado por el usuario desde un input de tipo file, 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.

JavaScript cuenta con FormData que permite enviar datos codificados como si fueran un formulario, solo debemos invocar a append con cada clave y valor que se necesite enviar.

Después podemos enviar ese FormData usando fetch y los encabezados serán configurados automáticamente, teniendo como resultado el envío de la imagen desde JavaScript.

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

Ejemplo JavaScript: enviar foto a Telegram

Por favor presta atención a la siguiente función de JavaScript:

const enviarImagen = async (idChat, token, imagen) => {
    const url = `https://api.telegram.org/bot${token}/sendPhoto`;
    const fd = new FormData();
    fd.append("chat_id", idChat);
    fd.append("caption", "Enviado desde JS lado del cliente");
    fd.append("photo", imagen);
    const respuestaHttp = await fetch(url, {
        method: 'POST',
        body: fd,
    });
    return {
        respuesta: await respuestaHttp.json(),
        codigo: respuestaHttp.status,
    };
}

La función recibe el Id de chat como cadena, el token del bot y la imagen (instancia de File). En este caso la descripción de la imagen es indicada en el parámetro caption.

Armamos el FormData invocando a append para los 3 valores que estamos enviando.

Después se hace una petición a la URL especificando el método como POST y enviando el FormData como cuerpo. Los encabezados que indican la codificación de datos serán colocados automáticamente por fetch.

Para obtener la imagen que se va a enviar con el Bot de Telegram desde un input de tipo file primero se debe acceder a la propiedad files del elemento, mismo que es un arreglo de tipo File, y después enviar el primer elemento.

Te recuerdo que sendPhoto solo acepta una foto a la vez. Si quieres enviar más fotos debes invocar a sendMediaGroup como lo mostré en el bonus del tutorial con cURL.

Poniendo todo junto

Hasta este punto has revisado la función de JavaScript que te va a permitir consumir la API de bots de Telegram. Te voy a dejar el código completo en GitHub y, como siempre, un enlace a la demostración para que puedas probar por ti mismo.

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.

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *