🎯 Aperçu
Ce guide vous accompagne dans la conception et la modélisation d’un système de contrôle d’appels téléphoniques à l’aide des diagrammes de machine à états UML.Système de contrôle d’appels téléphoniquesà l’aide dediagrammes de machine à états UML. Il se concentre sur le cycle de vie des appels sortants, illustrant comment une ligne téléphonique passe d’un état à un autre en réponse aux actions de l’utilisateur et aux événements réseau.cycle de vie des appels sortantsillustrant comment une ligne téléphonique passe d’un état à un autre en réponse aux actions de l’utilisateur et aux événements réseau.
Le diagramme capture à la fois les cheminschemins heureux (mise en place réussie d’un appel) et leschemins malheureux (erreurs, délais dépassés, lignes occupées), en mettant l’accent sur la robustesse, la gestion des exceptions et les transitions d’état claires, des principes fondamentaux dans les systèmes de communication en temps réel.
🧩 Concepts fondamentaux des machines à états UML
Avant de plonger dans le diagramme, comprenez ces concepts UML fondamentaux :
| Concept | Description |
|---|---|
| État | Une condition durant laquelle un objet satisfait certaines conditions ou effectue des actions. |
| Transition | Un changement d’un état à un autre, déclenché par un événement. |
| Événement | Un événement qui provoque une transition (par exemple, onHook, validNumber). |
| Transition auto | Une transition qui commence et se termine dans le même état (par exemple, chiffre(n) pendant que dans Saisie). |
| État pseudo | Points de contrôle spéciaux tels que Initial ou Final qui ne sont pas des états réels. |
| État composite | Un état contenant des sous-états (par exemple Erreur état avec Tonalité occupée, Tonalité occupée rapide, Message enregistré). |
| Condition de garde | Une expression booléenne qui doit être vraie pour qu’une transition ait lieu. |
✅ Astuce pro : Utilisez
événement [garde] / actionsyntaxe en UML pour documenter les déclencheurs, les conditions et les effets secondaires.
🔄 Cycle de vie des appels sortants : Analyse étape par étape
1. Phase d’initiation et de saisie
🔹 État pseudo initial → Inactif
-
Le système démarre dans l’étatÉtat pseudo initial.
-
Aucune activité pour le moment ; le téléphone est sur le support.
🔹 Inactif → Ton de composante (sur le support)
-
Événement :
sur le support(l’utilisateur soulève le combiné) -
Transition :
sur le support → ton de composante -
Action : Générer le ton de composante ; préparer l’entrée des chiffres.
📌 Il s’agit du premier changement d’état visible dans le cycle de vie de l’appel.
🔹 Ton de composante → Composition (chiffre(n))
-
Événement :
chiffre(n)(l’utilisateur entre un chiffre) -
Transition :
chiffre(n) → Composition -
État : Entrer
Compositionmode.
🔹 Transition auto : Composition → Composition (chiffre(n))
-
Événement :
chiffre(n)(plusieurs chiffres entrés) -
Condition : Aucun (toujours autorisé)
-
Action : Ajouter un chiffre au numéro en cours de composition.
-
Objectif : Permettre l’entrée continue de chiffres sans quitter l’état
Compositionétat.
💡 Les transitions internes sont essentielles pour gérer les séquences d’entrée telles que les numéros de téléphone.
2. Logique de connexion et gestion des exceptions
🔹 Composition → Connexion (numéroValide)
-
Événement :
numéroValide(numéro complet validé) -
Transition :
numéroValide → Connexion -
Action : Démarrer la mise en place de l’appel avec le réseau.
🔹 Composition → Message enregistré (numéroInvalide)
-
Événement :
numéroInvalide(par exemple, longueur incorrecte, préfixe invalide) -
Transition :
numéroInvalide → Message enregistré -
Action : Lire le message préenregistré :« Le numéro que vous avez composé n’est pas actif. »
🔹 Connexion → Tonalité d’occupation (numéroOccupé)
-
Événement :
numéroOccupé -
Transition :
numéroOccupé → tonalitéOccupée -
Action : Jouer la tonalité d’occupation ; informer l’utilisateur que la ligne est occupée.
🔹 Connexion → tonalitéOccupéeRapide (trunkBusy)
-
Événement :
trunkOccupé -
Transition :
trunkOccupé → tonalitéOccupéeRapide -
Action : Jouer la tonalité d’occupation rapide ; indiquer une congestion du réseau.
⚠️ Remarque : Ce sont des étatsErreur qui interrompent le flux normal. Ils doivent être gérés de manière appropriée.
3. Mécanisme d’expiration et d’alerte
🔹 Composition → Avertissement (expiration)
-
Événement :
expirationaprès 30 secondes d’inactivité -
Transition :
expiration → Avertissement -
Action : Jouer une sonnerie d’alerte ; informer l’utilisateur de continuer ou de raccrocher.
🔹 Avertissement → expiration (expiration)
-
Événement :
expirationà nouveau après 10 secondes -
Transition :
timeout → Timeout -
Action : Annuler l’appel ; retourner à
Inactif.
⏱️ La logique de délai d’attente empêche l’attente indéfinie et améliore l’expérience utilisateur.
4. Appel actif et déconnexion
🔹 Connexion → Sonnerie (routée)
-
Événement :
routée(le réseau a correctement routé l’appel) -
Transition :
routée → Sonnerie -
Action : Envoyer le signal de sonnerie à la partie appelée.
🔹 Sonnerie → Connecté (le téléphone appelé répond)
-
Événement :
le téléphone appelé répond -
Transition :
le téléphone appelé répond → Connecté -
Action : Établir la connexion audio ; démarrer l’enregistrement de l’appel (si activé).
🔹 Connecté → Déconnecté (décroché OU le téléphone appelé raccroche)
-
Deux voies de déconnexion :
-
Utilisateur raccroche :
décroché → Déconnecté -
L’autre partie raccroche :
calledPhoneHangsUp → Déconnecté
-
🔄 Les deux transitions mènent à
Déconnectéavant d’atteindreÉtat final.
🔹 Déconnecté → État final
-
Événement : Aucun (implicite ou via une action de nettoyage)
-
Transition :
Déconnecté → Final -
Action : Nettoyer les ressources, enregistrer la durée de l’appel, mettre à jour les statistiques.
✅ L’état final signifie la fin du cycle de vie de l’appel.
🎨 Principes de conception visuelle pour la clarté
Pour rendre les machines d’état complexes lisibles et maintenables :
| Principe | Mise en œuvre |
|---|---|
| Chemin principal central | Gardez le flux principal (Inactif → Ton de composante → Composition → Connexion → Sonnerie → Connecté) sous forme d’une ligne verticale ou horizontale nette. |
| Développez vers l’extérieur pour les exceptions | Placez les états d’erreur (Ton de busy, Ton de busy rapide, Message enregistré) comme des branches latérales. |
| Regroupez les états connexes | Utilisez états composés pour les conditions d’erreur (voir ci-dessous). |
| Utilisez les états pseudo avec sagesse | Initial et Final doit être clairement marqué. |
| Éviter les transitions croisées | Maintenez les flèches éloignées les unes des autres ; utilisez des régions orthogonales si nécessaire. |
🔧 Techniques avancées de modélisation
✅ État composite : regroupement « Erreur »
Au lieu de lister BusyTone, FastBusyTone, et RecordedMessage en tant qu’états distincts, regroupez-les sous un état composite appelé Erreur:
[Erreur]
├── BusyTone
├── FastBusyTone
└── MessageEnregistré
-
Action d’entrée : Jouer le ton d’erreur ou le message.
-
Action de sortie : Retourner à
DialToneouInactifaprès la réponse de l’utilisateur.
✅ Avantage :Réduit le désordre visuel et améliore la scalabilité.
✅ Conditions de garde (améliorations optionnelles)
Ajoutez des gardes pour affiner les transitions :
digit(n) [number.length < 15] → Numérotation
validNumber [number.isInternational] → Connexion
🛠️ Les gardes empêchent les transitions non valides et soutiennent la logique conditionnelle.
📌 Points clés : Meilleures pratiques pour les machines à états complexes
| Pratique | Pourquoi cela importe |
|---|---|
| Modéliser les chemins d’erreur | Les systèmes réels échouent. Concevoir pournuméro invalide, délai dépassé, trunk occupéassure la fiabilité. |
| Utilisez des expressions d’action | Incluez / logCallAttempt() ou / playTone() pour afficher les effets secondaires. |
| Gardez les événements explicites et orientés action | Utilisez raccroché, routé, le téléphone appelé répondau lieu dee1, e2. |
| Nommez clairement les états | Évitez État1, État2. Utilisez Composition, Sonnerie, Connecté. |
| Documentez les hypothèses | Par exemple, « Délai d’attente après 30 secondes d’inactivité » doit être indiqué dans les commentaires. |
💻 Génération de code : PlantUML et Mermaid
Voici des blocs de code prêts à l’emploi pour générer ce diagramme dans votre format préféré.
✅ Code PlantUML
@startuml
[*] –> Inactif
Inactif –> TonDeRéponse : sur le combiné
TonDeRéponse –> Composition : chiffre(n)
Composition –> Composition : chiffre(n) ‘ Transition auto
Composition –> Connexion : numéroValide
Appel en cours –> MessageEnregistré : numéroInvalide
Appel en cours –> Avertissement : délai dépassé
Avertissement –> Délai dépassé : délai dépassé
Connexion –> Sonnerie : routé
Connexion –> Ton d’occupation : numéro occupé
Connexion –> Ton d’occupation rapide : tronc occupé
Sonnerie –> Connecté : téléphone appelé répond
Connecté –> Déconnecté : sur le combiné
Connecté –> Déconnecté : téléphone appelé raccroche
Déconnecté –> [*] : nettoyage
état « Erreur » comme ÉtatErreur {
état « Ton d’occupation » comme TonDOccupation
état « Ton d’occupation rapide » comme TonDOccupationRapide
état « Message enregistré » comme MessageEnregistré
}
‘ Actions internes
Inactif : entrée / Attente du déclenchement du combiné
Ton de composante : entrée / Lecture du ton de composante
Appel en cours : entrée / Collecte des chiffres
Connexion : entrée / Acheminement de l’appel
Sonnerie : entrée / Sonnerie du téléphone distant
Connecté : entrée / Établissement de la session d’appel
Déconnecté : entrée / Terminaison de la session
@enduml
📥 Comment l’utiliser : Collez dans PlantUML Live ou votre plugin IDE.
✅ Code Mermaid

stateDiagram-v2
[*] --> Idle
Idle --> DialTone : sur le combiné
DialTone --> Dialing : chiffre(n)
Dialing --> Dialing : chiffre(n) ' Transition auto
Dialing --> Connecting : numéroValide
Dialing --> RecordedMessage : numéroInvalide
Dialing --> Warning : délaiDépassé
Warning --> Timeout : délaiDépassé
Connecting --> Ringing : routé
Connecting --> BusyTone : numéroOccupé
Connecting --> FastBusyTone : troncOccupé
Ringing --> Connected : téléphoneAppeléRépond
Connected --> Disconnected : sur le combiné
Connected --> Disconnected : téléphoneAppeléRaccroche
Disconnected --> [*] : nettoyage
state Error {
BusyTone
FastBusyTone
RecordedMessage
}
Connecting --> BusyTone : numéroOccupé
Connecting --> FastBusyTone : troncOccupé
Dialing --> RecordedMessage : numéroInvalide
note right of BusyTone
Jouer le ton d'occupation standard
end note
note right of FastBusyTone
Jouer le ton d'occupation rapide (congestion réseau)
end note
note right of RecordedMessage
Jouer le message enregistré : « Numéro hors service. »
end note
note right of Timeout
Tentative d'appel annulée après 40 secondes
end note
📥 Comment l’utiliser : Collez dans Éditeur en direct Mermaid ou des outils Markdown pris en charge (VS Code, Obsidian, etc.).
📚 Résumé et réflexions finales
Ce Système de contrôle d’appel téléphonique machine à états est un exemple du monde réel de la manière dont UML peut modéliser des systèmes complexes et événementiels avec une haute fiabilité.
✅ Ce qui rend ce diagramme efficace :
-
Clair chemin normal avec un flux logique.
-
Traitement complet des erreurs.
-
Utilisation de transitions auto, états composés, et conditions.
-
Clarté visuelle grâce à la regroupement et à la annotation.
🛠️ Quand utiliser ce modèle :
-
Systèmes de téléphonie
-
Contrôle des dispositifs IoT
-
Gestion des sessions utilisateur
-
Moteurs de workflow
-
Systèmes embarqués avec logique d’état fini
📝 Souhaitez-vous étendre cela ?
Pensez à ajouter :
-
Enregistrement des appels état (avec
demarrerEnregistrement,arreterEnregistrementévénements) -
Renvoi d’appel logique (routage conditionnel)
-
Attente d’appel prise en charge (états parallèles)
-
Transfert d’appel en tant qu’état secondaire de
Connecté -
Historique des états (historique superficiel/profond) pour la réentrée après interruption
📌 Recommandation finale
Modélisez toujours les chemins de succès et d’échec.
Une machine à états qui ne traite que les « chemins heureux » est incomplète et sujette aux bogues en production.
Utilisez ce guide comme un modèle pour modéliser tout système en temps réel où transitions d’état, événements, et résilience aux erreurs compte.
✅ Prêt à générer, visualiser ou étendre ?
👉 Copiez le PlantUML ou Mermaid code ci-dessus et intégrez-le dans votre documentation, vos diagrammes d’architecture ou vos documents de conception de système.
Faites-moi savoir si vous souhaitez un version PDF, diagramme interactif, ou intégration dans un modèle de système plus large (par exemple, avec des composants ou des diagrammes de séquence)!
📘 « Les meilleurs systèmes ne sont pas seulement corrects : ils anticipent les défaillances. »
— Concevoir avec des machines à états UML












