Muchas veces, utilizar Frameworks para poder consumir una API, puede que nos haga olvidar que un API Rest sigue siendo solo una consulta http común. Como ejemplo de esto, enviaremos un archivo de audio utilizando Curl.
Sobre la API de Telegram
Cuando utilizamos un framework para bots de Telegram, por ejemplo, grammy
, telegraphjs
o node-telegram-bot-api
, delegamos al modulo encargarse de las cosas complicadas de la api de Telegram. Y mas que complicadas, suelen ser tediosas.
Pongo por ejemplo, el proceso de recibir una imagen. El proceso es el siguiente:
- Se consulta por nuevos mensajes al servidor de Telegram. Este contesta que si que hay un nuevo mensaje y envía los datos correspondientes.
- Del mensaje de respuesta anterior, tomamos una de las URL que envía Telegram y hacemos una nueva consulta al servidor.
- Telegram devuelve el archivo y tenemos que procesarlo para lo que necesitemos
- Opcional: Convertimos el archivo en un formato que pueda procesar nuestro lenguaje de programación
- Opcional: Enviamos el archivo a Telegram como respuesta o mensaje a donde queramos.
Los Framework suelen ahorrar todo ese proceso con una sola llamada a un método que se encarga de esto y en algunos casos, también del procesamiento del archivo
Ejemplo
Tal vez quieras echarle un ojo a la API de Telegram. No es la cosa mas sencilla de entender, pero puedes ver algunas cositas curiosas.
https://core.telegram.org/bots/api
Por ejemplo, puedes hacer consultas mediante GET y mediante POST.
Las consultas mediante GET puedes realizarlas con tu navegador, porque toda la información, incluso el token de tu bot, puede ser escrita en la barra de direcciones. La cosa es que no puedes mandar archivos. Al menos no que yo sepa.
Las consultas mediante POST son mas completas, pero a menos que escribas una pagina con Javascript que haga las consultas, no puedes usarlo de forma tan directa como con GET. Afortunadamente casi toda maquina moderna viene con Culr instalado, asi que si quieres hacer travesuras o automatizaciones sencillas, puedes hacerlo. Te dejo un ejemplo:
curl -X POST -H "Content-Type:multipart/form-data" -F chat_id={chat_ID} -F audio=@"{archivo}" "https://api.telegram.org/bot{token}/sendAudio"
- {chat_ID} Es el código de chat donde quieres enviar esto. Puedes mandarlo a un chat privado, canal o grupo.
- Audio es el tipo de archivo a enviar. Para este ejemplo elegí enviar una música.
- {archivo} Es el archivo con su extensión a enviar. Algo así como
música.mp3
- {token} Es el token que te da el botfather.
Como lo que estoy enviando es un archivo de música, tengo que utilizar el método sendAudio, así que es necesario usar la url https://api.telegram.org/bot{token}/sendAudio
Conclusiones
Desarrollar bots no es técnicamente complicado. Puedes hacer pequeñas tareas automatizadas con Curl y algún programador de tareas como CRON. Lo complicado de los bots de Telegram recaen en que su interfaz se basa en una ventana de chat, por lo que la interacción con el usuario podríamos llamarla, interfaz de texto conversacional. Eso implica que los comandos pueden ser imprecisos y complicados de interpretar.
De forma muy básica, es posible detectar patrones, por lo cual existen los comandos slash /help, /start etc, pero Telegram ha ido agregando mas y mas componentes que facilitan esto, dejando por ahora la complicación de la secuencialidad de los comandos y la persistencia. Son cosas que se pueden ir analizando con el tiempo, pero siempre se puede usar de forma sencilla como hemos visto hoy.