Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Telegram Bot in Java

In questa lezione impareremo a realizzare un Telegram Bot in linguaggio Java, sfruttando le nozioni di base apprese nel resto della guida.
In questa lezione impareremo a realizzare un Telegram Bot in linguaggio Java, sfruttando le nozioni di base apprese nel resto della guida.
Link copiato negli appunti

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.

Ti consigliamo anche