मैं एक ही SMS दो बार भेजने से कैसे बचूँ?

तीन घंटे के भीतर समान SMS अनुरोधों के लिए एक ही Idempotency-Key दोबारा इस्तेमाल करें, ताकि अनुरोध ठीक एक बार स्वीकार होने की गारंटी मिले।

हो सकता है कि Bird किसी SMS को स्वीकार कर ले, पर आपके एप्लिकेशन तक प्रतिक्रिया पहुँचने से पहले कनेक्शन टूट जाए। नई कुंजी के साथ फिर से प्रयास करने पर संदेश दूसरी बार भेजा जा सकता है, क्योंकि Bird इसे अलग अनुरोध मानता है।

कुंजी कैसे काम करती है?

हर इच्छित SMS भेजने के लिए एक Idempotency-Key हेडर सेट करें और उसी समान अनुरोध के लिए फिर से प्रयास करते समय उसका दोबारा उपयोग करें। ठीक एक बार स्वीकृति की गारंटी का अर्थ है कि तीन घंटे के भीतर मेल खाने वाले फिर से प्रयास उसी एक स्वीकृत भेजने पर पहुँचने चाहिए, भले ही उसकी प्रतिक्रिया आप तक न पहुँची हो।

उदाहरण के लिए, किसी ऑर्डर की पुष्टि में टाइमआउट और उसके बाद के फिर से प्रयास, दोनों में एक ही कुंजी रहती है। किसी दूसरे ऑर्डर की पुष्टि को अलग कुंजी मिलती है।

दोहराई गई प्रतिक्रियाओं में Idempotency-Replay: true शामिल होता है, जिससे आपके लॉग में दोहराई गई प्रतिक्रिया और नए सिरे से संसाधित अनुरोध को अलग पहचाना जा सकता है।

SMS कुंजियाँ आपके वर्कस्पेस तक सीमित होती हैं। Bird अपने idempotency अनुबंध के तहत पूरी हुई प्रतिक्रियाओं को तीन घंटे तक सहेज कर रखता है। इस अवधि के बाद वही कुंजी नया अनुरोध चला सकती है, क्योंकि उसका दोहराव रिकॉर्ड समाप्त हो चुका होता है। इसलिए एक दिन बाद फिर से प्रयास करने से पहले आपको मूल परिणाम का मिलान करना होगा, तभी दोबारा भेजें।

विफलता वाली प्रतिक्रियाएँ मुझे क्या बताती हैं?

त्रुटि कोड बताता है कि अनुरोध बदला गया है, अनुरोध अभी पूरा नहीं हुआ है, या सुरक्षा उपलब्ध नहीं है।

  • 409 के साथ E01005 IdempotencyKeyReuse: एक ही कुंजी किसी दूसरे अनुरोध के लिए उपयोग की गई। फिर से प्रयास करने से पहले कुंजी निर्धारण ठीक करें, क्योंकि यह कुंजी मूल अनुरोध की है। Bird मेथड, एंडपॉइंट, पाथ और क्वेरी पैरामीटर, और रॉ बॉडी की तुलना करता है। JSON में व्हाइटस्पेस का छोटा सा बदलाव भी अनुरोध को अलग बना देता है।
  • 409 के साथ E01004 RequestInProgress: उसी कुंजी वाला एक समवर्ती अनुरोध अभी पूरा नहीं हुआ है। थोड़ा रुकें और उसी कुंजी और अनुरोध के साथ फिर से प्रयास करें, ताकि मूल अनुरोध पूरा हो सके।
  • 503 के साथ E01033 IdempotencyUnavailable: चलने से पहले सुरक्षा उपलब्ध नहीं थी, इसलिए यह प्रयास नहीं चला। उसी कुंजी और अनुरोध के साथ बैकऑफ़ का उपयोग करते हुए फिर से प्रयास करें। यह प्रतिक्रिया किसी पिछले प्रयास का परिणाम तय नहीं करती।
  • अन्य 5xx प्रतिक्रियाएँ या टाइमआउट: उसी कुंजी और अनुरोध के साथ बैकऑफ़ का उपयोग करते हुए फिर से प्रयास करें। ठीक एक बार स्वीकृति की गारंटी तीन घंटे के भीतर इन फिर से प्रयासों को कवर करती है। फिर से प्रयासों की आपकी तय सीमा पूरी होने पर रुक जाएँ।

idempotency हेडर इन फिर से प्रयासों के दौरान अनुरोध की पहचान बनाए रखता है।

क्या कुंजी डुप्लिकेट न होने की गारंटी देती है?

गारंटी यह है कि एक ही वर्कस्पेस में, तीन घंटे के भीतर, एक ही कुंजी वाले समान अनुरोध ठीक एक बार स्वीकार होंगे। ये फिर से प्रयास एक ही स्वीकृत भेजने पर पहुँचने चाहिए, प्रतिक्रिया खो जाने के बाद भी। डिलीवरी की पुष्टि के लिए संदेश की स्थिति जाँचें।

तीन घंटे की सहेजने की अवधि के बाद मूल कुंजी किसी नए ऑपरेशन की पहचान कर सकती है। दोबारा भेजने से पहले अज्ञात मूल परिणाम का मिलान करें।

अपने एप्लिकेशन के इवेंट और भेजने के रिकॉर्ड रखें, ताकि दोबारा भेजने से पहले आप किसी अनिश्चित परिणाम का मिलान कर सकें। संदेश में ऑर्डर या संदर्भ संख्या शामिल करें, ताकि प्राप्तकर्ता पहचान सके कि संदेश किस इवेंट से संबंधित है।

अगर हैंडसेट कोई संदेश दो बार दिखाए तो क्या करें?

आइडेम्पोटेंसी कुंजी API के फिर से प्रयासों को नियंत्रित करती है; यह तय नहीं करती कि प्राप्तकर्ता का फ़ोन संदेश कैसे दिखाता है। केवल एक स्क्रीनशॉट से यह स्थापित नहीं होता कि डुप्लिकेट कहाँ से उत्पन्न हुआ।

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

मुझे क्या करना चाहिए?

  1. हर इच्छित SMS भेजने के लिए एक कुंजी निर्धारित करें और उसके फिर से प्रयासों के लिए वही समान अनुरोध दोबारा उपयोग करें।
  2. नेटवर्क त्रुटियों, टाइमआउट और 5xx प्रतिक्रियाओं के लिए बैकऑफ़ के साथ फिर से प्रयास करें, और तीन घंटे के भीतर कुंजी और समान अनुरोध वही रखें।
  3. बदले हुए अनुरोध से होने वाले टकराव ठीक करें, और जब मूल अनुरोध अभी भी प्रगति में हो तो फिर से प्रयास करने में देरी करें।
  4. सीमा पूरी हो चुके या अवधि समाप्त हो चुके फिर से प्रयासों को अनसुलझा मानें, जब तक आप उनके परिणाम का मिलान न कर लें, और उसके बाद ही तय करें कि दोबारा भेजना उचित है या नहीं।

संक्षेप में

  1. एक कुंजी एक इच्छित भेजने की पहचान करती है।

    तीन घंटे के भीतर वही कुंजी और वही समान अनुरोध दोबारा इस्तेमाल करें। गारंटी इन फिर से प्रयासों में केवल एक स्वीकृत भेजने को कवर करती है।

  2. 409 बदले हुए या अधूरे अनुरोध की पहचान कर सकता है।

    IdempotencyKeyReuse का अर्थ है कि अनुरोध बदल गया है। RequestInProgress का अर्थ है कि मूल अनुरोध अभी चल रहा है और कुछ देर बाद फिर से प्रयास करना होगा।

  3. सुरक्षा उपलब्ध न होने पर यह प्रयास रुक जाता है।

    503 IdempotencyUnavailable प्रतिक्रिया का अर्थ है कि यह प्रयास चलाया नहीं गया। इससे किसी पिछले प्रयास का नतीजा तय नहीं होता।

  4. स्वीकृति की सुरक्षा एक सहेजने की अवधि तक सीमित है।

    तीन घंटे के भीतर फिर से प्रयास करें। उस अवधि के बाद दोबारा भेजने से पहले मूल भेजने की जाँच करें।

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

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

Start building with Bird in minutes.