viernes, 9 de octubre de 2015

Enviar mensajes de Telegram desde una aplicación web

Seguro que muchos conocéis Telegram, esa aplicación de mensajería instantánea que intenta hacerle la competencia a WhatsApp, aunque de momento, todo sea dicho, no le llega ni a la suela de los zapatos en cuanto a popularidad, y esto a pesar de tener algunas características bastante superiores. Pero bueno, la historia de la tecnología está llena de ejemplos en los que un producto técnicamente superior se ve desbancado por otro técnicamente inferior, y es que no sólo los detalles técnicos pesan. Sin embargo, leo que Telegram va creciendo gradualmente, así que espero que algún día la mayoría de mis contactos se hayan mudado de WhatsApp a Telegram. Mientras tanto, a seguir con las dos aplicaciones

No quiero entrar en los detalles técnicos ahora, y la evangelización sólo la hago los domingos, así que mejor os remito a esta entrada en hipertextual.com donde explican razonablemente bien las diferencias más importantes entre ambas aplicaciones. Lectura muy recomendable.

http://hipertextual.com/2015/06/telegram-vs-whastapp

¿Ya la habéis leído? Bien. Ahora, vamos al turrón.

1. Los bots de Telegram

El 24 de junio de este año Telegram lanzó una característica que no he podido investigar hasta hace tan solo unos días (muy por encima, eso sí, aunque suficiente para lo que yo quiero hacer): los bots. [https://telegram.org/blog/bot-revolution]

Fig1. Los bots de telegram: una innovación muy interesante

Estos bots son cuentas de Telegram detrás de las cuáles no hay una persona, sino un programa, y sin necesidad de un número de teléfono asociado. Y son ideales para muchas cosas. Entre ellas, para que tus programas te puedan mandar mensajes al móvil, por ejemplo, aunque según parece esta es la menor de las utilidades que tienen. Pero es la que hoy me interesa.

El proceso básicamente consiste en tres pasos: 1) crear el bot, 2) chatear (unirse) a él todos aquellos que quieran recibir los mensajes y 3) enviar y recibir mensajes como si no hubiera un mañana

Ok, pues manos a la obra.

2. Crear un bot


Para esto se utiliza el BotFather, el padrino-de-los-bots (confío en que no habrá que explicar el juego de palabras. Si no, dejad de leer y sacad de la biblioteca la serie de películas de "El Padrino").

Simplemente, hay que entrar en la dirección [https://telegram.me/botfather]
y seguir las instrucciones que nos va dando.

Veremos un mensaje tal que así


Fig. 2. El padrino nos recibe en su casa


Podemos interactuar con el BotFather "chateando" directamente, teniendo en cuenta que las órdenes comienzan con una barra /, o bien podemos usar el botón que os he señalado con una flecha en la figura 2.

Creamos el bot con /newbot y le damos un nombre


Fig. 3. El bot recién creado, de nombre "Cosicas"

A continuación le damos un nombre de usuario, que termine en "bot". Esto nos devolverá un token que necesitaremos pasar en las invocaciones al bot, para poder enviar mensajes. Lo copiamos y lo guardamos en un lugar seguro. Lo necesitaremos un poco más adelante.


Fig. 4. Al darle el nombre de usuario recibimos un token



El bot posee una serie de métodos que podemos invocar a través de la URL

https://api.telegram.org/bot<token>/METHOD_NAME

Donde METHOD_NAME puede ser uno de los métodos que podéis consultar en la referencia de la API (aquí [https://core.telegram.org/bots/api]).

Por ejemplo, invocando al método getMe podemos obtener información básica del bot, entre ella el ID que lo identifica:

https://api.telegram.org/bot<token>/getMe

En mi caso, esto:


Fig. 5. Uso del método getMe para extraer el ID de nuestro bot


3. Chatear con el bot


A continuación debemos unirnos a la "conversación" con nuestro bot. Para esto, pinchamos en el enlace que nos ha dicho el BotFather en la figura 4. Es un enlace del tipo telegram.me/CosicasBot (que a su vez redirige a https://web.telegram.org/#/im?p=@CosicasBot). Allí veremos un botón que nos servirá para iniciar nuestra conversación con el bot.


Fig. 6. Accediendo a la "conversación" con el bot

Pulsamos en INICIAR y



Fig. 7. Ya estamos conectados a nuestro bot. Listos para enviar mensajes.


Al iniciar el chat con el bot, ya podemos obtener nuestro identificador para que nuestro programa pueda enviarnos mensajes. El chat_id identifica a nuestro usuario en Telegram, y el bot necesita saber este chat_id para poder enviarnos mensajes. En una reciente actualización he leído que también se puede hacer con el nombre del usuario. Yo voy a explicarlo con el chat_id.

¿Y cómo obtenemos ese chat_id? Un pequeño truco que he visto es invocar al método getUpdates de nuestro bot, tal y como describimos en el apartado anterior. Eso debería producir una respuesta en formato JSON que, entre otras cosas, lleva nuestro chat_id. Es decir, abrimos un navegador y tecleamos la URL siguiente:

https://api.telegram.org/bot<token>/getUpdates

Y deberíamos ver algo así:

 
Fig. 8. Forma "chapucerilla" de obtener el chat_id


En el recuadro rojo tenéis el chat_id.

4. Enviar un mensaje

Bueno, pues parece que ya lo tenemos todo. Ahora ya podemos crear una página PHP sencilla que envíe mensajes al bot. Sería algo tan simple como:



Fig. 9. Código para enviar un mensaje al bot

Por supuesto, no es necesario que sea PHP, puede estar escrita en cualquier lenguaje. Lo necesario es simplemente invocar la URL que se construye en la línea 15.

Por último, abro ese fichero PHP en mi servidor web y me voy al Telegram en mi móvil, et voilà!


Fig. 10. Mi PHP enviándome mensajes al móvil, ¡qué tierno!


Bueno, pues ahí tenéis una forma rápida de enviar mensajes al móvil vía Telegram desde vuestros programas. Pero ojo a los bots, que parece que tienen un gran potencial mucho más allá de esto.

Por cierto, el bot que he usado de ejemplo voy a cargármelo ahora mismo, que no quiero que nadie empiece a mandarme basura. Quien quiera probarlo, que se cree el suyo propio.



Fig. 11. Borrando el bot de este ejemplo

Bueno, seguramente habré cometido varios errores en este artículo, pero acabo de empezar a pelearme con los bots (tampoco creo que les dedique mucho más, ya tengo lo que quería) y seguro que algunas cosas las iré aprendiendo mejor en los próximos días.

Y por hoy, basta de programación.

9 comentarios:

  1. Hola, he visto tu post y está muy bien explicado.
    Siguiendo los pasos he conseguido ponerlo en marcha en un momento.
    Muchas gracias por escribirlo.
    El problema es que desde mi apliación PHP solo me puedo enviar mensajes a mi mismo al utilizar el CAHT_ID del usuario. Yo quiero enviar mensajes a todo aquel que incie un chat con el bot ¿sabes como se haría?
    Muchas gracias.

    ResponderEliminar
    Respuestas
    1. Estoy en el mismo problema.

      Eliminar
    2. guardar la respuesta del webhook en una bd para crear una lista de difucion

      Eliminar
  2. Hola, Mario y Noé. La verdad es que no había llegado a esa situación, pero seguro que no tiene que ser muy difícil; de hecho, me parece que esa es una forma de explotar el verdadero potencial de los bots. Lamentablemente, ahora no tengo tiempo de investigar cómo se hace. Quizás más adelante. Si encontráis la forma, os agradecería un comentario aquí con la explicación o enlace a donde se halle.

    Muchas gracias por pasaros por aquí.

    ResponderEliminar
  3. Buenas noches, como puedes enviar un botón en una respuesta y que este tenga una interacción al realizar un click

    ResponderEliminar