पोस्टबैक, पिक्सल और इमेज टैग: पैसा सिर्फ़ एक पर मिल सकता है
कन्वर्ज़न रिपोर्ट करने के तीन तरीक़े, इस तरह समझाए गए कि ग़ैर-इंजीनियर भी पकड़ ले, और साथ में वे छह तरीक़े जिनसे इंटीग्रेशन असल में टूटते हैं। उन ऑपरेटरों और टेक्निकल एफ़िलिएट मैनेजरों के लिए जिन्होंने यह रात ग्यारह बजे डीबग किया है।

कन्वर्ज़न तीन तरीक़ों से रिपोर्ट किया जा सकता है: इमेज टैग, JavaScript पिक्सल, या सर्वर-टू-सर्वर पोस्टबैक। इनमें सिर्फ़ पोस्टबैक इतना टिकाऊ है कि उस पर कमीशन दिया जा सके, क्योंकि उसे खिलाड़ी के ब्राउज़र के सहयोग की ज़रूरत नहीं। जो इंटीग्रेशन "ट्रैक नहीं कर रहे", उनमें से ज़्यादातर टूटे हुए पोस्टबैक नहीं हैं, वे खिलाड़ी के रिकॉर्ड पर ग़ायब क्लिक आइडेंटिफ़ायर हैं।
कॉल हमेशा ख़राब वक़्त पर आती है। किसी एफ़िलिएट मैनेजर का पार्टनर ट्रैफ़िक रोकने की धमकी दे रहा है, ऑपरेटर क़सम खा रहा है कि इंटीग्रेशन लाइव है, और डैशबोर्ड शून्य दिखा रहा है। कोई डिपॉज़िट-सक्सेस पेज के फ़ुटर में लगे टैग का स्क्रीनशॉट भेजकर पूछता है कि यह चल क्यों नहीं रहा।
वह इसलिए नहीं चल रहा क्योंकि वह किसी पेज के फ़ुटर में लगा एक टैग है।
कन्वर्ज़न रिपोर्ट करना छोटी सी समस्या है जिसे ग़लत करने के तरीक़े बहुत हैं, और वे तरीक़े दस साल में ज़्यादा नहीं बदले। जो बदला वह यह है कि तीन में से दो तरीक़े चुपचाप भरोसेमंद नहीं रहे, और सब उन्हें फिर भी शिप करते रहे। यह लेख आपको इंटीग्रेशन के बाद नहीं, पहले अपने इंजीनियर को थमाना चाहिए।
यह बताने के तीन तरीक़े कि खिलाड़ी ने डिपॉज़िट किया
इमेज टैग। सबसे पुराना। आपके पेज में एक-पिक्सल की इमेज होती है जिसका सोर्स ट्रैकिंग प्लेटफ़ॉर्म का URL होता है। ब्राउज़र इमेज लोड करने की कोशिश करता है, वह रिक्वेस्ट प्लेटफ़ॉर्म तक पहुँचती है, और रिक्वेस्ट ही संदेश है। असल में किसी इमेज की ज़रूरत नहीं, बात फ़ेच की है। इसके लिए HTML के अलावा कुछ नहीं चाहिए, इसीलिए वह उन टेम्प्लेट सिस्टम में इतने लंबे समय तक ज़िंदा रहा जहाँ कोई JavaScript छूना नहीं चाहता था।
JavaScript पिक्सल। वही विचार, इमेज की जगह स्क्रिप्ट के साथ। पेज में एक स्निपेट चलता है, थोड़ा संदर्भ इकट्ठा करता है, और कॉल भेजता है। यह ज़्यादा लचीला है: यह पेज के किसी वेरिएबल में रखी वैल्यू पढ़ सकता है, किसी कन्फ़र्मेशन के रेंडर होने का इंतज़ार कर सकता है, और वह डिपॉज़िट रक़म भेज सकता है जो सिर्फ़ रनटाइम पर पता चली। यह ज़्यादा नाज़ुक भी है, क्योंकि यह स्क्रिप्ट के लोड होने, वेरिएबल के मौजूद होने और पेज पर उससे ऊपर कोई एरर न आने पर निर्भर है।
सर्वर-टू-सर्वर पोस्टबैक। ब्राउज़र बिलकुल नहीं। जब आपका बैकएंड वह घटना दर्ज करता है जो मायने रखती है, तो वह एक URL पर HTTP रिक्वेस्ट भेजता है, और उसमें वह आइडेंटिफ़ायर लेकर जाता है जो खिलाड़ी के पहली बार आने पर उसे मिला था। आपकी पेमेंट सर्विस डिपॉज़िट कन्फ़र्म करती है, आपका सिस्टम ट्रांज़ैक्शन लिखता है, और उसी रास्ते में कहीं एक रिक्वेस्ट निकलती है जो कहती है: यह खिलाड़ी, यह इवेंट, यह रक़म, यह करेंसी।
पूरा विचार बस इतना है। यह बाक़ी दोनों से कम चतुर लगता है, और ठीक इसी वजह से यह टिकता है।
तीन में से दो भरोसेमंद क्यों नहीं रहे
इसकी कोई एक वजह नहीं है। वजहों का ढेर है, और अकेले हर एक झेली जा सकती थी।
Safari और Firefox डिफ़ॉल्ट रूप से थर्ड-पार्टी कुकीज़ ब्लॉक करते हैं, और Firefox अपनी ट्रैकर सूची के डोमेन पर जाने वाली रिक्वेस्ट भी ब्लॉक करता है। Chrome अब भी थर्ड-पार्टी कुकीज़ की इजाज़त देता है, तो Chrome पर ब्लॉकिंग ब्राउज़र की जगह ऐड ब्लॉकर से आती है। Safari इसके अलावा यह भी सीमित करता है कि स्क्रिप्ट से लिखा स्टोरेज कितने समय बचेगा, कुछ मामलों में घटकर कुछ दिन, यानी जो भी चीज़ क्लिक के वक़्त लिखी और डिपॉज़िट के वक़्त पढ़ी जाने वाली स्थिति पर टिकी है, उसकी एक्सपायरी सामान्य सोच-विचार की अवधि के एक हिस्से भर की है। इन सबके ऊपर ऐड ब्लॉकर बैठे हैं, और वे ठीक उन्हीं दर्शकों में आम हैं जो साइनअप से पहले तुलना वाला कंटेंट पढ़ते हैं। इनमें से कोई भी अपनी घोषणा नहीं करता। आपका ऑपरेटर पेज ठीक से रेंडर होते देखता है और नतीजा निकालता है कि इंटीग्रेशन चल रहा है।
फिर वह हिस्सा है जिसे कोई ब्राउज़र सेटिंग ठीक नहीं कर सकती। खिलाड़ी दफ़्तर में डेस्कटॉप पर क्लिक करता है, सोचता है, और उसी शाम फ़ोन से डिपॉज़िट करता है। या वेब पर रजिस्टर करता है और नेटिव ऐप के अंदर डिपॉज़िट करता है, जहाँ न ब्राउज़र है, न पेज, न फ़ायर होने के लिए कोई टैग। ख़ासकर स्पोर्ट्सबुक में डिपॉज़िट क्लिक की जगह फ़िक्स्चर लिस्ट के पीछे चलता है, और वह उसके पीछे ऐप के अंदर तक जाता है। ये दोनों यात्राएँ कितनी अलग तरह से चलती हैं यह देखना हो तो कैसीनो और स्पोर्ट्सबुक ट्रैफ़िक ठीक इसी बिंदु पर अलग होते हैं।
पिक्सल वहाँ से फ़ायर नहीं हो सकता जहाँ ब्राउज़र गया ही नहीं। इसमें कुछ भी बेहतर टैग प्लेसमेंट से ठीक होने वाला नहीं है।
| आपको जिसकी परवाह है | इमेज टैग | JavaScript पिक्सल | सर्वर-टू-सर्वर पोस्टबैक |
|---|---|---|---|
| कहाँ से फ़ायर होता है | खिलाड़ी के ब्राउज़र से | खिलाड़ी के ब्राउज़र से | आपके अपने बैकएंड से |
| ऐड ब्लॉकर झेल पाता है | शायद ही कभी | शायद ही कभी | हाँ, यह उसमें आता ही नहीं |
| क्रॉस-डिवाइस झेल पाता है | नहीं | नहीं | हाँ |
| ऐप के अंदर हुआ डिपॉज़िट झेल पाता है | नहीं | नहीं | हाँ |
| रनटाइम पर पेज की स्थिति पढ़ सकता है | नहीं | हाँ | लागू नहीं |
| सेटल हुई रक़म रिपोर्ट करता है | सिर्फ़ वह जो पेज को पता हो | सिर्फ़ वह जो पेज को पता हो | हाँ, सिस्टम ऑफ़ रिकॉर्ड से |
| कब इस्तेमाल करें | पुराने सिस्टम जिन्हें बदल नहीं सकते | एक ही सेशन का सिग्नल, सेकंडरी के तौर पर | जो भी चीज़ पैसे का फ़ैसला करती हो |

जानने लायक़ फ़ेलियर मोड
कोई भी इंटीग्रेशन दिलचस्प तरीक़े से नहीं तोड़ता। लगभग सब कुछ यही छह ग़लतियाँ बनाती हैं।
इवेंट पर नहीं, पेज लोड पर फ़ायर करना। टैग डिपॉज़िट-कन्फ़र्मेशन पेज पर रहता है, तो वह हर बार फ़ायर होता है जब वह पेज खुलता है। खिलाड़ी रिफ़्रेश करता है, हिस्ट्री से लौटता है, या किसी असफल कोशिश के बाद वहाँ पहुँचता है, और आपकी रिपोर्टिंग में हर बार एक कन्वर्ज़न बन जाता है। यह आँकड़े उस दिशा में फुलाता है जो अच्छी दिखती है, इसीलिए किसी के सवाल उठाने से पहले यह इतने लंबे समय तक ज़िंदा रहता है।
क्या यह सचमुच सर्वर-साइड है? टेम्प्लेट रेंडर करता कोई बैकएंड फ़्रेमवर्क भी वही टैग निकाल रहा है जिसे ब्राउज़र को चलाना है। अगर रिक्वेस्ट खिलाड़ी के डिवाइस से निकलती है, तो वह ब्राउज़र-साइड है, चाहे वह किसी भी फ़ाइल में लिखी गई हो। जाँच में एक मिनट लगता है: अपने ही ब्राउज़र में स्क्रिप्ट ब्लॉक कीजिए और देखिए कि इवेंट फिर भी आता है या नहीं।
फिर वह क्लिक आइडेंटिफ़ायर है, जो खिलाड़ी के रिकॉर्ड से ग़ायब होता है। यह सबसे आम गड़बड़ी है, बहुत बड़े अंतर से, और नीचे उसका अपना सेक्शन है।
डिपॉज़िट सेटल होने से पहले रिपोर्ट हो जाना। पेमेंट अधिकृत होती है, पोस्टबैक निकल जाता है, फिर पेमेंट फ़ेल हो जाती है या पलट दी जाती है। अब ऐसे पैसे पर कमीशन चढ़ा है जो कभी आया ही नहीं। उस स्थिति पर फ़ायर कीजिए जिसे आपकी फ़ाइनेंस टीम पहचानती है, उस पर नहीं जो आपका चेकआउट पेज दिखाता है।
आइडेम्पोटेंसी, या उसकी ग़ैरहाज़िरी। नेटवर्क टाइमआउट होते हैं। ठीक से बना भेजने वाला दोबारा कोशिश करता है, और यह सही है। अगर पाने वाला पक्ष यह नहीं बता सकता कि दूसरी कोशिश पहली वाली ही घटना है, तो रीट्राई दूसरा कन्वर्ज़न बन जाता है। हर इवेंट के साथ आपकी तरफ़ से एक स्थिर, अनोखा रेफ़रेंस चाहिए, हर रीट्राई पर वही वैल्यू, ताकि डुप्लिकेट को पहचानकर हटाया जा सके, दोबारा भुगतान न किया जाए।
इवेंट क्रम से बाहर भी आते हैं। डिपॉज़िट उस रजिस्ट्रेशन से पहले पहुँच जाता है जिससे वह जुड़ा है, क्योंकि दो सर्विस अलग-अलग फ़ायर हुईं और एक तेज़ निकली। जो इवेंट एक-दूसरे पर निर्भर हैं उन्हें क्रम में रखिए, या हर एक में इतना संदर्भ भेजिए कि वह अकेले खड़ा हो सके।
वह एक चीज़ जो सब कुछ तय करती है
ऊपर की हर गड़बड़ी एक दोपहर में ठीक हो सकती है। यह वाली नहीं।
जब खिलाड़ी ट्रैकिंग लिंक से आता है, तो उस लिंक पर मौजूद आइडेंटिफ़ायर रजिस्ट्रेशन के वक़्त खिलाड़ी के रिकॉर्ड पर सहेजा जाना चाहिए। किसी सेशन में नहीं। किसी कुकी में नहीं। आपके डेटाबेस की उस पंक्ति पर जो उस अकाउंट को दर्शाती है, ईमेल पते के बगल में, उसी ट्रांज़ैक्शन में जो उसे बनाता है।
अगर यह नहीं होता, तो आगे कुछ भी अट्रिब्यूट नहीं किया जा सकता। खिलाड़ी तीन हफ़्ते बाद डिपॉज़िट करता है, आपका बैकएंड तकनीकी रूप से एकदम सही पोस्टबैक भेजता है, और उसमें कोई आइडेंटिफ़ायर नहीं होता, क्योंकि भेजने के लिए कुछ है ही नहीं। कितनी भी पोस्टबैक ट्यूनिंग इसे ठीक नहीं करती। आप रिपोर्टिंग की समस्या डीबग नहीं कर रहे, आप रजिस्ट्रेशन की समस्या डीबग कर रहे हैं, और उसका इलाज साइन-अप फ़्लो में है।
दो जुड़ी हुई आदतें बहुत सारी बहसें बचाती हैं। आइडेंटिफ़ायर तब भी रखिए जब वैल्यू अजीब लगे, क्योंकि आप एक टोकन सहेज रहे हैं, उसे मान्य नहीं कर रहे। और उसे तीस दिन की जगह अकाउंट की पूरी उम्र तक रखिए, क्योंकि जो CPA क्वालिफ़ाइंग डिपॉज़िट पर देता है उसे उस लिंक की ज़रूरत उस पल पड़ती है जब डिपॉज़िट क्वालिफ़ाई करता है, और वह क्लिक के महीनों बाद हो सकता है। अगर आपकी तरफ़ क्वालिफ़ाइंग डिपॉज़िट और फ़र्स्ट-टाइम डिपॉज़िट की शब्दावली धुँधली है, तो स्कीमा लिखने से पहले FTD, NGR, CPA, CPL और CPR की शब्दावली पर दस मिनट देना सही रहेगा।
ट्रैफ़िक चलाने से पहले इसे टेस्ट करना
सही इंटीग्रेशन टेस्ट उबाऊ होता है और उसमें लगभग एक घंटा लगता है।
- असली ट्रैकिंग लिंक पर क्लिक कीजिए और सामान्य खिलाड़ी की तरह रजिस्ट्रेशन पूरा कीजिए। फिर अपने डेटाबेस में खिलाड़ी का रिकॉर्ड देखिए और पुष्टि कीजिए कि आइडेंटिफ़ायर उस पर है। अगर वह वहाँ नहीं है, तो रुक जाइए, क्योंकि उसके बाद सब नाटक है।
- असली पैसे से डिपॉज़िट कीजिए। छोटी रक़म चलेगी, EUR 20 काफ़ी है। टेस्ट-मोड पेमेंट अक्सर ठीक उसी कोड पाथ को छोड़ देती है जो इवेंट फ़ायर करता है, और इसी तरह इंटीग्रेशन स्टेजिंग में पास होकर पहले ही दिन फ़ेल होते हैं।
- जाँचिए कि डिपॉज़िट इवेंट एक बार आया, सही रक़म और सही करेंसी के साथ, और पेमेंट सबमिट होने के वक़्त नहीं बल्कि सेटल होने के बाद।
- वही इवेंट जान-बूझकर दोबारा भेजिए। उसे डुप्लिकेट के तौर पर पहचाना जाना चाहिए और दोबारा गिना नहीं जाना चाहिए।
- पूरी प्रक्रिया फ़ोन पर दोहराइए, और अगर आपके पास ऐप है तो एक बार डिपॉज़िट ब्राउज़र की जगह ऐप में करके भी।
एक इंजीनियर का एक घंटा और एक डिपॉज़िट, बनाम ऐसे एफ़िलिएट के साथ महीने भर की मिलान-कवायद जो पहले ही मान चुका है कि आप उसका ट्रैफ़िक काट रहे हैं। ट्रैकिंग लिंक QA वॉकथ्रू इसी टेस्ट का एफ़िलिएट वाला सिरा कवर करता है, और दोनों सिरे साथ चलाने से ही बेमेल तिमाही की जगह एक दोपहर में मिल जाता है।
AFFILIFY किसी ऑपरेटर से क्या उम्मीद करता है
इंटीग्रेशन रेफ़रेंस affilify.partners/docs पर है, एंडपॉइंट, पैरामीटर के नाम और स्वीकृत इवेंट टाइप के साथ। उसे किसी ब्लॉग पोस्ट की जगह वहीं पढ़िए, क्योंकि हम उसी पेज को अपडेट रखते हैं।
ढाँचा छोटा है। एक इवेंट नाम, वह आइडेंटिफ़ायर जो आपको क्लिक के वक़्त मिला था, एक रक़म और एक करेंसी, और साथ में आपकी key। रजिस्ट्रेशन, फ़र्स्ट-टाइम डिपॉज़िट, बाद के डिपॉज़िट और रेवेन्यू इवेंट अलग-अलग संदेश हैं, क्योंकि डील से जुड़ा कमीशन मॉडल तय करता है कि इनमें से कौन मायने रखता है, और कोई प्रोग्राम उस डेटा पर RevShare नहीं दे सकता जो उसे कभी मिला ही नहीं। अगर आप अब भी मॉडल चुन रहे हैं, तो CPA, RevShare और हाइब्रिड बताता है कि हर एक को आपकी तरफ़ से क्या चाहिए।
दो बातें साफ़ कह देना ज़रूरी है। हमारी तरफ़ अट्रिब्यूशन में परतदार फ़ॉलबैक हैं। वे बीमा हैं, योजना नहीं। रजिस्ट्रेशन पर सहेजा गया आइडेंटिफ़ायर वह हिस्सा है जो आपके नियंत्रण में है, तो उसे भेजिए। और ट्रैफ़िक की गुणवत्ता लगातार परखी जाती है, यानी कुछ कन्वर्ज़न आते ही क्रेडिट होने की जगह जाँच के दौरान रोके जाते हैं। वह अस्वीकृति नहीं है, और एफ़िलिएट को ख़ामोश ख़ालीपन की जगह उसकी स्थिति दिखती है।
जो ऑपरेटर आइडेंटिफ़ायर लौटाता है, सेटल हो चुके इवेंट एक बार रिपोर्ट करता है, और जिसे एक घंटे में असली डिपॉज़िट से टेस्ट किया जा सकता है, उसे रात ग्यारह बजे वाली कॉल कभी नहीं आएगी। यहाँ पूरी महत्वाकांक्षा बस इतनी है।
अक्सर पूछे जाने वाले सवाल
पोस्टबैक और पिक्सल में फ़र्क़ क्या है?
पिक्सल खिलाड़ी का ब्राउज़र तब फ़ायर करता है जब कोई पेज खुला हो। पोस्टबैक आपका अपना बैकएंड तब फ़ायर करता है जब इवेंट दर्ज होता है, और उसमें कोई ब्राउज़र शामिल नहीं होता। यही एक फ़र्क़ बाक़ी सब तय कर देता है: पोस्टबैक पर ऐड ब्लॉकर या ब्राउज़र की कुकी नीति का असर नहीं पड़ता, वह तब भी काम करता है जब खिलाड़ी लैपटॉप पर रजिस्टर करे और फ़ोन से डिपॉज़िट करे, और तब भी जब डिपॉज़िट किसी नेटिव ऐप के अंदर हो जहाँ कोई पेज लोड ही नहीं होता। वह वही रक़म रिपोर्ट करता है जो आपके सिस्टम ऑफ़ रिकॉर्ड में है, वह नहीं जो किसी पेज को संयोग से पता थी।
क्या हम पोस्टबैक के साथ बैकअप के तौर पर पिक्सल रख सकते हैं?
रख सकते हैं, पर साफ़ रहिए कि उसकी क़ीमत क्या है। पिक्सल सिर्फ़ उन्हीं इवेंट की पुष्टि करेगा जो उसे दिखते हैं, और वह असल में हुई घटनाओं का एक हिस्सा भर है, और उस हिस्से का आकार आपको दिखता ही नहीं। उसे डेवलपमेंट के दौरान एक ही सेशन की सैनिटी जाँच मानिए, सच्चाई का दूसरा स्रोत नहीं, और भुगतान का मिलान उससे कभी मत कीजिए। अगर एक ही इवेंट पर दोनों फ़ायर होते हैं, तो आपके प्लेटफ़ॉर्म को आपकी तरफ़ से एक स्थिर, अनोखा रेफ़रेंस चाहिए ताकि जोड़ी को दो नहीं, एक कन्वर्ज़न माना जाए।
हमारे पोस्टबैक फ़ायर हो रहे हैं पर कुछ भी अट्रिब्यूट नहीं होता। क्यों?
लगभग हमेशा इसलिए कि रजिस्ट्रेशन के वक़्त क्लिक आइडेंटिफ़ायर खिलाड़ी के रिकॉर्ड पर सहेजा ही नहीं गया। पोस्टबैक सही तरीक़े से, सही समय पर, वैध key के साथ निकलता है, और उसमें मैच करने लायक़ कुछ होता ही नहीं। पहले अपने डेटाबेस में किसी एक असली खिलाड़ी की पंक्ति जाँचिए। अगर आइडेंटिफ़ायर वहाँ ग़ायब है, तो बग पोस्टबैक कोड में नहीं, आपके साइन-अप फ़्लो में है, और कितनी भी रीट्राई लॉजिक या एंडपॉइंट ट्यूनिंग नतीजा नहीं बदलेगी।
ट्रैफ़िक चलाने से पहले पोस्टबैक इंटीग्रेशन कैसे टेस्ट करें?
असली ट्रैकिंग लिंक पर क्लिक कीजिए, खिलाड़ी की तरह रजिस्टर कीजिए, और पुष्टि कीजिए कि आइडेंटिफ़ायर अकाउंट की पंक्ति पर पहुँचा। फिर असली पैसे से डिपॉज़िट कीजिए, क्योंकि टेस्ट-मोड पेमेंट अक्सर ठीक उसी कोड पाथ को छोड़ देती है जो इवेंट फ़ायर करता है। पुष्टि कीजिए कि डिपॉज़िट एक बार आया, सही रक़म और करेंसी के साथ, पेमेंट सेटल होने के बाद। फिर वही इवेंट जान-बूझकर दोबारा भेजिए और पुष्टि कीजिए कि वह डुप्लिकेट मानकर हटा दिया गया। इसके बाद यही सब फ़ोन पर दोहराइए, और अगर ऐप है तो ऐप में भी। एक घंटा, और एक छोटा डिपॉज़िट।
