- Learn
- Telegram Bot: come crearli, la guida
- Telegram Bot in Java
Telegram Bot in Java
Il linguaggio Java offre diverse opzioni per sviluppare TelegramBot con varie librerie che agevolano di molto il lavoro. L’approccio a tali procedure dovrà passare ancora una volta attraverso il BotFather, il Bot “progenitore” che fornisce il token di autenticazione. A proposito, ricapitoliamo i passaggi:
- accedendo al BotFather richiediamo l’inizializzazione del Bot che stiamo per creare. Sarà richiesto di fornirne il nome ed un identificativo che dovrà terminare con il suffisso bot;
- il token che ci viene restituito – una lunga stringa alfanumerica – va salvato in modo da poterlo inserire nel codice che lo renderà disponibile durante il dialogo con le API Telegram;
- predisponiamo il progetto con la libreria che vorremo sfruttare e gli altri elementi necessari.
A questo punto possiamo iniziare a conoscere una delle varie possibilità che il linguaggio Java offre: la libreria TelegramBots.
La libreria TelegramBots
La libreria TelegramBots può essere integrata in un progetto in diversi modi, soprattutto in funzione del package manager cui siamo soliti affidarci.
Se scegliamo di gestire il progetto con Maven dovremo aggiungere nel file pom.xml il seguente blocco dependency:
<dependency>
<groupId>org.telegram</groupId>
<artifactId>telegrambots</artifactId>
<version>4.9.1</version>
</dependency>
mentre una configurazione per Gradle avrà bisogno della seguente direttiva:
compile "org.telegram:telegrambots:4.9.1"
Si può procedere tuttavia per altri modi come l’integrazione di un archivio jar scaricabile a questo indirizzo. Noi abbiamo preso in considerazione in tutti i casi la versione della libreria più recente in questo momento ma, come si può immaginare, al momento del suo utilizzo converrà sempre consultare la pagina del progetto per verificare eventuali aggiornamenti.
Noi, per gli esempi, abbiamo scelto Maven ma al termine della vostra procedura preferita avrete pronto il medesimo set di classi. Iniziamo subito con un esempio in stile “echo” ovvero un bot che restituisce il messaggio che ha ricevuto dall’utente. Questo ci permetterà, al contempo, di verificare la nostra installazione e apprendere quali sono le classi principali:
class EchoBot extends TelegramLongPollingBot {
public String getBotUsername() {
return "Echo Bot";
}
@Override
public String getBotToken() {
// inserire qui il proprio token
return "ABCXYZ123456789";
}
public void onUpdateReceived(Update update) {
String msg = update.getMessage().getText();
String chatId=update.getMessage().getChatId().toString();
SendMessage sendMessage = new SendMessage();
sendMessage.setChatId(chatId);
sendMessage.setText(msg);
try {
execute(sendMessage);
} catch (TelegramApiException e) {
// gestione errore in invio
}
}
}
public class Main {
public static void main(String[] args) {
ApiContextInitializer.init();
TelegramBotsApi api = new TelegramBotsApi();
try {
api.registerBot(new EchoBot());
} catch (TelegramApiRequestException e) {
// gestione errore in registrazione
}
}
}
Abbiamo scritto due classi di cui una non pubblica solo per la comodità di scrivere tutto in un file ma si potrà operare la scelta organizzativa che più si preferisce. Il bot è incluso in una classe che prende il nome di EchoBot che estende TelegramLongPollingBot: questo permetterà di dotarla già di tutti i meccanismi fondamentali. L’estensione della classe obbligherà all’overload di tre metodi astratti: getBotToken che restituirà su richiesta il token del bot che il BotFather ci ha offerto; getBotUsername restituirà il nome del bot; onUpdateReceived si occuperà di rispondere ai messaggi che avremo ricevuto. Si noti che in getBotToken il codice di esempio non mostra alcun token valido: al momento del suo impiego sarà pertanto necessario completarlo con la chiave a propria disposizione.
Una volta pronta la classe la avvieremo in un main. Notiamo che una volta creato un oggetto TelegramBotsApi questo si occuperà di registrare il bot mediante il metodo registerBot. Fatto ciò e avviato il programma – anche nella propria macchina di lavoro purchè connessa a Internet – si potrà iniziare ad interagire con il Bot.
Esempio: bot per conversione di valute
Come per le altre lezioni di questa guida creiamo un bot di esempio che seguirà lo schema del servizio echo ma si occuperà della conversione di importi tra le valute euro e dollaro. Il tasso di cambio viene fissato nella costante EXCHANGE definita nella classe ExchangeBot, vero fulcro del bot. Come si può immaginare si tratta di un valore fittizio creato a scopo di esempio ma lo si potrà aggiornare a piacimento.
Questo bot riceverà messaggi come /eur 100 o /usd 100 restituendo nel primo caso il controvalore in dollari e nel secondo quello in euro.
Ecco il codice:
class ExchangeBot extends TelegramLongPollingBot {
private final static float EXCHANGE=1.125f;
public String getBotUsername() {
return "ExchangeBot";
}
@Override
public String getBotToken() {
// inserire qui il proprio token
return "ABCXYZ123456789";
}
public void onUpdateReceived(Update update) {
// estrazione del messaggio
String msg = update.getMessage().getText();
// suddivisione di comando e valore
String[] parti=msg.split(" ");
String comando=parti[0].substring(1);
Float valore=Float.parseFloat(parti[1]);
String chatId=update.getMessage().getChatId().toString();
// creazione del messaggio di risposta
SendMessage sendMessage = new SendMessage();
sendMessage.setChatId(chatId);
String risposta=null;
// conversione dei valori
switch(comando) {
case "usd":
risposta=(valore/EXCHANGE)+" eur";
break;
case "eur":
risposta=(valore*EXCHANGE)+" usd";
}
sendMessage.setText(risposta);
try {
// invio della risposta
execute(sendMessage);
} catch (TelegramApiException e) {
// gestione errore in invio
}
}
}
public class ExchangeBotMain {
public static void main(String[] args) {
ApiContextInitializer.init();
TelegramBotsApi api = new TelegramBotsApi();
try {
api.registerBot(new ExchangeBot());
} catch (TelegramApiRequestException e) {
// gestione errore in registrazione
}
}
}
Avviando il programma avremo a disposizione il nostro servizio di conversione con cui potremo attendere le richieste dell’utente. Le differenze più rilevanti con il servizio “echo” sono presenti in onUpdateReceived dove, come indicato dai commenti, ci occupiamo di eseguire il parsing del messaggio estraendo il valore inviato. A quel punto non mancherà altro che eseguire il calcolo della conversione e preparare la risposta.
Telegram Bot in PHP
La guida è in pubblicazione. Altre lezioni saranno pubblicate nei prossimi giorni.
Se vuoi aggiornamenti su Java, Programmazione inserisci la tua email nel box qui sotto:
Compilando il presente form acconsento a ricevere le informazioni relative ai servizi di cui alla presente pagina ai sensi dell'informativa sulla privacy.
La tua iscrizione è andata a buon fine. Se vuoi ricevere informazioni personalizzate compila anche i seguenti campi opzionali:
Compilando il presente form acconsento a ricevere le informazioni relative ai servizi di cui alla presente pagina ai sensi dell'informativa sulla privacy.
I Video di HTML.it
Writing Android Libraries
Worked for Nokia for 5 years, growing expertise in development for embedded devices and tooling. Worked for Realm for the […]