नोटिफिकेशन्स के लिए ऑप्ट-इन का प्रमाण: चैनल दर चैनल सहमति मॉडल
प्रति-चैनल नोटिफिकेशन के लिए ऑप्ट-इन का प्रमाण सेट करें: स्पष्ट सबूत संग्रहीत करें और बदलाव व ऑडिट बिना उपयोगकर्ता या टीम को भ्रमित किए संभालें।

सहमति और प्रूफ-ऑफ-ऑप्ट-इन का असली मतलब
सहमति का मतलब है कि एक व्यक्ति स्पष्ट रूप से किसी विशिष्ट चैनल पर किसी विशिष्ट प्रकार का संदेश प्राप्त करने के लिए राज़ी हुआ। यह फर्क मायने रखता है क्योंकि ईमेल, SMS और पुश नोटिफिकेशन उपयोगकर्ताओं, कैरियर्स, ऐप प्लेटफ़ॉर्म या गोपनीयता कानूनों द्वारा समान रूप से नहीं देखे जाते। कोई व्यक्ति शिपिंग अपडेट ईमेल में मंजूर कर सकता है, पर विपणन SMS से आश्चर्यचकित महसूस कर सकता है।
प्रूफ़ वह है जो आप बाद में दिखा सकते हैं जब कोई पूछे, “आपने मुझे क्यों संदेश भेजा?” प्रूफ-ऑफ-ऑप्ट-इन सिर्फ किसी फ़ॉर्म का स्क्रीनशॉट या “यूज़र सब्सक्राइब हुआ” जैसा अस्पष्ट नोट नहीं है। यह एक रिकॉर्ड है जो आपको trace करने देता है कि किसने सहमति दी, किसके लिए दी, यह कब हुआ और कैसे हुआ।
जब रिकॉर्ड कमजोर होते हैं, तो समस्याएँ जल्दी दिखती हैं। सपोर्ट अनपेक्षित संदेश समझा नहीं पाता, रिफंड बढ़ते हैं, और लोग भरोसा खो देते हैं। अगर शिकायत बढ़ती है, तो यह साबित करना भी मुश्किल हो सकता है कि संदेश भेजने के समय सहमति मौजूद थी — और अक्सर यही विवरण सबसे ज़्यादा मायने रखता है।
सहमति सिर्फ एक पॉपअप से अधिक है
कई टीमें UI प्रॉम्प्ट (चेकबॉक्स, टॉगल, OS परमिशन डायलॉग) पर ध्यान देती हैं और इसके पीछे के ऑडिट ट्रेल को भूल जाती हैं। असली लक्ष्य ट्रस्ट और ट्रेसेबिलिटी है। एक स्पष्ट कॉन्सेंट मॉडल हर बार सही काम करना आसान बनाता है, भले ही कर्मचारी बदलें, सिस्टम माइग्रेट हों, या उपयोगकर्ता अपना मन बदलें।
एक व्यावहारिक कॉन्सेंट रिकॉर्ड कुछ बुनियादी प्रश्नों का जवाब देता है:
- कौन सहमत हुआ (यूज़र आइडेंटिफ़ायर और अगर प्रासंगिक हो तो गंतव्य जैसे ईमेल पता या फोन नंबर)
- क्या के लिए सहमत हुआ (चैनल और संदेश प्रकार या उद्देश्य)
- कब यह हुआ (UTC में टाइमस्टैम्प, या टाइमस्टैम्प प्लस टाइमज़ोन)
- कैसे यह हुआ (कहाँ अनुरोध दिखाया गया और उपयोगकर्ता ने क्या देखा, संस्करण और भाषा सहित)
- प्रसंग जो विवादों को सुलझाने में मदद करे (उदा., ऐप/डिवाइस जानकारी या IP पता)
यह क्यों भरोसा बनाता है
उपयोगकर्ता उन्हीं पलों के आधार पर आपको आंकते हैं जो उन्हें घुसीली लगती हैं: देर रात की पुश, एक अचानक SMS चार्ज, या एक ईमेल जिसका उन्हें याद न होना कि उन्होंने साइन अप किया था। अगर आप सही कॉन्सेंट इवेंट तुरंत दिखा सकते हैं और सरल भाषा में समझा सकते हैं, तो आप टिकट्स को शांत और सुसंगत तरीके से सुलझा पाएंगे।
यदि आप AppMaster जैसे प्लेटफ़ॉर्म पर बना रहे हैं, तो शुरुआत से ही कॉन्सेंट को पहला दर्जा का डेटा मानें: संरचित, खोजने योग्य, और दुर्घटनावश ओवरराइट होने से कठिन।
नोटिफिकेशन के प्रकार और नियमों का भिन्न होना क्यों ज़रूरी है
सभी नोटिफिकेशन समान नहीं होते क्योंकि वे अलग उद्देश्यों की पूर्ति करते हैं और अलग स्थानों पर लोगों तक पहुँचते हैं। अगर आप नोटिफिकेशन के लिए विश्वसनीय प्रूफ ऑफ़ ऑप्ट-इन चाहते हैं, तो संदेशों को इरादा और चैनल के हिसाब से लेबल करने से शुरुआत करें।
ट्रांज़ैक्शनल बनाम मार्केटिंग (साफ़ मतलब)
ट्रांज़ैक्शनल संदेश कुछ उस घटना से ट्रिगर होते हैं जो उपयोगकर्ता ने की, या ऐसी जानकारी जो सेवा उपयोग करने के लिए आवश्यक हो। उदाहरण: पासवर्ड रीसेट, रसीदें, सुरक्षा अलर्ट, या खाता स्थिति में बदलाव। लोग इन्हें अपेक्षित मानते हैं, और इन्हें ब्लॉक करने से उत्पाद अनुभव टूट सकता है।
मार्केटिंग संदेश प्रचारात्मक होते हैं। उदाहरण: न्यूज़लेटर्स, उत्पाद ऑफ़र, विन-बैक अभियान, या “यहाँ क्या नया है” जैसे ब्लास्ट। इन्हें वैकल्पिक होना चाहिए और उपयोगकर्ता बिना कोर फ़ीचर्स खोए “नहीं” कह सकें।
एक व्यावहारिक नियम: अगर संदेश वह है जो उपयोगकर्ता ने मांगा है, तो सम्भवतः वह ट्रांज़ैक्शनल है। अगर उद्देश्य एंगेजमेंट या सेल बढ़ाना है, तो वह मार्केटिंग है।
चैनल: ईमेल, SMS, पुश और इन-ऐप
चैनल अलग व्यवहार करते हैं, इसलिए सहमति और सबूत आमतौर पर चैनल-वार ट्रैक किए जाते हैं, न कि एक ग्लोबल चेकबॉक्स के रूप में।
ईमेल सामान्यतः ट्रांज़ैक्शनल और मार्केटिंग दोनों में इस्तेमाल होता है। कई उत्पाद ट्रांज़ैक्शनल ईमेल को बेसिक सर्विस डिलीवरी का हिस्सा मानते हैं, पर मार्केटिंग ईमेल के लिए आम तौर पर स्पष्ट "हाँ" और रोकने का एक साफ़ तरीका चाहिए।
SMS अधिक घुसपैठपूर्ण महसूस होता है, कुछ सेटअप में खर्चीला हो सकता है, और इसके साथ कैरियर और प्रदाता नियम सख्त होते हैं। SMS सहमति को एक अलग निर्णय के रूप में लें।
पुश नोटिफिकेशन डिवाइस OS प्रॉम्प्ट और उपयोगकर्ता सेटिंग्स से नियंत्रित होते हैं। आपकी ऐप के पास डिवाइस टोकन हो सकता है, पर उपयोगकर्ता कभी भी पुश डिसेबल कर सकता है। इससे यह बदलता है कि आप क्या भेज सकते हैं।
इन-ऐप संदेश उत्पाद UX नियमों का पालन करते हैं, पर उपयोगकर्ता फिर भी नियंत्रण की उम्मीद करते हैं, खासकर प्रचारात्मक बैनरों के लिए।
क्योंकि आवश्यकताएँ देश और प्रदाता नीति के अनुसार भिन्न होती हैं, कई टीमें एक सरल बेसलाइन चुनती हैं: प्रति-चैनल मार्केटिंग के लिए स्पष्ट ऑप्ट-इन, और किसी भी विवादास्पद चीज़ के लिए सावधान दस्तावेज़ीकरण।
“सॉफ्ट ऑपट-इन” आमतौर पर एक ग्रे एरिया है। व्यवहार में, इसका मतलब अक्सर है कि आप किसी मौजूदा रिश्ते के कारण किसी को संदेश भेजते हैं (उदा., वे ग्राहक बन गए) भले ही उन्होंने समर्पित मार्केटिंग बॉक्स न टिका हो। तब भी दस्तावेज़ीकरण मायने रखता है: रिश्ता क्या था, आप क्या भेजे, और व्यक्ति कैसे opt-out कर सकता है।
अगर आप इसे AppMaster में बना रहे हैं, तो मॉडल को सीधा रखें: एक उपयोगकर्ता मार्केटिंग ईमेल के लिए ऑप्ट-इन कर सकता है पर SMS से ऑप्ट-आउट रह सकता है, जबकि ज़रूरी ट्रांज़ैक्शनल अलर्ट मिलते रहते हैं। यह अलगाव अनुपालन और भरोसा दोनों आसान बनाता है।
चैनल-वार ऑप्ट-इन मॉडल कैसे करें (क्या डेटा स्टोर करें)
अगर आप नोटिफिकेशन के लिए विश्वसनीय प्रूफ ऑफ-ऑप्ट-इन चाहते हैं, तो आपका डेटा मॉडल विशेष होना चाहिए। “यूज़र सहमत हुआ” पर्याप्त नहीं है। सहमति चैनल (ईमेल, SMS, पुश) और उद्देश्य (मार्केटिंग, उत्पाद अपडेट, सुरक्षा अलर्ट) पर निर्भर करती है।
एक व्यावहारिक तरीका है कि सहमति को अपना रिकॉर्ड मानें, न कि यूज़र प्रोफ़ाइल में छिपा हुआ चेकबॉक्स। एक उपयोगकर्ता के कई कॉन्सेंट रिकॉर्ड हो सकते हैं, और हर रिकॉर्ड को एकल चैनल और एकल उद्देश्य से मैप करना चाहिए।
Trouble से बचाने के लिए न्यूनतम फ़ील्ड
user + channel + purpose + status जैसा Consent रिकॉर्ड रखें। फिर वे विवरण जोड़ें जो बाद में रिकॉर्ड को समझने योग्य बनाते हैं।
कम से कम, अधिकांश उत्पादों को चाहिए:
- user_id
- channel (email, sms, push - इसे फिक्स्ड लिस्ट रखें)
- purpose (marketing, product_updates, account_security - फिक्स्ड लिस्ट)
- status (opted_in, opted_out, pending, unknown)
- opted_in_at / opted_out_at
बाद में अनुमान लगाने से बचने के लिए, यह भी कैप्चर करें कि यह कहाँ हुआ और आख़िरी बार कब पुष्टि हुई:
- source (signup_form, settings_page, checkout, support_action)
- last_confirmed_at (पॉलिसी बदलने के बाद उपयोगी)
कॉन्सेंट टेक्स्ट स्नैपशॉट्स (ताकि आप दिखा सकें कि उन्हें क्या दिखा)
कॉन्सेंट सिर्फ एक क्लिक नहीं है — यह किसी विशेष शब्दावली के लिए सहमति है। एक consent_text_version (या छोटा snapshot_id) स्टोर करें जो उस समय दिखाए गए सटीक टेक्स्ट की ओर इशारा करे।
स्नैपशॉट को सरल रखें: संदेश, भाषा/लोकल और कब सक्रिय था। यदि कॉपी बदलती है, तो पुरानी को एडिट न करें—नई वर्ज़न बनाएं।
एक कॉम्पैक्ट उदाहरण कुछ ऐसा दिखता है:
{
"user_id": "u_123",
"channel": "sms",
"purpose": "marketing",
"status": "opted_in",
"opted_in_at": "2026-01-25T10:15:00Z",
"source": "checkout",
"consent_text_version": "sms_mkt_v3",
"last_confirmed_at": "2026-01-25T10:15:00Z"
}
अगर आप AppMaster के साथ बनाते हैं, तो यह साफ़ तरीके से Data Designer मॉडल (Consent और ConsentTextSnapshot) में मैप होता है और Business Process Editor में सरल लॉजिक। मुख्य लक्ष्य सुसंगतता है: हर चैनल और उद्देश्य एक ही संरचना का पालन करे ताकि रिपोर्टिंग और ऑडिट घड़ी की तरह काम करें न कि घबराहट में बदल जाएँ।
क्या साक्ष्य (evidence) गिना जाता है, और क्या कैप्चर करें
“एविडेंस” कुछ भी हो सकता है जो बाद में दो प्रश्नों का उत्तर देता है: उपयोगकर्ता ने क्या सहमति दी, और उन्होंने कैसे सहमति दी। प्रूफ ऑफ-ऑप्ट-इन के लिए आप ऐसी रिकॉर्ड्स चाहते हैं जो विशिष्ट, टाइम-स्टैम्पेड और किसी वास्तविक उपयोगकर्ता क्रिया से जुड़ी हों (सिर्फ consent = true नहीं)।
शुरू करें उस क्रिया के साथ। अगर कॉन्सेंट एक चेकबॉक्स, टॉगल, या डबल ऑप्ट-इन लिंक से दिया गया, तो इंटरैक्शन और उपयोगकर्ता को दिखाई गई सटीक टेक्स्ट (या वर्ज़न ID) स्टोर करें। स्क्रीनशॉट स्केल नहीं करते; एक कॉन्सेंट कॉपी/वर्ज़न लेबल काफी होता है।
नमूना विवरण जो मोमेंट को पुनरुत्पादन योग्य बनाते हैं:
- एक्शन प्रकार (बॉक्स चेक किया, टॉगल ऑन किया, पुष्टि लिंक पर क्लिक किया)
- UTC में टाइमस्टैम्प
- चैनल और उद्देश्य
- कॉन्सेंट टेक्स्ट वर्ज़न या पॉलिसी/वर्ज़न आइडेंटिफायर
- पेज या स्क्रीन नाम और भाषा
तकनीकी संदर्भ सतर्कता से जोड़ें। यह विवाद सुलझाने में मदद कर सकता है, पर गोपनीयता जोखिम भी बढ़ता है। वेब के लिए IP और यूज़र एजेंट कभी-कभी उपयोगी होते हैं। मोबाइल के लिए, एक डिवाइस ID उपयोग पहचान मॉडल का हिस्सा हो सकता है, पर “बस किसी भी स्थिति के लिए” अतिरिक्त आइडेंटिफ़ायर्स इकट्ठा करने से बचें।
अगर आप प्रदाताओं के माध्यम से भेजते हैं, तो उनके आइडेंटिफ़ायर्स भी रखें। प्रदाता मैसेज IDs (ईमेल, SMS, पुश) दिखाने में मदद करते हैं कि एक विशिष्ट कॉन्सेंट रिकॉर्ड का उपयोग किसी विशिष्ट भेजने के लिए हुआ था, जब शिकायत या डिलीवेरेबिलिटी मामलों की जाँच हो।
अंत में, तय करें क्या स्टोर नहीं करना है। अच्छा साक्ष्य सब कुछ एकत्र करना नहीं है। टेम्पलेट्स पर्याप्त हों तो पूरा संदेश कंटेंट स्टोर करने से बचें, और अप्रासंगिक डिवाइस डेटा न रखें। AppMaster में इस फ्लो को बनाते समय, evidence फ़ील्ड्स को संवेदनशील मानें: उन्हें सुसंगत रखें और केवल उपयुक्त रोल्स को देखें।
चरण-दर-चरण: एक कॉन्सेंट और एविडेंस फ्लो सेट करें
शुरू करें यह तय करके कि आप किसके लिए अनुमति पूछेंगे। कॉन्सेंट केवल "नोटिफिकेशन हाँ/नहीं" नहीं है। लोग अक्सर रसीदें चाहते हैं पर प्रचार नहीं। अपने नोटिफिकेशन उद्देश्यों को साधारण भाषा में लिखें, फिर हर उद्देश्य को उन चैनलों से मैप करें जिन्हें आप उपयोग करेंगे।
चैनल के अनुसार कॉन्सेंट स्क्रीन डिज़ाइन करें बजाय एक मिश्रित प्रॉम्प्ट के। हर स्क्रीन में बताएं कि क्या भेजा जाएगा और बाद में कैसे बदला जा सकता है। शब्दावली स्पष्ट रखें: “Order receipts by email” जैसी पंक्ति “Transactional messages” से ज़्यादा स्पष्ट है।
एक व्यावहारिक फ्लो इस तरह दिखता है:
- उद्देश्यों को परिभाषित करें और तय करें किसके लिए ऑप्ट-इन अनिवार्य है (उदा., मार्केटिंग बनाम रसीदें)
- जिस पल पर इसका अर्थ बने वहाँ पूछें (चेकआउट पर रसीदों के लिए, ऑनबोर्डिंग के बाद टिप्स के लिए)
- सुरक्षित डिफ़ॉल्ट चुनें (मार्केटिंग के लिए off; केवल सेवा देने के लिए आवश्यक चीज़ों के लिए on)
- जब उपयोगकर्ता टॉगल बदलता है, तो तुरंत एक इवेंट रिकॉर्ड लिखें (किसने, क्या बदला, कब और कहाँ)
- भेजने व मार्ग में कॉन्सेंट चेक रखें ताकि कुछ भी बाईपास न हो, जिसमें एडमिन टूल्स और ऑटोमेटेड जॉब्स शामिल हों
यह इवेंट रिकॉर्ड बाद में कॉन्सेंट साबित करने के लिए काम आता है। इसे बैंक रसीद की तरह मानें: append-only और बाद में एडिट करना मुश्किल। AppMaster में, टीमें अक्सर तेज़ जाँच के लिए एक current-state तालिका रखती हैं और हर अपडेट के लिए एक मेल खाता audit एंट्री Business Process के माध्यम से लिखती हैं।
रिलीज़ से पहले, ऑप्ट-आउट और किनारे मामलों का टेस्ट करें। आप चाहते हैं कि परिणाम वही हो चाहे उपयोगकर्ता वेब, मोबाइल या अकाउंट डिलीशन फ्लो के जरिए सेटिंग बदलें। विशेष ध्यान दें:
- एक डिवाइस पर opt-out जबकि दूसरे पर login होना
- फोन नंबर या ईमेल बदलना
- ऐप रीइंस्टॉल करना (पुश टोकन बदलते हैं)
- गेस्ट चेकआउट बनाम लॉग्ड-इन उपयोगकर्ता
- डिलीटेड या निष्क्रिय खातों के लिए (कोई संदेश न भेजना, पर आवश्यकतानुसार साक्ष्य रखना)
ऑप्ट-आउट, परिवर्तन और अकाउंट लाइफसाइकल को संभालना
ऑप्ट-इन आधा काम है। लोग अपना मन बदलते हैं, डिवाइस बदलते हैं, ईमेल एक्सेस खो देते हैं, या सपोर्ट से सेटिंग्स ठीक करने के लिए कहते हैं। अगर ऑप्ट-आउट मुश्किल है, तो उपयोगकर्ता जल्दी नोटिस करेंगे और आपका “प्रूफ” संदिग्ध दिखेगा।
ऑप्ट-आउट को ऑप्ट-इन जितना आसान बनाएं। उसे वहीं रखें जहाँ लोग उम्मीद करते हैं: नोटिफिकेशन सेटिंग्स, मार्केटिंग ईमेल के फुटर में, और SMS के लिए जहाँ आवश्यक हो वहाँ स्पष्ट STOP निर्देश। इसे “सपोर्ट से संपर्क करें” जैसे कदमों के पीछे न छुपाएं।
जब आप एक पुष्टिकरण संदेश भेजते हैं, तो इसे न्यूनतम रखें और केवल तब उपयोग करें जब ज़रूरी हो (या कानूनी रूप से आवश्यक हो)। एक बार का “आपने अनसब्सक्राइब कर लिया” ईमेल उपयोगी हो सकता है। बार-बार फॉलो-अप जैसे “क्या आप सुनिश्चित हैं?” स्पैम जैसा लग सकता है। SMS के लिए, STOP के बाद एक बार की पुष्टिकरण आमतौर पर अपेक्षित है। पुश के लिए, शांत इन-ऐप स्थिति परिवर्तन ही अक्सर पर्याप्त होता है।
अकाउंट लाइफसाइकल उन जगहों में से है जहाँ कई सिस्टम टूटते हैं। पहले से योजना बनाएं:
- Logged-out users: अगर कोई व्यक्ति लॉग्ड आउट रहते हुए ईमेल से अनसब्सक्राइब होता है, तो उसे सत्र के बजाय ईमेल पते के खिलाफ रिकॉर्ड करें।
- Deleted accounts: डिलीशन अनुरोधों का सम्मान करें, पर एक न्यूनतम do-not-contact रिकॉर्ड रखें जब अनुमति हो ताकि वे गलती से बाद में फिर न जोड़े जाएँ।
- Merged accounts: कभी भी मान न लें कि सहमति ऑटोमेटिक्ली स्थानांतरित हो; टकरावों को गोपनीयता-मैत्रीपूर्ण विकल्प से सुलझाएँ।
- Device changes: नया फोन नया पुश टोकन बनाता है; टोकन तकनीकी डेटा मानेँ और उपयोगकर्ता की पुश सहमति नियंत्रक नियम हो।
रिटेंशन नियम लिखें और उन्हें सुसंगत रूप से लागू करें। शिकायतों, ऑडिट्स या चार्जबैक का उत्तर देने के लिए कॉन्सेंट लॉग पर्याप्त समय तक रखें, पर अधिक व्यक्तिगत डेटा न रखें जितना ज़रूरी हो। अगर उपयोगकर्ता डेटा मिटाना अनिवार्य है, तो तय करें क्या अनोनिमाइज़ किया जा सकता है (उदा., ईमेल हैश करना) ताकि इवेंट इतिहास उपयोगी बना रहे।
सपोर्ट-प्रेरित परिवर्तनों के लिए एक स्पष्ट आंतरिक प्रक्रिया रखें। कौन कॉन्सेंट एडिट कर सकता है उसे सीमित करें, एक कारण कोड (जैसे “user requested via chat”) आवश्यक बनाएं, और रिकॉर्ड करें किसने परिवर्तन किया और कब। AppMaster में टीमें अक्सर एक छोटा PostgreSQL टेबल कॉन्सेंट इवेंट्स के लिए और दूसरा सपोर्ट एक्शन्स के लिए बनाती हैं, फिर Business Process के माध्यम से बदलाव लागू करती हैं और हर बार एक ऑडिट एंट्री लिखती हैं।
भरोसा (और आपका ऑडिट ट्रेल) तोड़ने वाली सामान्य गलतियाँ
कई टीमें एक कॉन्सेंट टॉगल जोड़ती हैं, फिर बाद में शॉर्टकट्स से उसे तोड़ देती हैं। परिणाम predictable है: उपयोगकर्ता ठगे हुए महसूस करते हैं, और जब आपको ऑप्ट-इन का प्रमाण दिखाना होता है, तो रिकॉर्ड टिक नहीं करते।
एक आम फंदा है कॉन्सेंट को एक वैश्विक हाँ/नहीं मानना। ईमेल, SMS, और पुश की अलग उम्मीदें और कानूनी नियम होते हैं। marketing_ok=true जैसे एक फ्लैग से बहुत आसान हो जाता है किसी ऐसे चैनल पर भेजना जिसके लिए उपयोगकर्ता ने सहमति नहीं दी।
एक और भरोसा-खत्म करने वाली चीज़ अस्पष्ट विकल्प डिज़ाइन है। पहले से चेक किए गए बॉक्स, छोटे डिस्क्लेमर, या कंट्रोल्स जो कई उद्देश्यों को बाँधते हैं (“Product updates and offers”) उपयोगकर्ताओं को भ्रमित करते हैं। आपका DB कह सकता है “consented”, पर सपोर्ट इनबॉक्स एक अलग कहानी बताएगा।
वे गलतियाँ जो सबसे अक्सर भरोसा और साक्ष्य दोनों तोड़ती हैं:
- केवल नवीनतम कॉन्सेंट स्टेट सेव करना और इतिहास हटा देना
- उपयोगकर्ता ने जो सटीक कॉन्सेंट टेक्स्ट स्वीकार किया उसे स्टोर न करना (और वर्ज़न न रखना)
- "user opted in" लॉग करना बिना चैनल, टाइमस्टैम्प और स्रोत के
- मैनुअल अभियान चलाना जो कॉन्सेंट चेक्स को बायपास कर दे
- गलत सेटिंग को डेटाबेस एडिट करके "ठीक" कर देना, जिससे जो हुआ वह मिट जाए
एक सामान्य विफलता कुछ ऐसी दिखती है: उपयोगकर्ता ऑनबोर्डिंग में पुश सक्षम करता है, बाद में सेटिंग्स में मार्केटिंग SMS बंद कर देता है, फिर अनचाहे टेक्स्ट की शिकायत करता है। अगर आपका सिस्टम पुराना रिकॉर्ड ओवरराइट कर चुका है, तो आप नहीं दिखा पाएँगे कि उन्होंने क्या देखा या कब ऑप्ट-आउट किया। और इससे भी बुरा, आप यह साबित नहीं कर पाएँगे कि SMS सहमति कभी थी।
कॉन्सेंट को वित्तीय इतिहास की तरह रखें: तेज़ जाँच के लिए current state रखें, पर अतीत न खोने दें। सहायता के लिए गार्डरेल सरल हैं: चैनल और उद्देश्य के अनुसार कॉन्सेंट अलग रखें, कॉन्सेंट टेक्स्ट ID और लोकल रखें, हर भेजने के पाथ में वही कॉन्सेंट-चेक लागू करें, और पुराने इवेंट्स को बदलने के बजाय नए इवेंट्स लिखें।
अगर आप AppMaster में बना रहे हैं, तो कॉन्सेंट इवेंट्स को अपना टेबल बनाएं और साझा Business Process में चेक लागू करें ताकि ऑटोमेटेड नोटिफिकेशन और ऑपरेटर एक्शन्स एक ही नियमों का पालन करें।
शिप करने से पहले त्वरित जाँच
असल नोटिफिकेशन भेजने से पहले अपने कॉन्सेंट ट्रेल का उसी तरह परीक्षण करें जैसे आप पेमेंट्स टेस्ट करते हैं। अगर आप यह नहीं बता सकते कि किसने ऑप्ट-इन किया, किस चैनल के लिए, और किस शब्दावली के तहत, तो आप अनुमान पर भरोसा कर रहे हैं।
हर चैनल (ईमेल, SMS, पुश) के लिए पक्का करें कि आप वह मोमेंट दिखा सकते हैं जब उपयोगकर्ता ने ऑप्ट-इन किया और कहाँ हुआ। “कहाँ” का मतलब एक विशिष्ट स्क्रीन या फॉर्म नाम होना चाहिए, और यह भी दर्ज होना चाहिए कि यह signup, settings, checkout, या support था।
यह भी सुनिश्चित करें कि आप कॉन्सेंट शब्दावली को रिप्ले कर सकें। सिर्फ "marketing=true" स्टोर करना पर्याप्त नहीं है। टेक्स्ट वर्ज़न (या टेम्पलेट ID) और उपयोगकर्ता को दिखाए गए भाषा को स्टोर करें। अगर कॉपी बाद में बदली, तो पुराने वर्डिंग वाले लोगों के लिए पुरानी कॉपी की ज़रूरत पड़ेगी।
एक छोटा प्री-शिप चेकलिस्ट जो अधिकांश मुद्दों को पकड़ता है:
- आप प्रत्येक ऑप्ट-इन के लिए टाइमस्टैम्प, स्रोत (web, iOS, Android), और UI स्थान दिखा सकते हैं।
- आप उस समय दिखाई गई सटीक कॉन्सेंट वर्डिंग और भाषा पुनःप्राप्त कर सकते हैं।
- नवीनतम ऑप्ट-आउट सब कुछ ओवरराइड करता है और हर जगह (कतारबद्ध जॉब्स सहित) पर परिलक्षित होता है।
- सपोर्ट दो मिनट से कम समय में "मैंको क्यों यह मिला?" का जवाब दे सकता है एक ही उपयोगकर्ता व्यू से।
- कॉन्सेंट लॉग एडिट नहीं किए जा सकते और एक्सेस केवल अधिकृत रोल्स तक सीमित है।
एक ड्रिल चलाएँ: एक सहकर्मी वेब पर ऑप्ट-इन करे, मोबाइल पर ऑप्ट-आउट करे, फिर सपोर्ट से स्पष्टीकरण माँगे। अगर जवाब के लिए कच्चे तालिकाओं या कई टूल्स में खोदने की ज़रूरत पड़े, तो उपयोगकर्ताओं को भी वही झंझट लगेगा।
AppMaster पर बना रहे हैं तो कॉन्सेंट एविडेंस को अपना डेटा मॉडल और प्रोसेस मानें, न कि एक साइड-एफेक्ट। एक समर्पित कॉन्सेंट लॉग एंटिटी और सपोर्ट तथा ऑडिटर्स के लिए एक सरल इंटरनल व्यू काफी उपयोगी होता है, खासकर अगर आप एक्सपोर्ट के अधिकार सीमित कर दें।
उदाहरण परिदृश्य: एक उपयोगकर्ता, तीन चैनल, बदलती पसंदें
Mina आपकी वेबसाइट पर एक खाता बनाती है ताकि ऑर्डर्स ट्रैक कर सके। साइनअप के दौरान उसे ईमेल, SMS, और पुश के लिए अलग विकल्प दिखाई देते हैं। वह ऑर्डर अपडेट के लिए पुश स्वीकार करती है (जब वह ऐप इंस्टॉल कर लेती है), मार्केटिंग ईमेल को बंद रखती है, और SMS को अनचेक छोड़ती है।
एक हफ्ते बाद, वह मोबाइल ऐप इंस्टॉल करती है और साइन-इन करती है। ऐप OS-लेवल परमिशन के लिए पुश पूछता है और वह स्वीकार करती है। यहाँ कई टीमें भ्रमित हो जाती हैं: OS परमिशन आपके व्यवसायिक कॉन्सेंट के बराबर नहीं है। आप दोनों को अलग रिकॉर्ड करना चाहेंगे ताकि ऑडिट के दौरान आपका ऑप्ट-इन प्रूफ स्पष्ट रहे।
नीचे Mina की कहानी का समयक्रम और सपोर्ट को क्या साफ़ टाइमलाइन दिखनी चाहिए, उसका विवरण है।
टाइमलाइन और एविडेंस स्नैपशॉट्स
- वेब साइनअप (दिन 1)
आप वेब पर उसने क्या चुना (या नहीं चुना) और अनुरोध का संदर्भ स्टोर करते हैं।
- मोबाइल इंस्टॉल और पुश परमिशन (दिन 8)
आप डिवाइस टोकन और OS परमिशन परिणाम, Mina के खाते से जुड़ा हुआ, और इन-ऐप दिखाई गई सटीक प्रॉम्प्ट वर्ज़न स्टोर करते हैं।
- फोन नंबर बदलना (दिन 20)
वह डिलीवरी समन्वय के लिए नया फोन नंबर जोड़ती है। आप इसे नए SMS गंतव्य के रूप में मानते हैं और ताज़ा SMS ऑप्ट-इन की आवश्यकता रखते हैं। पुराने नंबर से सहमति स्वतः न ले लें।
- SMS रद्द (दिन 35)
वह STOP रिप्लाई करती है या सेटिंग्स में SMS बंद कर देती है। आप ऑप्ट-आउट इवेंट स्टोर करते हैं और तुरंत भेजना रोक देते हैं।
एविडेंस रिकॉर्ड कैसा दिख सकता है
नीचे एक साधारणीकृत उदाहरण है जो सपोर्ट पढ़ सकता है जब Mina कहे, “मैंने कभी SMS के लिए सहमति नहीं दी।”
[
{
"ts": "2026-01-02T10:14:22Z",
"user_id": "u_123",
"channel": "email",
"purpose": "marketing",
"action": "no_opt_in",
"capture": {"surface": "web_signup", "form_version": "signup_v3"},
"evidence": {"ip": "203.0.113.10", "user_agent": "Chrome"}
},
{
"ts": "2026-01-09T08:03:11Z",
"user_id": "u_123",
"channel": "push",
"purpose": "order_updates",
"action": "opt_in",
"capture": {"surface": "ios_app", "prompt_version": "push_prompt_v2"},
"evidence": {"device_id": "d_77", "os_permission": "granted", "push_token": "..."}
},
{
"ts": "2026-01-21T16:40:05Z",
"user_id": "u_123",
"channel": "sms",
"purpose": "delivery_updates",
"action": "opt_in",
"capture": {"surface": "account_settings", "form_version": "sms_optin_v1"},
"evidence": {"phone": "+15551234567", "verification": "code_confirmed"}
},
{
"ts": "2026-02-05T09:12:44Z",
"user_id": "u_123",
"channel": "sms",
"purpose": "delivery_updates",
"action": "opt_out",
"capture": {"surface": "sms_reply", "keyword": "STOP"},
"evidence": {"phone": "+15551234567"}
}
]
AppMaster जैसे प्लेटफ़ॉर्म पर बनाते समय, आप Consent इवेंट्स को Data Designer में मॉडल कर सकते हैं और जब भी उपयोगकर्ता टॉगल टैप करे, कोड कन्फर्म करे, या ऐप परमिशन रिज़ल्ट प्राप्त करे तब Business Process के माध्यम से उन्हें अपेंड कर सकते हैं। मायने यह रखता है कि सपोर्ट तिथियाँ, सतहें और सटीक चुनाव दिखा सके, न कि अनुमान।
अगले कदम: इसे अपने प्रोडक्ट वर्कफ़्लो में बनाएं
कॉन्सेंट को एक checkbox न मानकर एक प्रोडक्ट फीचर समझें। नोटिफिकेशन के लिए प्रूफ ऑफ-ऑप्ट-इन रखने का सबसे आसान तरीका है कि इसे उसी वर्कफ़्लो में बनाएं जिसका आप संदेश भेजने, सपोर्ट टिकट हैंडल करने और ऑडिट चलाने के लिए उपयोग करते हैं।
शुरू करें एक न्यूनतम मॉडल से जो वर्तमान प्राथमिकता को ऐतिहासिक साक्ष्य से अलग करता है। एक साधारण स्कीमा जो अधिकांश उत्पादों में काम करता है:
- Users (पहचान और खाता स्थिति)
- ConsentPreferences (प्रति चैनल वर्तमान on/off, और आवश्यकता हो तो प्रति उद्देश्य)
- ConsentEvents (हर बदलाव के साथ टाइमस्टैम्प और संदर्भ)
- MessageSends (प्रत्येक भेजने का प्रयास, उस समय की कॉन्सेंट निर्णय सहित)
तय करें कौन क्या देख सकता है। कॉन्सेंट एविडेंस में IP पता, यूज़र एजेंट, फोन नंबर, या अन्य संवेदनशील विवरण हो सकते हैं, इसलिए रोल-आधारित एक्सेस के साथ लॉक करें। सपोर्ट को अक्सर एक कॉन्सेंट टाइमलाइन व्यू चाहिए, पर सिर्फ़ एक छोटा समूह इसे एक्सपोर्ट कर पाए।
एक छोटा इंटरनल व्यू बनाएं जो एक सवाल का तेज़ जवाब दे: “हमने इस उपयोगकर्ता से क्यों संपर्क किया?” यूज़र द्वारा खोजें, चैनल द्वारा फ़िल्टर करें, और जब ज़रूरत हो तो टाइमलाइन एक्सपोर्ट करना आसान बनाएं।
फिर कॉन्सेंट जाँचों को स्वचालित करें। हर भेजने से पहले एक ही लॉजिक कॉल हो: नवीनतम ConsentPreferences जाँचें, पुष्टि करें कि उस चैनल और उद्देश्य के लिए वैध ConsentEvent मौजूद है, और MessageSends में निर्णय रिकॉर्ड करें भले ही भेजना रोका गया हो।
अगर आप पहले से AppMaster इस्तेमाल कर रहे हैं, तो व्यवहारिक पैटर्न यह होता है कि कॉन्सेंट तालिकाओं को Data Designer में रखें और साझा Business Process में कॉन्सेंट गेट रखें जो किसी भी ईमेल, SMS, या पुश एक्शन से पहले चलता हो। इस तरह नियम वेब ऐप्स, बैकएंड जॉब्स और नेटिव मोबाइल ऐप्स में सुसंगत रहते हैं।
एक सरल नियम समय के साथ टिकता है: अगर कोई नोटिफिकेशन भेज सकता है बिना कॉन्सेंट चेक पास किए, तो एक बग अंततः शिप होगा।
सामान्य प्रश्न
कॉन्सेंट का मतलब है कि व्यक्ति स्पष्ट रूप से किसी विशिष्ट चैनल पर किसी विशिष्ट प्रकार का संदेश प्राप्त करने के लिए सहमत हुआ। प्रूफ-ऑफ-ऑप्ट-इन वह सबूत है जिसे आप बाद में दिखा सकें जो बताता है कि किसने सहमति दी, किसे दी, कब दी और कैसे रिकॉर्ड की गई।
हाँ। चूँकि चैनल-अनुभव और नियम अलग होते हैं, प्रत्येक चैनल और उद्देश्य के लिए कॉन्सेंट अलग से ट्रैक करें। एक सरल मॉडल: user के लिए, प्रति-चैनल और प्रति-उद्देश्य एक कॉन्सेंट रिकॉर्ड, स्पष्ट स्टेटस और टाइमस्टैम्प के साथ।
एक बुनियादी कॉन्सेंट रिकॉर्ड में होना चाहिए: उपयोगकर्ता आइडेंटिफायर, जब प्रासंगिक हो तो गंतव्य (ईमेल या फोन), चैनल, उद्देश्य, वर्तमान स्टेटस और स्टेटस बदलने का समय। जोड़ें: कैप्चर स्रोत और एक कॉन्सेंट टेक्स्ट वर्शन ताकि बाद में निर्णय स्पष्ट रूप से समझाया जा सके।
एक consent_text_version या स्नैपशॉट आइडेंटिफायर स्टोर करें जो उस समय दिखाए गए सटीक शब्द और भाषा से जुड़ा हो। कॉपी बदलने पर पुरानी वर्ज़न को संपादित न करें—एक नई वर्ज़न बनाएं ताकि पुराने ऑप्ट-इन अब भी समझने योग्य रहें।
OS परमिशन केवल दिखाती है कि डिवाइस ने नोटिफिकेशन की अनुमति दी; यह अपने आप यह नहीं दिखाती कि यूजर ने आपके विशेष संदेश उद्देश्यों के लिए सहमति दी। OS परमिशन तकनीकी स्थिति के रूप में रिकॉर्ड करें और मार्केटिंग बनाम ऑर्डर अपडेट जैसी व्यावसायिक सहमति अलग रखें।
मार्केटिंग के लिए डिफ़ॉल्ट off रखना सबसे सुरक्षित है। किसी उपयुक्त पल पर पूछें—जैसे ऑनबोर्डिंग के बाद या सेटिंग्स में—न कि साइनअप में छुपाकर। स्पष्टीकरण सरल और सटीक रखें ताकि उपयोगकर्ता जान सकें क्या भेजा जाएगा और कैसे रोकना है।
एक ऑपट-आउट इवेंट तुरंत लिखें और भेजने वाले पाथ में नवीनतम opt-out की जाँच ज़रूर करें, इसमें कतारबद्ध जॉब्स भी शामिल हों। प्रक्रिया सरल रखें ताकि उपयोगकर्ता सपोर्ट से संपर्क किए बिना छोड़ सकें, और सपोर्ट के पास एक स्पष्ट टाइमलाइन हो।
नई ईमेल या फोन नंबर को एक नया डेस्टिनेशन मानें और SMS जैसे चैनलों के लिए ताज़ा सहमति मांगें। पुराने मूल्य से सहमति को स्वतः नहीं मानें, क्योंकि प्रूफ को वही गंतव्य मेल खाना चाहिए जिसे आपने मैसेज किया था।
तेज़ चेक के लिए एक करंट-स्टेट टेबल रखें, लेकिन एक append-only इवेंट लॉग भी रखें जो हर बदलाव को टाइमस्टैम्प और संदर्भ के साथ रिकॉर्ड करे। पुराने इवेंट्स को संपादित या हटाएँ नहीं, क्योंकि वही आपके “क्यों मुझे यह मिला?” के जवाब को नष्ट करते हैं।
कॉन्सेंट को संरचित डेटा की तरह मॉडल करें और हर टॉगल परिवर्तन को एक ही बैकएंड फ्लो के ज़रिए लिखें जो हमेशा एक ऑडिट इवेंट बनाता है। AppMaster में, टीमें सामान्यतः Consent, ConsentTextSnapshot, और ConsentEvents को Data Designer में बनाती हैं और किसी भी ईमेल, SMS, या पुश भेजने से पहले एक साझा Business Process में कॉन्सेंट गेट लागू करती हैं।


