Cómo desarrollar una aplicación Java, usando el IDE IntelliJ IDEA, que usando un Bot de Telegram permitirá enviar y recibir mensajes. Mostramos paso a paso cómo realizar esta aplicación con el repositorio Maven, desde IntelliJ. Escribiremos un mensaje al Bot de Telegram, desde el propio Telegram, el programa Java lo leerá y contestará con otro mensaje al chat de origen.

Requisitos para aplicación Java que envía y recibe mensajes con Bot en Telegram

Necesitaremos disponer de un IDE de desarrollo, en nuestro caso usaremos IntelliJ IDEA (puede servir cualquier otro como Eclipse o Netbeans). Este requisito no es obligatorio dado que el código fuente de una aplicación Java puede hacerse hasta con el bloc de notas y luego compilarse con javac. Pero el uso de un IDE y casi todos son gratuitos, facilitará y ayudará mucho en los procesos de depuración y compilación de la aplicación.

Usaremos el repositorio Maven para descargar los ficheros JAR de dependencias del paquete que usaremos para el envío y la lectura de mensajes de Telegram. Explicaremos paso a paso cómo usar Maven en IntelliJ IDEA.

Para este proceso necesitaremos un Bot de Telegram, que será el que nos proporcione el token de acceso a Telegram. En el siguiente enlace explicamos paso a paso cómo crear un Bot en Telegram y cómo obtener su token de seguridad (que necesitaremos para la conexión, como explicaremos más adelante):

Una vez creado el Bot en Telegram anotaremos el nombre del Bot y el token, la cadena de caracteres unívoca que identificará el Bot y que no debemos compartir públicamente.

Como es lógico, para las pruebas necesitaremos tener instalado Telegram o bien en el móvil o bien usando alguna de sus aplicaciones de escritorio o el propio Telegram Web.

Crear proyecto Java en IntelliJ IDEA usando Maven como repositorio que lee y envía mensajes a Telegram

En primer lugar crearemos el proyecto Java, para ello abriremos el IDE de desarrollo, en nuestro caso IntelliJ IDEA. Pulsaremos en «File» – «New» – «Project…»:

Crear proyecto Java en IntelliJ IDEA usando Maven como repositorio que lee y envía mensajes a Telegram

Elegiremos «Maven» y la versión de SDK de Java que queramos, teniendo en cuenta que según la versión con la que generemos los compilados y los JAR luego necesitaremos una versión Java igual o superior para que la aplicación funcione. Pulsaremos en «Next»:

Crear proyecto Java en IntelliJ IDEA usando Maven como repositorio que lee y envía mensajes a Telegram

Introduciremos los datos básicos del proyecto Java con Maven:

  • Name: nombre del proyecto, por ejemplo «TelegramBotEnvioLectura».
  • Location: ubicación de los archivos del proyecto (xml, java, jar, …).
  • Artifact Coordinates: podremos indicar aquí los datos de bloque de código reutilizable (artifact).

Pulsaremos «Finish»:

Crear proyecto Java en IntelliJ IDEA usando Maven como repositorio que lee y envía mensajes a Telegram

Al ser un proyecto Maven, el asistente de IntelliJ IDEA nos deja abierto, al principio, el fichero pom.xml de Maven, que es donde podremos establecer los distintos repositorios y las dependencias de nuestro programa. Por ejemplo, si hemos añadido un Artifact, nos insertará el código XML de dicho Artifact en el pom.xml.

Crear proyecto Java en IntelliJ IDEA usando Maven como repositorio que lee y envía mensajes a Telegram

Aprovechando que tenemos abierto el fichero pom.xml (si no lo tenemos podemos abrirlo haciendo doble clic sobre él en la ventana de navegación del proyecto), añadiremos las dependencias necesarias para nuestra aplicación Java de envío y lectura de mensajes en Telegram. Pegaremos el siguiente código en el fichero pom.xml, antes de la etiqueta de cierre </project>:

Crear proyecto Java en IntelliJ IDEA usando Maven como repositorio que lee y envía mensajes a Telegram

Una vez agregadas las dependencias en el fichero pom.xml, nos aparecerá un botón (Load Maven Changes) para actualizar el repositorio, pulsaremos sobre él:

Crear proyecto Java en IntelliJ IDEA usando Maven como repositorio que lee y envía mensajes a Telegram

Crearemos una nueva clase, que será la clase principal del programa Java, la clase Main. Para ello pulsaremos con el botón derecho del ratón sobre la carpeta «Java» y en el menú emergente elegiremos «New» – «Java Class»:

Crear proyecto Java en IntelliJ IDEA usando Maven como repositorio que lee y envía mensajes a Telegram

Introduciremos el nombre para la clase, en nuestro caso «Main» y pulsaremos INTRO:

Crear proyecto Java en IntelliJ IDEA usando Maven como repositorio que lee y envía mensajes a Telegram

En una primera aproximación y para realizar las pruebas, el código Java de la clase Main que a continuación listamos completo, leerá los mensajes que se le envíen al Bot indicado en el método getBotUserName y con el token getBotToken. El programa Java permanecerá a la escucha, recibirá los mensajes y contestará a cada usuario que haya escrito al Bot un mensaje privado o bien que haya escrito en un grupo de Telegram donde esté agregado el Bot. El programa Java responderá el mismo mensaje recibido, para confirmar que le ha llegado. Pegaremos el siguiente código en la clase Main.java:

El código anterior incluye comentarios explicando las partes y métodos más importantes.

Antes de compilar y probar el código anterior, conviene cambiar el language level a 6, para evitar errores de compilación con los Overrides. Para ello accederemos al menú «File» – «Project Structure»:

Crear proyecto Java en IntelliJ IDEA usando Maven como repositorio que lee y envía mensajes a Telegram

Pulsaremos en Modules en la parte izquierda y en la derecha, en el desplegable de Language level, elegiremos «6 – @Override in interfaces»:

Crear proyecto Java en IntelliJ IDEA usando Maven como repositorio que lee y envía mensajes a Telegram

El código anterior quedará en la clase Main:

Crear proyecto Java en IntelliJ IDEA usando Maven como repositorio que lee y envía mensajes a Telegram

Realizamos la compilación del programa Java y hacemos las primeras pruebas para ver su funcionamiento. Para ello pulsaremos en el menú «Run» y en «Run…»:

Crear proyecto Java en IntelliJ IDEA usando Maven como repositorio que lee y envía mensajes a Telegram

Al ser la primera vez que ejecutamos la aplicación, deberemos editar la compilación para establecer los parámetros de inicio (clase Main, versión JRE, ..). Para ello pulsaremos en «Edi Configurations…»:

Crear proyecto Java en IntelliJ IDEA usando Maven como repositorio que lee y envía mensajes a Telegram

Pulsaremos en + para añadir una nueva configuración, elegiremos «Application»:

Crear proyecto Java en IntelliJ IDEA usando Maven como repositorio que lee y envía mensajes a Telegram

Introduciremos el nombre en «Name» [1], por ejemplo «TelegramBotEnvioLectura», elegiremos la clase Main en «Main class» [2], en nuestro caso «Main». Desde esta ventana podremos configurar el resto de opciones de ejecución, por ejemplo la versión de JRE que usaremos, que condicionará la versión de JVM que necesitaremos para ejecutar el JAR en su momento. Una vez establecidas las opciones pulsaremos en «Apply» y en «Run» para ejecutarla:

Crear proyecto Java en IntelliJ IDEA usando Maven como repositorio que lee y envía mensajes a Telegram

Una vez configurado el inicio, podremos compilarla cada vez que queramos desde el menú «Run» – «Run TelegramBotEnvioLectura»:

Crear proyecto Java en IntelliJ IDEA usando Maven como repositorio que lee y envía mensajes a Telegram

La aplicación de iniciará, si le hemos pasado por parámetro el valor del nombre del usuario del Bot y el token, se pondrá a la escucha de mensajes. En caso contrario, como vemos en la siguiente imagen, nos solicitará ambos datos por pantalla. En cuanto los hayamos introducido, se pondrá a la escucha. Mostrará estos warnigs pero no suponen problema para su correcto funcionamiento, los ignoraremos:

SLF4J: Failed to load class «org.slf4j.impl.StaticLoggerBinder».
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See slf4j.org/codes.html#StaticLoggerBinder for further details.
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.google.inject.internal.cglib.core.$ReflectUtils$1 (file:/…/alonso/.m2/repository/com/google/inject/guice/4.2.2/guice-4.2.2.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
WARNING: Please consider reporting this to the maintainers of com.google.inject.internal.cglib.core.$ReflectUtils$1
WARNING: Use –illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release

Crear proyecto Java en IntelliJ IDEA usando Maven como repositorio que lee y envía mensajes a Telegram

Ahora, para comprobar que recibe los mensajes que se le envíen al Bot, abriremos Telegram y escribiremos al Bot (o en un grupo donde esté el Bot) cualquier texto:

Crear proyecto Java en IntelliJ IDEA usando Maven como repositorio que lee y envía mensajes a Telegram

Comprobaremos la consola del programa Java, veremos que ha recibido el mensaje y lo ha reenviado al chat origen:

Crear proyecto Java en IntelliJ IDEA usando Maven como repositorio que lee y envía mensajes a Telegram

Comprobaremos que ha llegado al Telegram:

Crear proyecto Java en IntelliJ IDEA usando Maven como repositorio que lee y envía mensajes a Telegram

Generar fichero ejecutable Java JAR para probar en Windows o Linux

Una vez que hemos depurado la aplicación y comprobado que funciona correctamente desde el IDE IntelliJ IDEA, es momento de crear el archivo JAR ejecutable para poder probar el programa en equipos Windows y Linux. Para ello abriremos el menú «File» – «Project Structure…». En la parte izquierda pulsaremos en «Artifacts» y en la derecha en el botón + (Add):

Generar fichero ejecutable Java JAR para probar en Windows o Linux

Pulsaremos en «JAR» y en «From modules with dependencies…»:

Generar fichero ejecutable Java JAR para probar en Windows o Linux

Elegiremos la Main Class, en nuestro caso «Main», dejaremos marcada la opción «extract to the target JAR» y el directorio por defecto para el fichero MANIFEST.MF:

Generar fichero ejecutable Java JAR para probar en Windows o Linux

Pulsaremos en «TelegramBotEnvioLectura.jar» y comprobaremos que aparece la clase Main en Main Class y la ruta del fichero de manifiesto correctos. Pulsaremos en OK:

Generar fichero ejecutable Java JAR para probar en Windows o Linux

Para generar el JAR pulsaremos en el menú «Build» – «Build Artifacts»:

Generar fichero ejecutable Java JAR para probar en Windows o Linux

En el menú emergente pulsaremos en «Build»:

Generar fichero ejecutable Java JAR para probar en Windows o Linux

Iniciará la generación del JAR, mostrando el siguiente resultado en la consola:

Executing pre-compile tasks…
Loading Ant Configuration…
Running Ant Tasks…
Running ‘before’ tasks
Checking sources
Copying resources… [TelegramBotEnvioLectura]
Building artifact ‘TelegramBotEnvioLectura:jar’…
Building artifact ‘TelegramBotEnvioLectura:jar’: copying files…
Building archives…
Building …/alonso/IdeaProjects/TelegramBotEnvioLectura/out/artifacts/TelegramBotEnvioLectura_jar/TelegramBotEnvioLectura.jar…
Copying archives…
Running ‘after’ tasks
Finished, saving caches…
Executing post-compile tasks…
Loading Ant Configuration…
Running Ant Tasks…
Synchronizing output directories…

Si todo es correcto podremos acceder a la carpeta ...TelegramBotEnvioLectura\out\artifacts\TelegramBotEnvioLectura_jar y comprobar que se ha creado el TelegramBotEnvioLectura.jar:

Generar fichero ejecutable Java JAR para probar en Windows o Linux

Este será el fichero «ejecutable» de nuestra aplicación, que podremos enviar a cualquier equipo con Windows o con Linux para su ejecución, como explicamos a continuación.

Probar aplicación Java de lectura y envío de mensajes a Telegram en Windows y Linux

A continuación os mostramos cómo ejecutar el archivo JAR generado de la aplicacación que lee y envía mensajes de Telegram. Tanto en sistemas operativos Windows como Linux. En ambos casos necesitaremos disponer de una versión de Java igual o superior a la usada en la generación del JAR. Explicamos todo esto en este artículo:

Probar aplicación Java en JAR en Linux que lee y envía mensajes de Telegram

Para el caso de un equipo con sistema operativo Linux, para cualquier distribución, como siempre tendremos que comprobar que el equipo dispone de Java en una versión igual o superior a la que se ha usado para compilar el programa. Para comprobar la versión de Java es suficiente con ejecutar, en una ventana de terminal (línea de comandos), el siguiente comando:

java -version

En este artículo explicamos cómo instalar Java y comprobar la versión en Linux:

En cuanto tengamos Java a una versión igual o superior y tengamos en Linux el fichero .jar generado anteriormente, accederemos a la carpeta donde hayamos copiado el fichero TelegramBotEnvioLectura.jar y podremos ejecutar la aplicación con el siguiente comando:

java -jar TelegramBotEnvioLectura.jar

El comando anterior debería funcionar, pero da un error: «no hay ningún atributo de manifiesto principal en TelegramBotEnvioLectura.jar«. No es problema, ejecutaremos este otro comando que sí funcionará:

java -cp TelegramBotEnvioLectura.jar Main

Si no le pasamos por parámetro al comando anterior el usuario del bot y el token nos los solicitará en la línea de comandos. Introduciremos el nombre de usuario del Bot y pulsaremos INTRO. Introduciremos ahora el token de seguridad del Bot y pulsaremos INTRO. Si los datos son correctos el programa se iniciará y quedará a la escucha y espera de mensajes enviados al Bot:

Probar aplicación Java en JAR en Linux que lee y envía mensajes de Telegram

Como hemos hecho en la depuración y compilación del programa, abriremos Telegram y le escribiremos al Bot o en un grupo donde esté el Bot:

Probar aplicación Java en JAR en Linux que lee y envía mensajes de Telegram

Comprobaremos que la aplicación Java en el equipo Linux recibe el mensaje y lo reenvía:

Probar aplicación Java en JAR en Linux que lee y envía mensajes de Telegram

Y comprobaremos en Telegram que efectivamente ha llegado el mensaje:

Probar aplicación Java en JAR en Linux que lee y envía mensajes de Telegram

De esta forma hemos verificado que la aplicación funciona perfectamente en equipos Linux. Para las pruebas hemos usado un equipo con Linux CentOS 7, pero el mismo JAR el válido para cualquier otra distribución: Ubuntu, Red Hat, Suse, Mint, Fedora, Debian, etc.. Incluso funcionará en equipos con MAC, únicamente necesitarán tener la máquina virtual Java con una versión igual o superior a la usada en la compilación, como ya hemos explicado.

Probar aplicación Java en JAR en Windows que lee y envía mensajes de Telegram

Para el caso de equipos con sistemas operativos Windows (cualquier versión desde Windows XP, Windows Vista, Windows 7, Windows 8, Windows 10, Windows Server 2003, Windows Server 2008, Windows Server 2012, Windows Server 2019, …), el proceso será el mismo que para equipos Linux, necesitaremos disponer de la misma versión de la máquina virtual Java o una superior que se haya usado en la compilación y generación del JAR.

Abriremos una ventana de línea de comandos (MS-DOS, cmd, consola) y comprobaremos la versión de Java con el comando:

java -version

Si no tenemos la versión correcta o bien el comando anterior da error, podremos seguir las instrucciones del siguiente artículo para instalar Java en el equipo Windows:

Una vez que tengamos la versión correcta de Java en Windows podremos ejecutar la aplicación con los mismos comandos que en Linux.

Accederemos desde la línea de comandos a la carpeta donde hayamos copiado el fichero TelegramBotEnvioLectura.jar (con cd ruta) y podremos ejecutar la aplicación con el siguiente comando:

java -jar TelegramBotEnvioLectura.jar

El comando anterior debería funcionar, pero da un error: «no hay ningún atributo de manifiesto principal en TelegramBotEnvioLectura.jar«. No es problema, ejecutaremos este otro comando que sí funcionará:

java -cp TelegramBotEnvioLectura.jar Main

Si no le pasamos por parámetro al comando anterior el usuario del bot y el token nos los solicitará en la línea de comandos. Introduciremos el nombre de usuario del Bot y pulsaremos INTRO. Introduciremos ahora el token de seguridad del Bot y pulsaremos INTRO. Si los datos son correctos el programa se iniciará y quedará a la escucha y espera de mensajes enviados al Bot:

Probar aplicación Java en JAR en Windows que lee y envía mensajes de Telegram

Y en Telegram veremos que funciona exactamente igual que en el caso de Linux:

Probar aplicación Java en JAR en Windows que lee y envía mensajes de Telegram

Si queremos pasarle el usuario y el token por parámetro, para no tener que escribirlo una y otra vez, es suficiente con ejecutar el comando anterior añadiendo al final los dos parámetros:

Probar aplicación Java en JAR en Windows que lee y envía mensajes de Telegram

Descarga del código fuente Java completo del proyecto en IntelliJ IDEA

Por supuesto, os pasamos el enlace para la descarga del código fuente completo de la aplicación Java que hemos comentado en este artículo. Incluye el fichero pom.xml con las dependencias de Maven, así como el ejecutable JAR ya generado:

Ejecutar un comando del sistema operativo mediante mensaje de Telegram

Para darle una utilidad real a nuestra aplicación y una vez que hemos comprobado que funciona perfectamente tanto en Windows como en Linux, vamos a cambiar un poco el código para que en lugar de responder con el mismo mensaje que lee, ejecute un comando del sistema operativo. Es decir, escribiremos al Bot de Telegram un comando del sistema operativo (Windows o Linux según donde tengamos ejecutándose la aplicación), la aplicación Java lo leerá y lo ejecutará en el sistema operativo (en real) y devolverá el resultado de nuevo al chat de Telegram origen.

Para no alargar más este artículo abordaremos este programa Java en un nuevo tutorial: