Nous allons, dans cet article, voir comment nous pouvons créer simplement un petit bot Telegram en Java, avec Spring Boot, et aller un peu plus loin. Nous allons même parler de crypto-monnaies !
Pour commencer un peu de vocabulaire.
Telegram est une application et un service de messagerie instantanée multiplateforme en freemium hébergée dans le cloud. (source: wikipedia). Vous pouvez l’utiliser sur votre smartphone ou ordinateur. Telegram est beaucoup utilisée dans le monde des crypto-monnaies et il est possible de créer des bots sur l’application qui vont réagir aux messages que nous leur envoyons.
Un bot informatique est un programme qui fonctionne tout seul ou presque tout seul et qui communique avec des serveurs. Il se connecte et agit comme si c’était une personne qui utilisait un ordinateur, ce qui lui vaut le nom de « bot », une forme raccourcie du mot « robot ».
Dans cet article, nous allons implémenter pas à pas un petit bot "Hello World", capable de répondre à nos commandes sur Telegram. Ensuite, nous ouvrirons la réflexion sur l'étendue des possibilités offertes par ce type de bot, avec un exemple concret lié au monde des crypto-monnaies.
1 - L’API Key Telegram
Pour pouvoir créer simplement un bot sur Telegram, nous allons avoir besoin d’une API Key. Pour cela, rien de plus simple. Il suffit de contacter le père des bots sur Telegram.
Et non, ce n’est pas une blague, c’est un bot qui s’appelle le BotFather qui vous donnera accès à votre API Key !
Il vous suffit de le contacter en cliquant sur ce lien : https://telegram.me/BotFather

Ensuite, la commande par défaut sur les bots Telegram est généralement /start
.
En envoyant cette commande au père des bots (le BotFather), il vous renverra la liste des fonctionnalités disponibles, un peu comme une commande help
.

Pour obtenir votre clé API, il vous suffit d’envoyer la commande /newbot
au BotFather, puis de répondre à quelques questions (comme le nom de votre bot et son identifiant unique). En quelques instants, vous recevrez votre token.

Voilà, vous avez votre API Key pour votre bot Telegram. Pas plus compliqué que ça !
2 - Une application Java Spring boot avec les bonnes dépendances.
Pas besoin d’énormément de choses pour faire un petit bot Telegram, nous allons donc simplement générer une base d’application Spring Boot avec Spring Initializr (https://start.spring.io/). Vous pouvez vraiment garder la configuration par défaut et simplement cliquer sur “generate”.
Une seule dépendance maven est à rajouter dans le pom.xml, celle de Telegram bots :
<!-- TELEGRAM BOTS DEPENDENCY -->
<dependency>
<groupId>org.telegram</groupId>
<artifactId>telegrambots</artifactId>
<version>6.9.7.1</version>
</dependency>
Et c’est tout ! On est prêt pour démarrer un bot Telegram !
3 - Un service, une implémentation, une petite configuration et c’est tout ?
3.1 - Le squelette
Dit comme ça, ça semble facile… et en réalité, ça l’est vraiment !
Commençons par créer ensemble un petit bot "Hello World", qui répondra simplement "Hello! I am a bot!"
lorsqu’on lui enverra la commande /start
. Pour toute autre commande ou message, il indiquera qu’il ne comprend pas.
Pour cela, nous allons implémenter un petit service qui étend une classe abstraite fournie par la librairie Telegram. Il nous suffira ensuite de surcharger deux méthodes clés pour que notre bot fonctionne correctement.
Le squelette de ce service ressemblera à ceci :
@Service
public class HelloWorldBotApplicationService
extends TelegramLongPollingBot {
@Override
public void onUpdateReceived(Update update) {
}
@Override
public String getBotUsername() {
return "";
}
}
Nous allons surcharger deux méthodes principales :
onUpdateReceived
: elle permet de récupérer tous les messages envoyés par l’utilisateur. C’est ici que nous pourrons définir la logique de réponse du bot.getBotUsername
: cette méthode retourne simplement le nom de notre bot, tel qu’il a été défini lors de sa création avec le BotFather.
3.2 - Où est-ce que je mets mon API Key ?
La clé API (ou token) est transmise via le constructeur de notre service, en appelant le constructeur de la classe parente avec : super(String token)
.
Pour simplifier la gestion du token, je l’ai placé dans un fichier .txt
et j’ai créé un bean Spring annoté avec @Configuration
, afin de pouvoir y accéder facilement dans mon application.
@Configuration
public class TgBotConfiguration {
// Must be in the resources folder
private static final String TOKEN_FILE_NAME = "YOUR_TOKEN_FILE_HERE.txt";
private static final String DEFAULT_API_KEY = "fake_api_key";
@Bean
public TgBotToken botToken() throws IOException {
ClassPathResource ressource = new ClassPathResource(TOKEN_FILE_NAME);
if (!ressource.exists()) {
return new TgBotToken(DEFAULT_API_KEY);
}
return new TgBotToken(new String(ressource.getInputStream().readAllBytes(), StandardCharsets.UTF_8));
}
}
Mon squelette de service appelle simplement le constructeur de la classe parente avec le token, et voilà, la configuration est en place !
@Service
public class HelloWorldBotApplicationService
extends TelegramLongPollingBot {
public HelloWorldBotApplicationService(TgBotToken botToken) {
super(botToken.token());
}
@Override
public void onUpdateReceived(Update update) {
}
@Override
public String getBotUsername() {
return "";
}
}
3.3 - L’envoi d’un message
Dans un bot Telegram, chaque conversation (ou "chat") avec un utilisateur est identifiée par un identifiant unique, que l’on peut représenter par un Long
. Le message que le bot doit renvoyer sera, quant à lui, une simple chaîne de caractères (String
).
On peut donc très facilement créer une petite méthode d’envoi de message, qui permettra à notre bot de répondre aux différentes commandes que nous lui envoyons.
public void sendText(Long who, String what) {
SendMessage sm = SendMessage.builder()
.chatId(who.toString()) // À qui on envoie le message
.text(what)
.build(); // Contenu du message
try {
execute(sm); // Envoi réel du message
} catch (TelegramApiException e) {
throw new RuntimeException(e); // Toute erreur sera affichée ici
}
}
Cette méthode permettra au bot d’envoyer un message (what
) à un utilisateur ou un groupe identifié par un chatId
(who
).
Pour cela, il suffit de créer un objet SendMessage
(fourni par la librairie Telegram), dans lequel on définit les informations nécessaires. Ensuite, on appelle simplement la méthode execute(SendMessage sm)
, également fournie par la librairie, pour envoyer le message.
Rien de bien compliqué jusque-là !
3.4 - L’implémentation
Nous avons notre méthode d’envoi de messages, ainsi que le squelette de notre bot. Il ne nous reste plus qu’à implémenter la méthode onUpdateReceived
pour que le bot puisse réagir aux messages envoyés par l’utilisateur.
Comme annoncé pour ce bot simple, nous allons lui faire répondre "Hello! I am a bot!" lorsque l’utilisateur envoie la commande /start
. Pour toute autre commande ou message, il indiquera qu’il ne comprend pas.
Voici l’implémentation :
@Override
public void onUpdateReceived(Update update) {
log.info("Received update: '%s'".formatted(update));
if (update.hasMessage() && update.getMessage().hasText()) {
String text = update.getMessage().getText();
if (text.equals("/start")) {
sendText(update.getMessage().getChatId(), "Hello! I am a bot!");
} else {
sendText(update.getMessage().getChatId(), "I don't understand you.");
}
}
}
Toujours très simple : si le message envoyé par l’utilisateur est /start
, le bot répond "Hello! I am a bot!", sinon, il indique qu’il ne comprend pas la commande.
Voici le service complet pour plus de lisibilité :
@Service
public class HelloWorldBotApplicationService extends TelegramLongPollingBot {
private final Logger log = LoggerFactory.getLogger(HelloWorldBotApplicationService.class);
public HelloWorldBotApplicationService(TgBotToken botToken) {
super(botToken.token());
}
@Override
public void onUpdateReceived(Update update) {
log.info("Received update: '%s'".formatted(update));
if (update.hasMessage() && update.getMessage().hasText()) {
String text = update.getMessage().getText();
if (text.equals("/start")) {
sendText(update.getMessage().getChatId(), "Hello! I am a bot!");
} else {
sendText(update.getMessage().getChatId(), "I don't understand you.");
}
}
}
@Override
public String getBotUsername() {
return "TT_hugo_bot";
}
public void sendText(Long who, String what) {
SendMessage sm = SendMessage.builder()
.chatId(who.toString()) // À qui on envoie le message
.text(what)
.build(); // Contenu du message
try {
execute(sm); // Envoi réel du message
} catch (TelegramApiException e) {
throw new RuntimeException(e); // Toute erreur sera affichée ici
}
}
}
3.5 - L’enregistrement de notre bot auprès de Telegram
Notre service est maintenant entièrement implémenté. Il ne reste plus qu’à l’enregistrer auprès de Telegram.
Pour cela, un template est fourni dans la documentation officielle de Telegram (https://core.telegram.org/bots/tutorial) : il suffit simplement d’y remplacer le nom du service par le nôtre.
@Component
public class JavaHelloWorldBot {
private final Logger log = LoggerFactory.getLogger(JavaHelloWorldBot.class);
public JavaHelloWorldBot(HelloWorldBotApplicationService helloWorldBotApplicationService) throws TelegramApiException {
registerBot(helloWorldBotApplicationService);
log.info("Telegram bot registered");
}
private void registerBot(HelloWorldBotApplicationService helloWorldBotApplicationService) throws TelegramApiException {
TelegramBotsApi botsApi = new TelegramBotsApi(DefaultBotSession.class);
botsApi.registerBot(helloWorldBotApplicationService);
}
}
3.6 - Et c’est tout ?
Oui, c’est tout ! Vous pouvez désormais lancer votre application Spring Boot en local et discuter avec votre bot. Il vous répondra selon l’implémentation que vous avez définie.

4 - Allons un peu plus loin.
Maintenant que notre bot Telegram est opérationnel et capable de répondre, le champ des possibles devient immense.
Comme mentionné en début d’article, nous allons maintenant parler de crypto-monnaies.
Dans cette partie, j’ai développé un petit bot (en architecture hexagonale) qui interroge une API externe pour obtenir toutes les informations liées à une crypto-monnaie, à partir de son identifiant sur la blockchain. Cet identifiant est envoyé par l’utilisateur via le bot.
4.1 - Concrètement, qu’est-ce que ça veut dire ?
Dans l’implémentation de notre bot "Hello World", nous avons vu comment récupérer les messages envoyés par un utilisateur et y répondre.
Dans mon application, j’ai donc ajouté une petite expression régulière (regex) pour extraire l’identifiant du jeton de crypto-monnaie contenu dans le message. Une fois cet identifiant récupéré, mon bot interroge une API externe (Dexscreener) pour obtenir les informations de base sur la crypto-monnaie concernée.
Voici à quoi ressemble l’arborescence de fichiers de mon projet :

- Service principal (
TokenTrackerBotApplicationService
) : il récupère l’identifiant du jeton à partir du message envoyé par l’utilisateur. \ - Appel de l’API externe (Dexscreener) : via un port secondaire, le service interroge l’API Dexscreener pour obtenir les informations du jeton. Ces données sont ensuite transformées en objets de domaine. \
- Réponse à l’utilisateur : les informations extraites sont renvoyées à l’utilisateur via le bot Telegram, de façon lisible et claire.
Tout le code est disponible sur github ici : https://github.com/hgrosdaillon/TokenTrackerTelegramBot
Et voici un petit aperçu du rendu:

5 - Conclusion
Créer un bot Telegram en Java avec Spring Boot s’avère bien plus accessible qu’il n’y paraît. À travers cet article, nous avons construit pas à pas un bot fonctionnel capable d’interagir avec les utilisateurs et de répondre à des commandes simples. En y intégrant une API externe, nous avons même pu enrichir ce bot avec des fonctionnalités liées aux crypto-monnaies, démontrant ainsi la puissance et la flexibilité de l’écosystème Java/Spring combiné aux possibilités offertes par Telegram.
Ce projet constitue une excellente base pour explorer des cas d’usage plus complexes : notifications automatiques, intégration avec des bases de données, automatisation de tâches, ou encore gestion d’événements en temps réel. Les bots Telegram peuvent devenir de véritables assistants intelligents, et avec les bons outils, leur développement reste à la portée de tous.
Sources:
- Implémentation complète du bot - https://github.com/hgrosdaillon/TokenTrackerTelegramBot
- Documentation Telegram - https://core.telegram.org/bots/tutorial
- Lien vers le BotFather - https://telegram.me/BotFather