Hoy te enseñaré cómo enviar un mensaje a un usuario desde un bot de Telegram usando JavaScript del lado del cliente, es decir, desde el navegador web usando simplemente peticiones http con la función fetch.
Con lo mostrado aquí vas a ser capaz de enviar un mensaje a nombre de tu bot a cualquier usuario que haya interactuado con el bot y que no lo haya bloqueado, obviamente.
La ventaja de esto es que podrás enviar un mensaje a Telegram desde JavaScript sin usar librerías del lado del servidor a cualquier usuario actuando en nombre de tu bot.
Demostración
Si ya cuentas con un token de bot y el id del usuario entonces prueba la demostración sin salir de tu navegador en el siguiente enlace: https://parzibyte.github.io/ejemplos-javascript/enviar-mensaje-telegram/
A lo largo del artículo te enseñaré el funcionamiento y código esencial además del código completo.
Notas para la comunicación de JavaScript con Telegram
- Necesitas el ID del usuario al que quieres enviar un mensaje, y ese usuario debió interactuar con el bot previamente, además de que no lo debe tener bloqueado
- Lo repito: necesitas el id de usuario, no su username o teléfono
- Puedes obtener el id de usuario reenviando un mensaje al bot https://t.me/get_id_bot (no estoy afiliado ni tengo relación con el bot) y estoy seguro de que debe haber distintas maneras de obtenerlo
- Vas a enviar el mensaje de Telegram en nombre de tu bot, y no en nombre del usuario. Es decir, la comunicación será de bot a usuario y no de usuario a bot
- No puedes enviar mensajes de un bot hacia otro bot; solo de un bot a otro usuario
- Si quisieras enviar un mensaje en nombre de un usuario necesitarías mirar la API MTProto que es mucho más compleja que la API de bots de Telegram.
- También vas a necesitar contar con un bot y su token, ese lo puedes crear con el BotFather.
Especificación de la API de Telegram
Entonces para comunicarte con un usuario de Telegram como si fueras un bot desde el navegador web debes hacer una petición a:
https://api.telegram.org/bot_TOKEN_/sendMessage
Por ejemplo, si tu bot tiene el token 123:asd
la URL sería:
https://api.telegram.org/bot123:asd/sendMessage
La petición es de tipo POST y debes enviar un JSON con las propiedades chat_id
y text
. El chat_id
es el id del usuario al que quieres enviar el mensaje y el text
es el mensaje que vas a enviar desde JavaScript hacia Telegram sin librerías.
Vas a encontrar más detalles sobre sendMessage
en: https://core.telegram.org/bots/api#sendmessage
Enviar mensaje a usuario en Telegram usando JavaScript
He creado la siguiente función que recibe el id del chat (o id de usuario), el token otorgado por el BotFather y el mensaje que se quiere enviar a la API de Telegram desde el lado del cliente con JS:
const enviarMensaje = async (idChat, token, mensaje) => {
const url = `https://api.telegram.org/bot${token}/sendMessage`;
const respuestaHttp = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
chat_id: idChat,
text: mensaje,
}),
});
return {
respuesta: await respuestaHttp.json(),
codigo: respuestaHttp.status,
};
}
La API de Telegram está muy bien programada y te va a devolver información incluso cuando haya un error.
El código de respuesta está en respuestaHttp.status
que será 200 si todo fue bien y que puedes analizar en caso de que sea otro valor.
Por otro lado, la API siempre devolverá un JSON con la propiedad ok
que estará en true
en caso de que todo haya ido correctamente, pero que además traerá otras propiedades para depurar errores si es que ha ocurrido alguno.
Poniendo todo junto
El código completo lo encuentras en GitHub: https://github.com/parzibyte/ejemplos-javascript/tree/master/enviar-mensaje-telegram
La demostración se encuentra en: https://parzibyte.github.io/ejemplos-javascript/enviar-mensaje-telegram/
A partir de este ejemplo puedes crear aplicaciones más complejas desde el lado del cliente usando solamente JavaScript, aunque la especificación de la API permite consumirla desde cualquier lenguaje de programación.
Encuentra más detalles sobre la documentación de la API en: https://core.telegram.org/bots/api