Telegram è una piattaforma di messaggistica istantanea che consente agli utenti di inviare messaggi, foto, video e documenti in modo sicuro e veloce. Una delle funzionalità più interessanti di Telegram è la possibilità di creare dei bot, ovvero dei programmi automatici in grado di interagire con gli utenti attraverso messaggi e comandi.
Per implementare un bot su Telegram, è necessario utilizzare le API che la piattaforma mette a disposizione, che sono due: le Bot API e le Telegram API. La prima è utilizzata per creare e gestire i bot, mentre la seconda per accedere alle funzionalità di base della piattaforma.
Per creare un bot su Telegram, è necessario innanzitutto avere un account Telegram e quindi seguire i seguenti passi:
- Contattare il bot @BotFather che ci assisterà nella creazione di un nuovo bot.
- Utilizzare l’API Bot per ricevere gli aggiornamenti dei messaggi inviati al bot e per inviare messaggi agli utenti.
- Creare la logica del bot in modo che possa rispondere alle richieste degli utenti in modo appropriato.
Creazione del Bot Telegram
Una volta essere entrati in contatto con @BotFater, sarà sufficiente avviare la richiesta di generazione del bot utilizzando il semplice comando /newbot
. Quindi ci verrà chiesto di dare un nome al bot ed una username e, se il processo si conclude con successo, @BotFater ci fornirà il token che consentirà al nostro bot di gestire collegarsi ai servizi telegram e ricevere le richieste destinate al bot.
Un’importante considerazione da fare è sul come conservare il token che ci è stato fornito. Ovviamente non è consigliato hardcodare il token nel codice perchè renderebbe difficile il suo aggiornamento ma neppure inserirlo in qualche file di configurazione è consigliabile, soprattutto se poi viene sottoposto a controllo del versionamento, che se non ben governato renderebbe il token accessibile a tutti ad esempio sull’area pubblica di github. In generale, è importante seguire le linee guida di sicurezza fornite dalla piattaforma Telegram e utilizzare le best practice di sicurezza per proteggere il token e garantire che solo le persone autorizzate abbiano accesso ad esso. Quali sono allora le alternative disponibili per conservare il token?
-
una delle opzioni più semplici per conservare il token in modo sicuro è quella di utilizzare una variabile d’ambiente. In questo modo, il token non è hardcoded nell’applicazione e può essere facilmente modificato senza dover modificare il codice dell’applicazione.
-
Un’altra opzione è quella di utilizzare un sistema di gestione delle chiavi, come ad esempio AWS KMS o Google Cloud KMS, per crittografare il token e gestire l’accesso alle chiavi in modo sicuro.
-
E’ anche possibile utilizzare un servizio di configurazione, come ad esempio Spring Cloud Config per gestire la configurazione dell’applicazione in modo centralizzato e sicuro.
- Un’altra opzione è quella di utilizzare una libreria di gestione delle chiavi, come ad esempio Vault di Hashicorp, per gestire e crittografare il token in modo sicuro.
Implementazione del Bot Telegram
Per utilizzare le API Telegram in un progetto Java, è innanzitutto necessario aggiungere la dipendenza ad esse, ad esempio inserendole nel file pom.xml
di un progetto Maven.
1 2 3 4 5 |
<dependency> <groupId>org.telegram</groupId> <artifactId>telegrambots</artifactId> <version>6.4.0</version> </dependency> |
L’oggetto principale responsabile della gestione della comunicazione con il bot sarà la classe JavaBossBot
che estende la classe org.telegram.telegrambots.bots.TelegramLongPollingBot
estendendone i tre metodi principali:
-
getBotUsername()
egetBotToken()
che devono restituire rispettivamente la username del bot ed il relativo token genera da @BotFater. -
onUpdateReceived()
che è invocato quando il backend di Telegram riceve un aggiornamento (ovvero un nuovo messaggio) dagli utenti del bot.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
public class JavaBossBot extends TelegramLongPollingBot { /* * Non utilizzare questo metodo per conservare username e token */ private final static String USERNAME = "JavaBoss"; private final static String TOKEN = "5912372293:....."; public String getBotUsername() { return USERNAME; } @Override public String getBotToken() { return TOKEN; } public void onUpdateReceived(Update update) { // do stuff } } |
Ad esempio il codice per il metodo on onUpdateReceived()
che restituisce un messaggio di benvenuto all’utente sarà:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public void onUpdateReceived(Update update) { if (update.hasMessage() && update.getMessage().hasText()) { long chatId = update.getMessage().getChatId(); SendMessage message = new SendMessage(); message.setChatId(chatId); message.setText("Benvenuto! Come posso aiutarti?"); try { execute(message); } catch (TelegramApiException e) { e.printStackTrace(); } } } |
Infine, per registrare ed avviare il nostro bot è necessario istanziare la classe org.telegram.telegrambots.meta.TelegramBotsApi
e registrare la classe JavaBossBot
.
1 2 3 4 5 6 7 8 9 10 |
public class Main { public static void main(String[] args) { try { TelegramBotsApi botsApi = new TelegramBotsApi( DefaultBotSession.class ); botsApi.registerBot(new JavaBossBot()); } catch (TelegramApiException e) { e.printStackTrace(); } } } |
A questo punto possiamo compilare ed eseguire il main
della classe Main
, quindi contattare il nostro bot all’indirizzo http://t.me/JavaBossBot e non appena invieremo comando /start
(o qualsiasi altro messaggio) il bot ci risponderà col messaggio di benvenuto programmato.
Il Codice Sorgente
Il codice sorgente del progetto è scaricabile qui telegram-bot.