🎯 समीक्षा
यह मार्गदर्शिका आपको एक के डिज़ाइन और मॉडलिंग के माध्यम से चलती हैटेलीफोनी कॉल कंट्रोल सिस्टमका उपयोग करकेUML स्टेट मशीन डायग्राम. यह ध्यान केंद्रित करती हैआउटबाउंड कॉल लाइफसाइकल, जो दिखाता है कि उपयोगकर्ता के क्रियाकलापों और नेटवर्क घटनाओं के प्रतिक्रिया में फोन लाइन राज्यों के बीच कैसे संक्रमण होता है।
डायग्राम दोनों को कैप्चर करता हैखुशहाल रास्ते (सफल कॉल सेटअप) औरअखुशहाल रास्ते (त्रुटियाँ, समय सीमा समाप्त होना, व्यस्त लाइनें), जो दृढ़ता, अपवाद प्रबंधन और स्पष्ट राज्य संक्रमण पर जोर देता है—वास्तविक समय संचार प्रणालियों में महत्वपूर्ण सिद्धांत।
🧩 UML स्टेट मशीन में मूल अवधारणाएँ
डायग्राम में डूबने से पहले, इन मूल UML अवधारणाओं को समझें:
| अवधारणा | विवरण |
|---|---|
| राज्य | एक ऐसी स्थिति जिसमें एक वस्तु निश्चित शर्तों को पूरा करती है या क्रियाएँ करती है। |
| संक्रमण | एक राज्य से दूसरे राज्य में परिवर्तन, जो एक घटना द्वारा प्रेरित होता है। |
| घटना | एक ऐसी घटना जो संक्रमण का कारण बनती है (उदाहरण के लिए onHook, वैध संख्या). |
| स्वयं संक्रमण | एक संक्रमण जो एक ही राज्य में शुरू होता है और एक ही राज्य में समाप्त होता है (उदाहरण के लिए अंक(n) जब तक नहीं है डायल कर रहा है). |
| काल्पनिक अवस्था | विशेष नियंत्रण बिंदु जैसे प्रारंभिक या अंतिम जो वास्तविक अवस्थाएँ नहीं हैं। |
| संयुक्त अवस्था | एक अवस्था जिसमें उप-अवस्थाएँ होती हैं (उदाहरण के लिए त्रुटि अवस्था के साथ बिजी टोन, तेज बिजी टोन, रिकॉर्डेड संदेश). |
| गार्ड शर्त | एक बूलियन व्यंजक जो एक संक्रमण होने के लिए सत्य होना चाहिए। |
✅ प्रो टिप: उपयोग करें
घटना [गार्ड] / क्रियाUML में सिंटैक्स ट्रिगर, शर्तों और प्रभावों को दस्तावेज़ करने के लिए।
🔄 आउटबाउंड कॉल जीवनचक्र: चरण-दर-चरण विश्लेषण
1. प्रारंभ और डायलिंग चरण
🔹 प्रारंभिक नकली अवस्था → आराम
- प्रणाली इस अवस्था में शुरू होती हैप्रारंभिक नकली अवस्था.
- अभी तक कोई गतिविधि नहीं; फोन हुक पर है।
🔹 आराम → डायल टोन (onHook)
- घटना:
onHook(उपयोगकर्ता हैंडसेट उठाता है) - संक्रमण:
onHook → डायल टोन - क्रिया: डायल टोन उत्पन्न करें; अंक प्रविष्टि के लिए तैयारी करें।
📌 यह कॉल जीवनचक्र में पहला दृश्यमान अवस्था परिवर्तन है।
🔹 डायल टोन → डायलिंग (अंक(n))
- घटना:
अंक(n)(उपयोगकर्ता एक अंक दर्ज करता है) - संक्रमण:
अंक(n) → डायलिंग - अवस्था: प्रवेश करें
डायलिंगमोड।
🔹 स्वयं संक्रमण: डायलिंग → डायलिंग (अंक(n))
- घटना:
अंक(n)(बहुत सारे अंक दर्ज किए गए) - गार्ड: कोई नहीं (हमेशा अनुमति दी गई है)
- क्रिया: डायल किए जा रहे नंबर में अंक जोड़ें।
- उद्देश्य: निरंतर अंक प्रविष्टि की अनुमति दें बिना छोड़े
डायलिंगअवस्था।
💡 स्वयं के संक्रमण फोन नंबर जैसे इनपुट अनुक्रमों को संभालने के लिए आवश्यक हैं।
2. कनेक्शन तर्क और अपवाद संभाल
🔹 डायलिंग → कनेक्टिंग (वैध संख्या)
- घटना:
वैध संख्या(पूर्ण संख्या के वैधीकरण के साथ) - संक्रमण:
वैध संख्या → कनेक्टिंग - क्रिया: नेटवर्क के साथ कॉल सेटअप शुरू करें।
🔹 डायलिंग → रिकॉर्डेड मैसेज (अवैध संख्या)
- घटना:
अवैध संख्या(उदाहरण के लिए, गलत लंबाई, अवैध प्रीफिक्स) - संक्रमण:
अवैध संख्या → रिकॉर्डेड मैसेज - क्रिया: पूर्व रिकॉर्ड किया गया संदेश प्लेः “आप जिस नंबर को डायल किया है, वह सेवा में नहीं है।”
🔹 कनेक्टिंग → बसी टोन (नंबर बिजी)
- घटना:
संख्या व्यस्त - संक्रमण:
संख्या व्यस्त → व्यस्त टोन - क्रिया: व्यस्त टोन बजाएं; उपयोगकर्ता को सूचित करें कि लाइन व्यस्त है।
🔹 कनेक्टिंग → तेज व्यस्त टोन (ट्रंक व्यस्त)
- घटना:
ट्रंक व्यस्त - संक्रमण:
ट्रंक व्यस्त → तेज व्यस्त टोन - क्रिया: तेज व्यस्त टोन बजाएं; नेटवर्क भार को दर्शाएं।
⚠️ नोट: ये हैं त्रुटि स्थितियाँ जो सामान्य प्रवाह को बाधित करती हैं। इन्हें सम्मानजनक तरीके से संभाला जाना चाहिए।
3. समय सीमा और चेतावनी तंत्र
🔹 डायलिंग → चेतावनी (समय सीमा समाप्त)
- घटना:
समय सीमा समाप्तअक्रियता के 30 सेकंड बाद - संक्रमण:
समय सीमा समाप्त → चेतावनी - क्रिया: चेतावनी बीप बजाएं; उपयोगकर्ता को सूचित करें कि आगे जारी रखें या रोकें।
🔹 चेतावनी → समय सीमा समाप्त (समय सीमा समाप्त)
- घटना:
समय सीमा समाप्त10 सेकंड बाद फिर से - संक्रमण:
समय समाप्त → समय समाप्त - क्रिया:कॉल प्रयास रद्द करें; वापस लौटें
आराम.
⏱️ समय समाप्त तर्क अनंत इंतजार को रोकता है और उपयोगकर्ता अनुभव को बेहतर बनाता है।
4. सक्रिय कॉल और अन्य विकल्प
🔹 कनेक्टिंग → रिंगिंग (मार्गित)
- घटना:
मार्गितनेटवर्क सफलतापूर्वक कॉल को मार्गित करता है) - संक्रमण:
मार्गित → रिंगिंग - क्रिया:कॉल करने वाले पक्ष को रिंगिंग सिग्नल भेजें।
🔹 रिंगिंग → कनेक्टेड (कॉल किए गए फोन ने जवाब दिया)
- घटना:
कॉल किए गए फोन ने जवाब दिया - संक्रमण:
कॉल किए गए फोन ने जवाब दिया → कनेक्टेड - क्रिया:ऑडियो कनेक्शन स्थापित करें; कॉल रिकॉर्डिंग शुरू करें (यदि सक्षम हो।)
🔹 कनेक्टेड → डिस्कनेक्टेड (हुक ऑन या कॉल किए गए फोन ने डिस्कनेक्ट किया)
- डिस्कनेक्शन के दो रास्ते:
- उपयोगकर्ता डिस्कनेक्ट करता है:
हुक ऑन → डिस्कनेक्टेड - दूसरी पार्टी ने कॉल को डिस्कनेक्ट कर दिया:
कॉल की गई फ़ोन हैंग अप → डिस्कनेक्टेड
- उपयोगकर्ता डिस्कनेक्ट करता है:
🔄 दोनों ट्रांज़िशन्स की ओर लीड करते हैं
डिस्कनेक्टेडपहुँचने से पहलेअंतिम स्थिति.
🔹 डिस्कनेक्टेड → अंतिम स्थिति
- घटना: कोई नहीं (स्पष्ट या क्लीनअप एक्शन के माध्यम से)
- ट्रांज़िशन:
डिस्कनेक्टेड → अंतिम - क्रिया: संसाधनों को साफ़ करें, कॉल के दैर्ध्य को लॉग करें, सांख्यिकी को अपडेट करें।
✅ अंतिम स्थिति कॉल लाइफ़साइकिल के अंत का संकेत देती है।
🎨 स्पष्टता के लिए विज़ुअल डिज़ाइन सिद्धांत
जटिल स्टेट मशीन को पढ़ने योग्य और बनाए रखने योग्य बनाने के लिए:
| सिद्धांत | कार्यान्वयन |
|---|---|
| मुख्य हैप्पी पाथ | मुख्य प्रवाह (आराम → डायल टोन → डायलिंग → कनेक्टिंग → रिंगिंग → कनेक्टेड) को साफ़ ऊर्ध्वाधर या क्षैतिज रेखा के रूप में रखें। |
| अपवादों के लिए बाहर की ओर शाखाएँ बनाएँ | त्रुटि स्थितियों (बिज़ी टोन, फास्ट बिज़ी टोन, रिकॉर्डेड मैसेज) को पार्श्व शाखाओं के रूप में रखें। |
| संबंधित स्थितियों को समूहित करें | उपयोग करें कॉम्पोज़िट स्टेट्स त्रुटि स्थितियों के लिए (नीचे देखें)। |
| पस्यूडो स्टेट्स का समझदारी से उपयोग करें | प्रारंभिक और अंतिम को स्पष्ट रूप से चिह्नित किया जाना चाहिए। |
| प्रतिच्छेदन संक्रमण से बचें | तीरों के ओवरलैप होने से बचें; आवश्यकता पड़ने पर ओर्थोगोनल क्षेत्रों का उपयोग करें। |
🔧 उन्नत मॉडलिंग तकनीकें
✅ संयुक्त अवस्था: “त्रुटि” समूहन
सूचीबद्ध करने के बजाय बसी टोन, तेज़ बसी टोन, और रिकॉर्डेड संदेश अलग-अलग अवस्थाओं के रूप में, उन्हें एक के नीचे समूहित करें संयुक्त अवस्था कहलाती है त्रुटि:
[त्रुटि]
├── बसी टोन
├── तेज़ बसी टोन
└── रिकॉर्डेड संदेश
- प्रवेश क्रिया: त्रुटि टोन या संदेश प्लेयर करें।
- निकास क्रिया: वापस लौटें
डायल टोनयाआरामउपयोगकर्ता प्रतिक्रिया के बाद।
✅ लाभ:दृश्य अव्यवस्था को कम करता है और स्केलेबिलिटी में सुधार करता है।
✅ गार्ड शर्तें (वैकल्पिक सुधार)
संक्रमण को बेहतर बनाने के लिए गार्ड जोड़ें:
अंक(n) [संख्या.लंबाई < 15] → डायल कर रहा है
वैध संख्या [संख्या.अंतरराष्ट्रीय] → जुड़ रहा है
🛠️ गार्ड अमान्य संक्रमणों को रोकते हैं और शर्तीय तर्क का समर्थन करते हैं।
📌 मुख्य बातें: जटिल स्थिति मशीनों के लिए बेस्ट प्रैक्टिसेज
| अभ्यास | यह क्यों महत्वपूर्ण है |
|---|---|
| असफल रास्तों का मॉडलिंग करें | वास्तविक प्रणालियाँ विफल होती हैं। डिज़ाइन करें अमान्य संख्या, समय सीमा समाप्त, ट्रंक व्यस्त विश्वसनीयता सुनिश्चित करता है। |
| क्रिया व्यंजकों का उपयोग करें | शामिल करें / logCallAttempt() या / playTone() प्रभाव दिखाने के लिए। |
| घटनाओं को विस्तृत और क्रिया-केंद्रित रखें | उपयोग करें onHook, राउटेड, कॉल की गई फ़ोन उत्तर देती हैके बजायई1, ई2. |
| राज्यों के नाम स्पष्ट रूप से बताएं | बचेंराज्य1, राज्य2. उपयोग करेंडायलिंग, रिंगिंग, कनेक्टेड. |
| मान्यताओं को दस्तावेज़ करें | उदाहरण के लिए, “गतिरोध के बाद 30 सेकंड के अन्यथा” को टिप्पणियों में नोट किया जाना चाहिए। |
💻 कोड उत्पादन: प्लांटयूएमएल और मेरमेड
यहाँ हैंतैयार उपयोग कोड ब्लॉकअपने पसंदीदा फॉर्मेट में इस आरेख को उत्पन्न करने के लिए।
✅ प्लांटयूएमएल कोड
@startuml
[*] --> Idle
Idle --> DialTone : onHook
DialTone --> Dialing : digit(n)
Dialing --> Dialing : digit(n) ' स्वयं संक्रमण
Dialing --> Connecting : validNumber
Dialing --> RecordedMessage : invalidNumber
Dialing --> Warning : timeout
Warning --> Timeout : timeout
Connecting --> Ringing : routed
Connecting --> BusyTone : numberBusy
Connecting --> FastBusyTone : trunkBusy
Ringing --> Connected : calledPhoneAnswers
Connected --> Disconnected : onHook
Connected --> Disconnected : calledPhoneHangsUp
Disconnected --> [*] : cleanup
state "Error" as ErrorState {
state "BusyTone" as BusyTone
state "FastBusyTone" as FastBusyTone
state "RecordedMessage" as RecordedMessage
}
' आंतरिक क्रियाएँ
Idle : entry / off-hook का इंतजार करें
DialTone : entry / डायल टोन बजाएं
Dialing : entry / अंक एकत्र करें
Connecting : entry / कॉल राउट करें
Ringing : entry / दूरस्थ फोन को बजाएं
Connected : entry / कॉल सत्र स्थापित करें
Disconnected : entry / सत्र समाप्त करें
@enduml 📥 उपयोग कैसे करें: पेस्ट करें PlantUML लाइव या आपके IDE प्लगइन।
✅ मेरमाइड कोड

stateDiagram-v2
[*] --> Idle
Idle --> DialTone : onHook
DialTone --> Dialing : digit(n)
Dialing --> Dialing : digit(n) ' स्वयं संक्रमण
Dialing --> Connecting : validNumber
Dialing --> RecordedMessage : invalidNumber
Dialing --> Warning : timeout
Warning --> Timeout : timeout
Connecting --> Ringing : routed
Connecting --> BusyTone : numberBusy
Connecting --> FastBusyTone : trunkBusy
Ringing --> Connected : calledPhoneAnswers
Connected --> Disconnected : onHook
Connected --> Disconnected : calledPhoneHangsUp
Disconnected --> [*] : cleanup
state Error {
BusyTone
FastBusyTone
RecordedMessage
}
Connecting --> BusyTone : numberBusy
Connecting --> FastBusyTone : trunkBusy
Dialing --> RecordedMessage : invalidNumber
note right of BusyTone
मानक बिजी टोन चलाएं
end note
note right of FastBusyTone
तेज बिजी टोन चलाएं (नेटवर्क भार)
end note
note right of RecordedMessage
रिकॉर्ड किया गया संदेश चलाएं: "नंबर सेवा में नहीं है।"
end note
note right of Timeout
40 सेकंड के बाद कॉल प्रयास रद्द कर दिया गया
end note
📥 उपयोग कैसे करें: पेस्ट करें मेरमाइड लाइव संपादक या समर्थित मार्कडाउन उपकरण (VS Code, ओब्सीडियन, आदि)।
📚 सारांश और अंतिम विचार
यह टेलीफोनी कॉल नियंत्रण प्रणाली स्थिति मशीन एक वास्तविक दुनिया का उदाहरण उदाहरण है कि UML कैसे उच्च विश्वसनीयता वाले जटिल, घटना-आधारित प्रणालियों को मॉडल कर सकता है।
✅ इस आरेख की प्रभावशीलता का कारण:
- स्पष्ट खुशी का मार्ग तार्किक प्रवाह के साथ।
- व्यापक त्रुटि संभाल.
- का उपयोग स्वयं संक्रमण, संयुक्त अवस्थाएँ, और गार्ड्स.
- दृश्य स्पष्टता के माध्यम से समूहीकरण और अनुमान.
🛠️ इस पैटर्न का उपयोग कब करें:
- टेलीफोनी प्रणाली
- आईओटी उपकरण नियंत्रण
- उपयोगकर्ता सत्र प्रबंधन
- वर्कफ्लो इंजन
- सीमित अवस्था तर्क वाले एम्बेडेड प्रणाली
📝 क्या आप इसे विस्तारित करना चाहते हैं?
जोड़ने के लिए विचार करें:
- कॉल रिकॉर्डिंग अवस्था (साथ में
रिकॉर्डिंग शुरू करें,रिकॉर्डिंग बंद करेंघटनाएँ) - कॉल फॉरवर्डिंग तर्क (शर्ती रूटिंग)
- कॉल वेटिंग समर्थन (समानांतर अवस्थाएँ)
- कॉल ट्रांसफर एक उप-अवस्था के रूप में
कनेक्टेड - अवस्था इतिहास (हल्का/गहरा इतिहास) बाधा के बाद पुनर्प्रवेश के लिए
📌 अंतिम सिफारिश
हमेशा सफलता और विफलता दोनों मार्गों को मॉडल करें।
केवल “खुशहाल मार्गों” को हैंडल करने वाला एक राज्य मशीन अधूरा है और उत्पादन में बग्स के लिए संवेदनशील है।
इस गाइड का उपयोग एक के रूप में करेंटेम्पलेट किसी भी रियल-टाइम सिस्टम के मॉडलिंग के लिए जहांराज्य संक्रमण, घटनाएँ, औरत्रुटि लचीलापन महत्वपूर्ण होते हैं।
✅ उत्पन्न करने, दृश्यीकरण करने या विस्तार करने के लिए तैयार हैं?
👉 कॉपी करेंPlantUML याMermaid ऊपर दिए गए कोड और इसे आपके दस्तावेज़, आर्किटेक्चर डायग्राम या सिस्टम डिज़ाइन दस्तावेज़ में एकीकृत करें।
मुझे बताएं अगर आपको चाहिएPDF संस्करण, इंटरैक्टिव आरेख, याएक बड़े सिस्टम मॉडल में एकीकरण (उदाहरण के लिए, कंपोनेंट्स या सीक्वेंस डायग्राम के साथ)!
📘 “सर्वोत्तम सिस्टम केवल सही नहीं होते हैं—वे विफलता की पूर्वसूचना करते हैं।”
— UML स्टेट मशीन्स के साथ डिज़ाइनिंग










