Rapport Technique Détaillé: Bot Telegram de Vocabulaire Français
Rapport Technique Détaillé: Bot Telegram de Vocabulaire Français
Telegram
+
Python
+
IA
10 février 2026
Version 1.0
Table des matières
2 Contexte et objectifs 9
2.1 Objectifs fonctionnels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2 Objectifs pédagogiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3 Objectifs techniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3.1 Principes architecturaux . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3.2 Exigences non fonctionnelles . . . . . . . . . . . . . . . . . . . . . . 10
3 Architecture technique 11
3.1 Vue d’ensemble architecturale . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.2 Diagramme de séquence . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.3 Choix technologiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
4 Spécifications fonctionnelles 13
4.1 Cas d’utilisation principal . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4.1.1 Scénario nominal . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4.1.2 Préconditions et postconditions . . . . . . . . . . . . . . . . . . . . 13
4.2 Cas d’utilisation alternatifs . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4.2.1 Mot invalide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4.2.2 Erreur API IA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
4.2.3 Erreur Notion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
4.3 Format de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
5 Spécifications techniques 15
5.1 Structure du projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
5.2 Dépendances Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
5.2.1 Fichier [Link] . . . . . . . . . . . . . . . . . . . . . . . . 16
5.3 Variables d’environnement . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
6 Flux de données 17
6.1 Flux nominal détaillé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
6.1.1 Phase 1 : Réception . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
6.1.2 Phase 2 : Validation . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1
TABLE DES MATIÈRES 2
7 Modules et responsabilités 20
7.1 [Link] - Configuration centralisée . . . . . . . . . . . . . . . . . . . . . . 20
7.1.1 Responsabilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
7.1.2 Fonctions principales . . . . . . . . . . . . . . . . . . . . . . . . . . 20
7.1.3 Principe SOLID appliqué . . . . . . . . . . . . . . . . . . . . . . . . 20
7.2 telegram_handler.py - Gestion Telegram . . . . . . . . . . . . . . . . . . . 21
7.2.1 Responsabilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
7.2.2 Architecture du module . . . . . . . . . . . . . . . . . . . . . . . . 21
7.3 [Link] - Orchestration . . . . . . . . . . . . . . . . . . . . . . . . . . 21
7.3.1 Responsabilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
7.3.2 Logique de validation . . . . . . . . . . . . . . . . . . . . . . . . . . 22
7.3.3 Orchestration du flux . . . . . . . . . . . . . . . . . . . . . . . . . . 22
7.4 [Link] - Génération IA . . . . . . . . . . . . . . . . . . . . . . . . . . 23
7.4.1 Responsabilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
7.4.2 Construction du prompt . . . . . . . . . . . . . . . . . . . . . . . . 23
7.4.3 Appel API avec gestion d’erreurs . . . . . . . . . . . . . . . . . . . 23
7.5 notion_handler.py - Stockage Notion . . . . . . . . . . . . . . . . . . . . . 24
7.5.1 Responsabilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
7.5.2 Construction du payload . . . . . . . . . . . . . . . . . . . . . . . . 24
9 Sécurité 29
9.1 Menaces identifiées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
9.2 Bonnes pratiques implémentées . . . . . . . . . . . . . . . . . . . . . . . . 29
9.2.1 Gestion sécurisée des secrets . . . . . . . . . . . . . . . . . . . . . . 29
9.2.2 Validation rigoureuse des inputs . . . . . . . . . . . . . . . . . . . . 29
9.2.3 Rate limiting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
9.3 Fichier .gitignore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
10 Déploiement 32
10.1 Options d’hébergement gratuit . . . . . . . . . . . . . . . . . . . . . . . . . 32
10.2 Déploiement sur Railway (recommandé) . . . . . . . . . . . . . . . . . . . 32
10.2.1 Étapes de déploiement . . . . . . . . . . . . . . . . . . . . . . . . . 32
10.2.2 Fichier Procfile (optionnel) . . . . . . . . . . . . . . . . . . . . . . . 33
10.3 Déploiement sur Replit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
11 Tests et validation 35
11.1 Plan de tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
11.1.1 Tests unitaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
11.1.2 Tests d’intégration . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
11.1.3 Tests de charge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
11.2 Critères d’acceptation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
11.3 Commande de test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
12 Coûts et ressources 38
12.1 Estimation des coûts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
12.1.1 Scénario 1 : 1000 mots/mois . . . . . . . . . . . . . . . . . . . . . . 38
12.1.2 Scénario 2 : 10000 mots/mois . . . . . . . . . . . . . . . . . . . . . 38
12.2 Optimisations de coûts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
12.2.1 Cache des réponses . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
12.2.2 Modèles moins chers . . . . . . . . . . . . . . . . . . . . . . . . . . 39
12.2.3 Limitation utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . 39
12.3 Ressources humaines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
13 Évolutions futures 40
13.1 Court terme (1–3 mois) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
13.1.1 Commandes Telegram . . . . . . . . . . . . . . . . . . . . . . . . . 40
13.1.2 Enrichissement des données . . . . . . . . . . . . . . . . . . . . . . 40
13.1.3 Fonctionnalités d’export . . . . . . . . . . . . . . . . . . . . . . . . 40
13.2 Moyen terme (3–6 mois) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
13.2.1 Gamification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
13.2.2 Intelligence contextuelle . . . . . . . . . . . . . . . . . . . . . . . . 41
13.2.3 Multi-plateforme . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
13.3 Long terme (6–12 mois) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
13.3.1 Machine Learning . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
13.3.2 Fonctionnalités audio . . . . . . . . . . . . . . . . . . . . . . . . . . 42
13.3.3 Aspects communautaires . . . . . . . . . . . . . . . . . . . . . . . . 42
14 Annexes 43
14.1 Glossaire technique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
14.2 Liens et ressources utiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
14.2.1 Documentation officielle . . . . . . . . . . . . . . . . . . . . . . . . 43
14.2.2 Tutoriels et guides . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
14.2.3 Communautés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
14.3 Checklist de déploiement . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
14.4 FAQ - Questions fréquentes . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Conclusion 46
5
Liste des tableaux
6
Chapitre 1
Utilisateur
Mot français
Telegram API
Message
Processor
4 éléments Stockage
Validation
1.2 Problématique
L’utilisateur disposait d’un système fonctionnel développé avec n8n (plateforme no-
code), mais rencontrait les limitations suivantes :
— Coût récurrent : n8n nécessite un abonnement payant pour un usage continu
7
CHAPITRE 1. VUE D’ENSEMBLE DU PROJET 8
Contexte et objectifs
9
CHAPITRE 2. CONTEXTE ET OBJECTIFS 10
Architecture technique
Utilisateur
Telegram
Message texte
Extraction
Processeur Central
([Link])
Stockage
4Validation
éléments OK
11
CHAPITRE 3. ARCHITECTURE TECHNIQUE 12
Texte
Validation
Mot
API IA
4 éléments
Réponse
Message
Données
Spécifications fonctionnelles
13
CHAPITRE 4. SPÉCIFICATIONS FONCTIONNELLES 14
Spécifications techniques
15
CHAPITRE 5. SPÉCIFICATIONS TECHNIQUES 16
7 # Notion
8 NOTION_TOKEN = s e c r e t _ x x x x x x x x x x x x x x x x x x x x x x x x
9 NOTION_DATABASE_ID = xx xxxx xxxx xxx xxxx xxxx xxx
10
11 # Configuration optionnelle
12 LOG_LEVEL = INFO
13 MAX_RETRIES =3
14 TIMEOUT_SECONDS =30
Listing 5.3 – Fichier .env
Flux de données
Telegram
Message reçu
Extraction données
user_id, chat_id, text
Passage à processor
17
CHAPITRE 6. FLUX DE DONNÉES 18
Réception mot
Non
Valide ? Message erreur
Oui
Générateur
Modules et responsabilités
7 # Tokens
8 TELEGRAM_BOT_TOKEN = os . getenv ( " TELEGRAM_BOT_TOKEN " )
9 OPENAI_API_KEY = os . getenv ( " OPENAI_API_KEY " )
10 NOTION_TOKEN = os . getenv ( " NOTION_TOKEN " )
11 NOTION_DATABASE_ID = os . getenv ( " NOTION_DATABASE_ID " )
12
13 # Validation
14 if not TELEGRAM_BOT_TOKEN :
15 raise ValueError ( " TELEGRAM_BOT_TOKEN manquant " )
Listing 7.1 – Module [Link]
20
CHAPITRE 7. MODULES ET RESPONSABILITÉS 21
19 def start_bot () :
20 " " " Demarre le bot en mode polling " " "
21 updater = Updater ( config . TELEGRAM_BOT_TOKEN )
22 dp = updater . dispatcher
23
24 dp . add_handler ( MessageHandler (
25 Filters . text & ~ Filters . command ,
26 handle_message
27 ))
28
29 updater . start_polling ()
30 updater . idle ()
Listing 7.2 – telegram_handler.py (extrait)
4 # Longueur
5 if not word or len ( word ) > 50:
6 return False
7
17 return True
Listing 7.3 – Validation dans [Link]
4 # 1. Validation
5 if not is_valid_word ( word ) :
6 send_message ( chat_id , " Mot invalide " )
7 return
8
9 # 2. Generation
10 try :
11 data = generate_word_data ( word )
12 except Exception as e :
13 send_message ( chat_id , " Erreur generation " )
14 return
15
16 # 3. Reponse utilisateur
17 response = format_response ( data )
18 send_message ( chat_id , response )
19
20 # 4. Stockage Notion
21 try :
22 save_to_notion ( data )
23 except Exception as e :
24 logging . error ( f " Erreur Notion : { e } " )
12 temperature =0.7
13 )
14
20 return result
Listing 7.6 – Génération avec OpenAI
9 headers = {
10 " Authorization " : f " Bearer { config . NOTION_TOKEN } " ,
11 " Content - Type " : " application / json " ,
12 " Notion - Version " : " 2022 -06 -28 "
13 }
14
15 payload = {
16 " parent " : { " database_id " : config . NOTION_DATABASE_ID } ,
17 " properties " : {
18 " Mot " : {
19 " title " : [{ " text " : { " content " : data [ " word " ]}}]
20 },
21 " Explication " : {
22 " rich_text " : [{ " text " : { " content " : data [ "
explanation " ]}}]
23 },
24 " Exemple " : {
25 " rich_text " : [{ " text " : { " content " : data [ " example "
]}}]
26 },
3 logging . basicConfig (
4 level = logging . INFO ,
26
CHAPITRE 8. GESTION DES ERREURS 27
12 # Exemples d ’ utilisation
13 logging . info ( " Bot demarre " )
14 logging . warning ( " Notion indisponible , retry ... " )
15 logging . error ( " Erreur API IA " , exc_info = True )
16 logging . critical ( " Token Telegram invalide " )
Listing 8.1 – Configuration du logging
Sécurité
4 # BON
5 import os
6 TELEGRAM_TOKEN = os . getenv ( " TELEGRAM_BOT_TOKEN " )
7 if not TELEGRAM_TOKEN :
8 raise ValueError ( " Token manquant " )
Listing 9.1 – Bonne pratique - Secrets
29
CHAPITRE 9. SÉCURITÉ 30
4 # Longueur
5 if not word or len ( word ) > 50:
6 return False
7
17 return True
Listing 9.2 – Validation sécurisée
6 # Logs
7 *. log
8 logs /
9
10 # Python
11 __pycache__ /
12 *. pyc
13 *. pyo
14 . pytest_cache /
15 venv /
16 env /
17
18 # IDE
19 . vscode /
20 . idea /
21 *. swp
22
23 # Secrets
24 secrets /
25 credentials /
26 *. key
27 *. pem
Listing 9.4 – .gitignore pour la sécurité
Déploiement
32
CHAPITRE 10. DÉPLOIEMENT 33
10.3.2 Étapes
1. Créer un nouveau Repl Python
2. Copier tous les fichiers du projet
3. Onglet “Secrets” → ajouter les variables d’environnement
4. Cliquer sur “Run”
5. (Optionnel) Activer “Always On” (version payante)
10 def run_flask () :
11 app . run ( host = ’ [Link] ’ , port =8080)
12
13 # Dans bot_main . py
14 threading . Thread ( target = run_flask ) . start ()
15 start_bot ()
Listing 10.2 – Health check endpoint
10.4 Monitoring
10.4.1 UptimeRobot
— Ping l’endpoint /health toutes les 5 minutes
— Alertes par email si le bot est down
— Statistiques de disponibilité
— 100% gratuit pour usage basique
Tests et validation
4 def test_valid_words () :
5 assert is_valid_word ( " bonjour " ) == True
6 assert is_valid_word ( " apres - midi " ) == True
7 assert is_valid_word ( " rendez - vous " ) == True
8
9 def test_invalid_words () :
10 assert is_valid_word ( " " ) == False
11 assert is_valid_word ( " 123 " ) == False
12 assert is_valid_word ( " abc123 " ) == False
13 assert is_valid_word ( " a " * 100) == False
14 assert is_valid_word ( " < script > " ) == False
15
16 def test_edge_cases () :
17 assert is_valid_word ( " " ) == False
18 assert is_valid_word ( " a " ) == True
19 assert is_valid_word ( " bon - jour " ) == True
Listing 11.1 – test_processor.py
1 import pytest
2 from generator import generate_word_data
3
35
CHAPITRE 11. TESTS ET VALIDATION 36
14 mocker . patch (
15 ’ generator . openai . ChatCompletion . create ’ ,
16 return_value = mock_response
17 )
18
4 def send_test_message () :
5 " " " Simuler l ’ envoi d ’ un message " " "
6 process_word ( " test " , chat_id =123)
7
Coûts et ressources
38
CHAPITRE 12. COÛTS ET RESSOURCES 39
7 if word in cache :
8 logging . info ( f " Cache hit pour : { word } " )
9 return cache [ word ]
10
15 return data
Listing 12.1 – Système de cache
Évolutions futures
40
CHAPITRE 13. ÉVOLUTIONS FUTURES 41
Système de points
Badges d’achievement
Classement utilisateurs
Séries quotidiennes
13.2.3 Multi-plateforme
Annexes
43
CHAPITRE 14. ANNEXES 44
14.2.3 Communautés
— r/TelegramBots (Reddit)
— Stack Overflow (tag : python-telegram-bot)
— Discord - Python Programming
— GitHub Discussions
Résumé du projet
Ce rapport a présenté en détail l’architecture, le développement et le déploiement
d’un bot Telegram éducatif pour l’apprentissage du vocabulaire français. Le projet dé-
montre une migration réussie d’une solution no-code (n8n) vers une architecture Python
professionnelle, modulaire et évolutive.
Points clés
— Architecture modulaire : 6 modules Python distincts et testables
— Coût maîtrisé : 5–10 €/mois pour usage modéré
— Déploiement gratuit : Railway, Replit, ou PythonAnywhere
— Scalabilité : Support de centaines d’utilisateurs simultanés
— Maintenabilité : Code clair, commenté, documenté
— Sécurité : Tokens en variables d’environnement, validation des inputs
— Robustesse : Gestion des erreurs, logging, retry mechanism
Métriques de succès
46
CHAPITRE 14. ANNEXES 47
Document vivant
Ce rapport sera mis à jour au fur et à mesure de l’évolution du projet.
Version actuelle : 1.0 - 10 février 2026