Para poder obtener los mensajes de telegram de las conversaciones con nuestro bot existen dos posibilidades. Llamar al método getupdates constantemente o decirle al telegram que página debe llamar para gestionar los mensajes. Ésto se hace usando el método setWebhook. Hay que aclarar que los dos métodos son incompatibles, si usas uno, el otro dejará de funcionar.

 

Método setWebhook

Usando webhook le vamos a decir a telegram que cada vez que nuestro robot reciba un mensaje en una conversación, llame a un fichero. Éste fichero debe estar alojado en un servidor seguro (HTTPS) para poder funcionar. Una vez tengamos nuestro servidor seguro, ponerlo en marcha es muy sencillo.

Tan sólo deberemos acceder a la siguiente dirección:

 

https://api.telegram.org/botTOKENDENUESTROBOT/setwebhook?url=DIRECCIONURL

Si es todo correcto, veremos el mensaje:

Donde DIRECCIONURL será nuestro fichero al que llamará Telegram cada vez. Una vez hecho, si intentamos acceder a la dirección

https://api.telegram.org/botTOKENDENUESTROBOT/getupdates

veremos que nos muestra el siguiente error:

Que no cunda el pánico, ahora veremos como tratar los mensajes. Vamos a poner primero el código necesario y luego lo explicaremos.

 

Realmente, solo necesitaríamos unas líneas de código, pero al no poder “ver” lo que nos llega al robot por pantalla como lo hacíamos con el getupdate, lo que os recomiendo es que os guardéis un log con lo que nos llegue. Solo sería necesario lo siguiente:

 

En la primera línea ponemos el token de nuestro bot, y eso sería lo único necesario. En la variable $update, tendríamos el objeto JSON con la estructura de los mensajes que vamos recibiendo. Vamos a mandar un mensaje a nuestro bot, y vamos a ver que nos llega a nuestro fichero log.txt.

webhook

Y acto seguido, en nuestro servidor se nos ha generado el log con el siguiente contenido:

 

Ahora nos basta con saber tratar ese objeto JSON. Por ejemplo si queremos saber el id del chat desde donde nos hablan, lo tendríamos en la variable $update[“message”][“chat”][“id”]. O si queremos saber quién nos habla lo tendríamos en $update[“message”][“from”][“username”].

Respondiendo mensajes automáticamente

Visto lo anterior, vamos a hacer que nuestro bot responda siempre un mensaje cada vez que le hablen. Para ello añadiremos en nuestro código lo siguiente.

 

 

Hemos creado una función que usa el método sendMessage, al chat que obtenemos del objeto JSON y con el mensaje personalizado. Por lo que si ahora escribimos en nuestra conversación con el bot nos va a responder con el mensaje.

 

Contestación automática