SIP रिस्पॉन्स कोड का क्या मतलब है, और मुझे 503 क्यों मिला?

SIP रिस्पॉन्स कोड बताता है कि कॉल का प्रयास कैसे खत्म हुआ, और Bird से आया 503 आमतौर पर ओवरलोड नहीं, बल्कि ऐसा इनकार होता है जिसका कारण वह नेटवर्क पर नहीं बताता।

ये श्रेणियाँ HTTP से ली गई हैं, और जाने-पहचाने नंबरों का मतलब लगभग वही है जिसकी आप उम्मीद करते हैं। आम इस्तेमाल में आने वाले एक कोड का मतलब मानक में लिखे अर्थ से काफ़ी अलग है।

क्लासों का क्या अर्थ है?

SIP छह रिस्पॉन्स क्लास का उपयोग करता है, जिनकी संख्याएँ HTTP जैसी हैं और जिन्हें उसी तरह पढ़ा जाता है। SIP को परिभाषित करने वाला RFC 3261 इनके नाम सेक्शन 7.2 में देता है:

1xx: Provisional -- request received, continuing to process the request;
2xx: Success -- the action was successfully received, understood, and accepted;
3xx: Redirection -- further action needs to be taken in order to complete the request;
4xx: Client Error -- the request contains bad syntax or cannot be fulfilled at this server;
5xx: Server Error -- the server failed to fulfill an apparently valid request;
6xx: Global Failure -- the request cannot be fulfilled at any server.

केवल एक क्लास का कोई HTTP समकक्ष नहीं है: 6xx। 4xx और 6xx के बीच का अंतर दायरे का है। क्लाइंट त्रुटि बताती है कि यह सर्वर अनुरोध पूरा नहीं कर सका, जबकि ग्लोबल विफलता बताती है कि कोई भी सर्वर इसे पूरा नहीं कर सकता। 6xx के बाद किसी वैकल्पिक रूट से प्रयास करने का कोई लाभ नहीं है। व्यवहार में यह आपको शायद ही कभी दिखेगा।

सामान्य कोड का क्या अर्थ है?

403 का अर्थ है कि दूसरी ओर ने कॉल अस्वीकार कर दी। 404 का अर्थ है कि नंबर आवंटित नहीं है। 486 का अर्थ है कि अंतिम सिस्टम तक पहुँचा गया और वह व्यस्त है। 503 का अर्थ है कि सर्वर अभी अनुरोध स्वीकार नहीं करेगा। RFC 3261 इन्हें सेक्शन 21 में परिभाषित करता है:

  • 403 Forbidden: "The server understood the request, but is refusing to fulfill it."
  • 404 Not Found: "The server has definitive information that the user does not exist at the domain specified in the Request-URI."
  • 486 Busy Here: "The callee's end system was contacted successfully, but the callee is currently not willing or able to take additional calls at this end system."
  • 503 Service Unavailable: "The server is temporarily unable to process the request due to a temporary overloading or maintenance of the server."

486 के शब्दों में ही निदान है: अंतिम सिस्टम से सफलतापूर्वक संपर्क हुआ, और फिर उसने कॉल अस्वीकार कर दी। 404 का अर्थ है कि नंबर आवंटित नहीं है। दोनों आपके अपने सेटअप की ओर नहीं, बल्कि आपके डायल किए गए नंबर की ओर इशारा करते हैं। 4xx देखकर आम तौर पर जो पहली प्रतिक्रिया होती है, यह उसका उल्टा है। सही तरह से काम कर रहे ट्रंक की जाँच करने की ज़रूरत नहीं होती।

मेरी कॉल को 503 क्यों मिला?

दो बिल्कुल अलग स्थितियों में 503 मिलता है, और कॉल लॉग से ही इन्हें अलग पहचाना जाता है।

मिलते-जुलते कॉल रिकॉर्ड वाला 503 एक अस्वीकृति है। Bird डायल करने से पहले कॉलर ID, गंतव्य, खाते की सीमाएँ और वॉलेट बैलेंस जाँचता है, और इनमें से किसी जाँच में विफल होने वाली कॉल को 503 के साथ अस्वीकार कर दिया जाता है। रिकॉर्ड में अस्वीकृति का कारण होता है, जो बताता है कि कॉल किस जाँच में विफल हुई। वही कॉल फिर से प्रयास करने पर वही उत्तर मिलता है, इसलिए समाधान एक और प्रयास नहीं, बल्कि वह सेटिंग है जिसकी ओर कारण इशारा करता है।

कारण जानबूझकर वायर पर नहीं भेजा जाता। आपके फ़ोन सिस्टम को केवल 503 मिलता है; विशिष्ट कारण इसके बजाय प्रमाणीकृत कॉल रिकॉर्ड में रहता है। यह कोई चूक नहीं, बल्कि सुरक्षा से जुड़ा निर्णय है। SIP INVITE वह मेथड है जो कॉल का अनुरोध करता है, और कोई भी आपको इसे भेज सकता है। प्रतिक्रिया में कारण डालने से उन्हें पता चल जाता कि कोई गंतव्य सक्षम है या नहीं, कोई कॉलर ID सत्यापित है या नहीं, या किसी खाते का बैलेंस खत्म हो गया है या नहीं।

जिस 503 का कोई कॉल रिकॉर्ड ही नहीं है, वह अस्वीकृति नहीं है। किसी जाँच ने कॉल को अस्वीकार नहीं किया, इसलिए पढ़ने के लिए कोई कारण नहीं है और लॉग में कुछ दिखाई नहीं देता। इस स्थिति में RFC की अपनी परिभाषा बेहतर मार्गदर्शक है, और फिर से प्रयास करना ही सही कदम है।

इसलिए प्रक्रिया यह है: अपनी ओर 503 दिखने पर लॉग में कॉल खोजें। अगर कॉल वहाँ है, तो अस्वीकृति का कारण बताता है कि क्या बदलना है, और हर कारण और उसका समाधान अस्वीकृत कॉल में दिया गया है। अगर कॉल वहाँ नहीं है, तो इसे अस्थायी मानें और ठीक करने के लिए कोई सेटिंग खोजने के बजाय फिर से प्रयास करें।

Rejected, Failed या कुछ और?

SIP कोड केवल आधा उत्तर है। बाकी आधा उत्तर कॉल का स्टेटस है, और दोनों को साथ पढ़ने पर ही कोई भी उपयोगी बनता है।

स्टेटसक्या हुआ
answeredगंतव्य ने कॉल उठाई
no_answerघंटी बजी, लेकिन टाइमआउट से पहले कॉल का उत्तर नहीं दिया गया
rejectedइसे आगे पहुँचाने के बजाय अस्वीकार कर दिया गया
failedइसका प्रयास हुआ पर यह सफल नहीं हुआ, और जो SIP प्रतिक्रिया लौटी वही दर्ज है
unknownकोई अंतिम प्रतिक्रिया कभी नहीं आई, इसलिए परिणाम तय नहीं हो सका

Rejected दो अलग-अलग अस्वीकृतियों को दर्शाता है, और अस्वीकृति का कारण ही उन्हें अलग करता है। अगर कारण मौजूद है, तो Bird ने कॉल अस्वीकार की है और कारण उस जाँच का नाम बताता है जिसमें कॉल विफल हुई, और कोड ऊपर बताया गया 503 होता है। अगर कोई कारण नहीं है, तो दूसरे छोर ने कॉल सीधे ठुकरा दी है और SIP प्रतिक्रिया में दूसरे छोर का अपना कोड होता है। जिस आने वाली कॉल को उसके डायल किए गए नंबर ने लौटा दिया, वह भी बिना कारण के rejected होती है, क्योंकि वह Bird की किसी जाँच में विफल नहीं हुई। नंबर को जो करने के लिए सेट किया गया था, वह उसके inbound route के रूप में दर्ज होता है।

Failed अस्वीकृति बिल्कुल नहीं है। कॉल का प्रयास हुआ और वह सफल नहीं हुई। 486 या 404 इसी स्थिति में आते हैं।

API में दो और स्टेटस मौजूद हैं जो किसी रिकॉर्ड तक कभी नहीं पहुँचते। busy और canceled आपके अपने नंबरों पर आने वाली कॉल के लिए आरक्षित हैं। busy उस स्थिति के लिए है जब कॉल किए गए व्यक्ति ने कॉल को व्यस्त बताकर अस्वीकार किया। canceled उस स्थिति के लिए है जब कॉल करने वाले ने कॉल उठाए जाने से पहले ही काट दी। इनमें से कोई भी स्टेटस जारी नहीं होता, और दोनों परिणाम failed के रूप में रिपोर्ट होते हैं। failed को SIP प्रतिक्रिया के साथ पढ़कर ही इन्हें अलग किया जा सकता है। इनमें से किसी भी स्टेटस पर आधारित ब्रांच कभी नहीं चलती, और अपने रिकॉर्ड में इन्हें खोजने पर कुछ नहीं मिलता।

ऊपर की तालिका उन परिणामों को दिखाती है जो समाप्त हो चुकी कॉल में हो सकते हैं। जो कॉल अभी चल रही है उसका स्टेटस ringing या in_progress होता है, इसलिए कॉल सूची को फ़िल्टर करने पर ये दोनों भी दिखते हैं। यह सूची दूसरी दिशा में भी खुली है: जिन स्टेटस को आप संभालते हैं उन्हें मिलाएँ, और किसी अनजान मान को त्रुटि मानने के बजाय ऐसा स्टेटस मानें जिसे आप नहीं संभालते।

कई कॉल में यह जानकारी एक साथ कैसे देखें?

किसी पैटर्न को समझने के लिए एक-एक कॉल देखना सही तरीका नहीं है। voice statistics endpoint आपके पूरे ट्रैफ़िक के रिस्पॉन्स कोड एक साथ जोड़ता है, और इसी से आप पहचानते हैं कि समस्या व्यवस्थागत है या किसी एक खराब नंबर की।

503 में बढ़ोतरी आपके खाते या आपके कॉन्फ़िगरेशन से जुड़ी होती है, क्योंकि ये Bird के अपने अस्वीकार हैं। 486 या 404 में बढ़ोतरी डायल किए जा रहे नंबरों से जुड़ी होती है। पहली समस्या आप किसी सेटिंग में ठीक कर सकते हैं, और दूसरी का आमतौर पर मतलब है कि किसी सूची को साफ़ करना ज़रूरी है।

वॉइस समस्या निवारण में अलग-अलग मामलों को एक-एक करके समझाया गया है। कॉल लॉग बताता है कि हर रिकॉर्ड में क्या होता है, जिसमें वह कॉल ID भी शामिल है जिसे आपको तब बताना होता है जब किसी कारण को केवल Bird ही सुलझा सकता है।

संक्षेप में

  1. 503 इनकार है या नहीं, यह कॉल लॉग से तय होता है।

    जिस 503 का रिकॉर्ड मौजूद है, वह इनकार है, और रिकॉर्ड में उसका कारण लिखा होता है। जिस 503 का कोई रिकॉर्ड नहीं है, वह इनकार नहीं है, और उसके लिए फिर से प्रयास करना ठीक है।

  2. Rejected और Failed अलग-अलग नतीजे हैं।

    Rejected का मतलब है कि कॉल को अस्वीकार किया गया। Failed का मतलब है कि कॉल का प्रयास हुआ पर वह सफल नहीं हुई, और जो SIP कोड लौटा वही उसका जवाब है।

  3. 486 या 404 का संबंध आपके डायल किए गए नंबर से है।

    Busy और unallocated दूसरी ओर से आए जवाब हैं, इसलिए ये आपके कॉन्फ़िगरेशन की नहीं, बल्कि गंतव्य नंबर की ओर इशारा करते हैं।

  4. दो कॉल स्टेटस मौजूद हैं, पर कभी जारी नहीं होते।

    busy और canceled इनकमिंग कॉल के लिए आरक्षित हैं। इनमें से कोई भी जारी नहीं होता, और दोनों नतीजे failed के रूप में दर्ज होते हैं।

व्यवहार में लाएँ।

इस विषय के लिए दस्तावेज़, गाइड और उदाहरणों के साथ आगे बढ़ें।

इम्प्लीमेंटेशन ब्रीफ़ पाएँ

उसी नेटवर्क पर बनाएँ।

एक टेस्ट API key आपको तुरंत मिल जाती है। भुगतान विधि जोड़ने और सेंडर सत्यापित करने पर प्रोडक्शन अनलॉक होता है।

आपका अगला आइडिया। जुड़ने के लिए तैयार।