विस्तृत मार्गदर्शिका: UML स्टेट मशीन का उपयोग करके टेलीफोनी कॉल कंट्रोल सिस्टम का मॉडलिंग

🎯 समीक्षा

यह मार्गदर्शिका आपको एक के डिज़ाइन और मॉडलिंग के माध्यम से चलती हैटेलीफोनी कॉल कंट्रोल सिस्टमका उपयोग करकेUML स्टेट मशीन डायग्राम. यह ध्यान केंद्रित करती हैआउटबाउंड कॉल लाइफसाइकल, जो दिखाता है कि उपयोगकर्ता के क्रियाकलापों और नेटवर्क घटनाओं के प्रतिक्रिया में फोन लाइन राज्यों के बीच कैसे संक्रमण होता है।

डायग्राम दोनों को कैप्चर करता हैखुशहाल रास्ते (सफल कॉल सेटअप) औरअखुशहाल रास्ते (त्रुटियाँ, समय सीमा समाप्त होना, व्यस्त लाइनें), जो दृढ़ता, अपवाद प्रबंधन और स्पष्ट राज्य संक्रमण पर जोर देता है—वास्तविक समय संचार प्रणालियों में महत्वपूर्ण सिद्धांत।


🧩 UML स्टेट मशीन में मूल अवधारणाएँ

डायग्राम में डूबने से पहले, इन मूल UML अवधारणाओं को समझें:

अवधारणा विवरण
राज्य एक ऐसी स्थिति जिसमें एक वस्तु निश्चित शर्तों को पूरा करती है या क्रियाएँ करती है।
संक्रमण एक राज्य से दूसरे राज्य में परिवर्तन, जो एक घटना द्वारा प्रेरित होता है।
घटना एक ऐसी घटना जो संक्रमण का कारण बनती है (उदाहरण के लिए onHookवैध संख्या).
स्वयं संक्रमण एक संक्रमण जो एक ही राज्य में शुरू होता है और एक ही राज्य में समाप्त होता है (उदाहरण के लिए अंक(n) जब तक नहीं है डायल कर रहा है).
काल्पनिक अवस्था विशेष नियंत्रण बिंदु जैसे प्रारंभिक या अंतिम जो वास्तविक अवस्थाएँ नहीं हैं।
संयुक्त अवस्था एक अवस्था जिसमें उप-अवस्थाएँ होती हैं (उदाहरण के लिए त्रुटि अवस्था के साथ बिजी टोनतेज बिजी टोनरिकॉर्डेड संदेश).
गार्ड शर्त एक बूलियन व्यंजक जो एक संक्रमण होने के लिए सत्य होना चाहिए।

✅ प्रो टिप: उपयोग करें घटना [गार्ड] / क्रिया UML में सिंटैक्स ट्रिगर, शर्तों और प्रभावों को दस्तावेज़ करने के लिए।


🔄 आउटबाउंड कॉल जीवनचक्र: चरण-दर-चरण विश्लेषण

1. प्रारंभ और डायलिंग चरण

🔹 प्रारंभिक नकली अवस्था → आराम

  • प्रणाली इस अवस्था में शुरू होती हैप्रारंभिक नकली अवस्था.
  • अभी तक कोई गतिविधि नहीं; फोन हुक पर है।

🔹 आराम → डायल टोन (onHook)

  • घटना: onHook (उपयोगकर्ता हैंडसेट उठाता है)
  • संक्रमण: onHook → डायल टोन
  • क्रिया: डायल टोन उत्पन्न करें; अंक प्रविष्टि के लिए तैयारी करें।

📌 यह कॉल जीवनचक्र में पहला दृश्यमान अवस्था परिवर्तन है।

🔹 डायल टोन → डायलिंग (अंक(n))

  • घटना: अंक(n) (उपयोगकर्ता एक अंक दर्ज करता है)
  • संक्रमण: अंक(n) → डायलिंग
  • अवस्था: प्रवेश करें डायलिंग मोड।

🔹 स्वयं संक्रमण: डायलिंग → डायलिंग (अंक(n))

  • घटना: अंक(n) (बहुत सारे अंक दर्ज किए गए)
  • गार्ड: कोई नहीं (हमेशा अनुमति दी गई है)
  • क्रिया: डायल किए जा रहे नंबर में अंक जोड़ें।
  • उद्देश्य: निरंतर अंक प्रविष्टि की अनुमति दें बिना छोड़े डायलिंग अवस्था।

💡 स्वयं के संक्रमण फोन नंबर जैसे इनपुट अनुक्रमों को संभालने के लिए आवश्यक हैं।


2. कनेक्शन तर्क और अपवाद संभाल

🔹 डायलिंग → कनेक्टिंग (वैध संख्या)

  • घटना: वैध संख्या (पूर्ण संख्या के वैधीकरण के साथ)
  • संक्रमण: वैध संख्या → कनेक्टिंग
  • क्रिया: नेटवर्क के साथ कॉल सेटअप शुरू करें।

🔹 डायलिंग → रिकॉर्डेड मैसेज (अवैध संख्या)

  • घटना: अवैध संख्या (उदाहरण के लिए, गलत लंबाई, अवैध प्रीफिक्स)
  • संक्रमण: अवैध संख्या → रिकॉर्डेड मैसेज
  • क्रिया: पूर्व रिकॉर्ड किया गया संदेश प्लेः “आप जिस नंबर को डायल किया है, वह सेवा में नहीं है।”

🔹 कनेक्टिंग → बसी टोन (नंबर बिजी)

  • घटना: संख्या व्यस्त
  • संक्रमण: संख्या व्यस्त → व्यस्त टोन
  • क्रिया: व्यस्त टोन बजाएं; उपयोगकर्ता को सूचित करें कि लाइन व्यस्त है।

🔹 कनेक्टिंग → तेज व्यस्त टोन (ट्रंक व्यस्त)

  • घटना: ट्रंक व्यस्त
  • संक्रमण: ट्रंक व्यस्त → तेज व्यस्त टोन
  • क्रिया: तेज व्यस्त टोन बजाएं; नेटवर्क भार को दर्शाएं।

⚠️ नोट: ये हैं त्रुटि स्थितियाँ जो सामान्य प्रवाह को बाधित करती हैं। इन्हें सम्मानजनक तरीके से संभाला जाना चाहिए।


3. समय सीमा और चेतावनी तंत्र

🔹 डायलिंग → चेतावनी (समय सीमा समाप्त)

  • घटना: समय सीमा समाप्त अक्रियता के 30 सेकंड बाद
  • संक्रमण: समय सीमा समाप्त → चेतावनी
  • क्रिया: चेतावनी बीप बजाएं; उपयोगकर्ता को सूचित करें कि आगे जारी रखें या रोकें।

🔹 चेतावनी → समय सीमा समाप्त (समय सीमा समाप्त)

  • घटना: समय सीमा समाप्त10 सेकंड बाद फिर से
  • संक्रमण: समय समाप्त → समय समाप्त
  • क्रिया:कॉल प्रयास रद्द करें; वापस लौटेंआराम.

⏱️ समय समाप्त तर्क अनंत इंतजार को रोकता है और उपयोगकर्ता अनुभव को बेहतर बनाता है।


4. सक्रिय कॉल और अन्य विकल्प

🔹 कनेक्टिंग → रिंगिंग (मार्गित)

  • घटना: मार्गितनेटवर्क सफलतापूर्वक कॉल को मार्गित करता है)
  • संक्रमण: मार्गित → रिंगिंग
  • क्रिया:कॉल करने वाले पक्ष को रिंगिंग सिग्नल भेजें।

🔹 रिंगिंग → कनेक्टेड (कॉल किए गए फोन ने जवाब दिया)

  • घटना: कॉल किए गए फोन ने जवाब दिया
  • संक्रमण: कॉल किए गए फोन ने जवाब दिया → कनेक्टेड
  • क्रिया:ऑडियो कनेक्शन स्थापित करें; कॉल रिकॉर्डिंग शुरू करें (यदि सक्षम हो।)

🔹 कनेक्टेड → डिस्कनेक्टेड (हुक ऑन या कॉल किए गए फोन ने डिस्कनेक्ट किया)

  • डिस्कनेक्शन के दो रास्ते:
    1. उपयोगकर्ता डिस्कनेक्ट करता है: हुक ऑन → डिस्कनेक्टेड
    2. दूसरी पार्टी ने कॉल को डिस्कनेक्ट कर दिया: कॉल की गई फ़ोन हैंग अप → डिस्कनेक्टेड

🔄 दोनों ट्रांज़िशन्स की ओर लीड करते हैंडिस्कनेक्टेड पहुँचने से पहले अंतिम स्थिति.

🔹 डिस्कनेक्टेड → अंतिम स्थिति

  • घटना: कोई नहीं (स्पष्ट या क्लीनअप एक्शन के माध्यम से)
  • ट्रांज़िशन: डिस्कनेक्टेड → अंतिम
  • क्रिया: संसाधनों को साफ़ करें, कॉल के दैर्ध्य को लॉग करें, सांख्यिकी को अपडेट करें।

✅ अंतिम स्थिति कॉल लाइफ़साइकिल के अंत का संकेत देती है।


🎨 स्पष्टता के लिए विज़ुअल डिज़ाइन सिद्धांत

जटिल स्टेट मशीन को पढ़ने योग्य और बनाए रखने योग्य बनाने के लिए:

सिद्धांत कार्यान्वयन
मुख्य हैप्पी पाथ मुख्य प्रवाह (आराम → डायल टोन → डायलिंग → कनेक्टिंग → रिंगिंग → कनेक्टेड) को साफ़ ऊर्ध्वाधर या क्षैतिज रेखा के रूप में रखें।
अपवादों के लिए बाहर की ओर शाखाएँ बनाएँ त्रुटि स्थितियों (बिज़ी टोन, फास्ट बिज़ी टोन, रिकॉर्डेड मैसेज) को पार्श्व शाखाओं के रूप में रखें।
संबंधित स्थितियों को समूहित करें उपयोग करें कॉम्पोज़िट स्टेट्स त्रुटि स्थितियों के लिए (नीचे देखें)।
पस्यूडो स्टेट्स का समझदारी से उपयोग करें प्रारंभिक और अंतिम को स्पष्ट रूप से चिह्नित किया जाना चाहिए।
प्रतिच्छेदन संक्रमण से बचें तीरों के ओवरलैप होने से बचें; आवश्यकता पड़ने पर ओर्थोगोनल क्षेत्रों का उपयोग करें।

🔧 उन्नत मॉडलिंग तकनीकें

✅ संयुक्त अवस्था: “त्रुटि” समूहन

सूचीबद्ध करने के बजाय बसी टोनतेज़ बसी टोन, और रिकॉर्डेड संदेश अलग-अलग अवस्थाओं के रूप में, उन्हें एक के नीचे समूहित करें संयुक्त अवस्था कहलाती है त्रुटि:

[त्रुटि] 
├── बसी टोन
├── तेज़ बसी टोन
└── रिकॉर्डेड संदेश
  • प्रवेश क्रिया: त्रुटि टोन या संदेश प्लेयर करें।
  • निकास क्रिया: वापस लौटें डायल टोन या आराम उपयोगकर्ता प्रतिक्रिया के बाद।

✅ लाभ:दृश्य अव्यवस्था को कम करता है और स्केलेबिलिटी में सुधार करता है।


✅ गार्ड शर्तें (वैकल्पिक सुधार)

संक्रमण को बेहतर बनाने के लिए गार्ड जोड़ें:

अंक(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 स्टेट मशीन्स के साथ डिज़ाइनिंग