Bot de Telegram con Java

2
20880

Índice de contenidos

1. Introducción

En este tutorial vamos a crear un bot usando la API de Telegram.
Esta API es pública y puede ser usada tras la obtención de un token vinculado con la cuenta de Telegram.

La API puede ser consultada de múltiples formas pero en esta ocasión vamos a usar un wrapper que facilita el desarrollo llamado TelegramBots.
En la documentación de la API de Telegram se pueden encontrar más librerías para acceder a la API con distintos lenguajes.

2. Entorno

El tutorial está desarrollado usando el siguiente entorno:

  • Hardware: Portátil MacBook Pro 15′ (2.5 GHz Intel Core i7, 16GB DDR3, 500GB Flash Storage)
  • Sistema Operativo: Mac OS Sierra 10.13.4
  • Entorno de desarrollo: IntelliJ IDEA 2018.1
  • JDK 1.8
  • Gradle 4.7
  • TelegramBots 3.6.1

3. Obtención del token del bot

Lo primero que haremos será crear un nuevo bot y obtener su token de autenticación. Para ello nos descargamos la aplicación de Telegram de
aquí (Android)
o aqui (iOS).
Después la abriremos y nos daremos de alta con nuestro número de teléfono.

Posteriormente, hablaremos con el BotFather. Tras enviarle el comando /newbot y seguir sus instrucciones, nos creará las credenciales de nuestro nuevo bot y nos dará el token. Este token es privado y no se debe compartir.

4. Proyecto Java con Gradle

Lo siguiente que haremos será crear un nuevo proyecto gestionado con Gradle (también se puede hacer con Maven) y añadiremos la dependencia del wrapper de la API de Telegram:

dependencies {
	compile group: 'org.telegram', name: 'telegrambots', version: '3.6.1'
}

Esta librería nos permitirá acceder a toda la API de Telegram de forma fácil y sin tener que preocuparnos de usarla directamente.

5. Bot eco

Ahora desarrollaremos el código de nuestro bot. Para ello vamos a hacer que responda con la misma información que le enviemos.

Lo primero será crear la clase que se encargará de gestionar las peticiones del bot. Para ello tenemos que extender la clase TelegramLongPollingBot. Esto hará que nuestro bot pregunte periódicamente por nuevas actualizaciones a Telegram.
También podemos crear bots de tipo TelegramWebhookBot, y será Telegram quien nos avise de nuevas actualizaciones (en este caso usaremos Polling para simplificar).

import org.telegram.telegrambots.api.methods.send.SendMessage;
import org.telegram.telegrambots.api.objects.Update;
import org.telegram.telegrambots.bots.TelegramLongPollingBot;
import org.telegram.telegrambots.exceptions.TelegramApiException;

public class EchoBot extends TelegramLongPollingBot {

	@Override
	public void onUpdateReceived(final Update update) {
		// Esta función se invocará cuando nuestro bot reciba un mensaje

		// Se obtiene el mensaje escrito por el usuario
		final String messageTextReceived = update.getMessage().getText();

		// Se obtiene el id de chat del usuario
		final long chatId = update.getMessage().getChatId();

		// Se crea un objeto mensaje
		SendMessage message = new SendMessage().setChatId(chatId).setText(messageTextReceived);
		
		try {
			// Se envía el mensaje
			execute(message);
		} catch (TelegramApiException e) {
			e.printStackTrace();
		}
	}

	@Override
	public String getBotUsername() {
		// Se devuelve el nombre que dimos al bot al crearlo con el BotFather
		return "EchoBot";
	}

	@Override
	public String getBotToken() {
		// Se devuelve el token que nos generó el BotFather de nuestro bot
		return "999999:qwertyuiop";
	}
}

En esta clase tenemos la lógica de nuestro bot, ahora solo tenemos que crear otra clase que será el punto de entrada a la aplicación
y que registrará el bot.

import org.telegram.telegrambots.ApiContextInitializer;
import org.telegram.telegrambots.TelegramBotsApi;
import org.telegram.telegrambots.exceptions.TelegramApiException;

public class Main {
	public static void main(String[] args) {
		// Se inicializa el contexto de la API
		ApiContextInitializer.init();

		// Se crea un nuevo Bot API
		final TelegramBotsApi telegramBotsApi = new TelegramBotsApi();

		try {
			// Se registra el bot
			telegramBotsApi.registerBot(new EchoBot());
		} catch (TelegramApiException e) {
			e.printStackTrace();
		}
	}
}

6. Probamos el bot

Ahora tan solo tenemos que arrancar nuestro proyecto desde la clase Main y probar el resultado.
Buscaremos nuestro bot en la aplicación de Telegram, ya sea con @nombreDelBot o desde el BotFather escribiéndole el comando /mybots>.

En la pantalla del bot pulsaremos en el botón Iniciar y ya podremos enviarle mensajes. Nuestro
inteligente bot nos responderá con la misma información :).

6. Conclusiones

Este es el ejemplo más sencillo que podemos hacer usando este wrapper pero también podremos desarrollar bots más complejos como imágenes, emojis, ficheros, botones, comandos…Todo lo que
la API de Telegram permita. Incluso podremos desarrollar el bot como si de una aplicación Spring Boot se tratara.

Un saludo.

Alejandro

aalmazan@autentia.com

2 COMENTARIOS

  1. […] trying to make my first bot for Telegram and I’ve decided to use Java. I’m following this tutorial and copypasted the code from the two example classes (EchoBot and Main). The only thing I changed […]

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad