सहमति मोड वाला टेंप्लेट बनाना

यह लेख उन डेवलपर के लिए है जो Google Tag Manager (GTM) का इस्तेमाल करने वाली वेबसाइटों पर, सहमति मैनेजमेंट का समाधान मैनेज करते हैं.

इस पेज पर, Google Tag Manager में सहमति के टाइप के बारे में बताया गया है. साथ ही, इन्हें अपने सहमति मैनेजमेंट समाधान के साथ इंटिग्रेट करने का तरीका भी बताया गया है.

टैग टेंप्लेट उपलब्ध कराने पर, आपके उपयोगकर्ता आपके सहमति समाधान को कोड के बिना इंटिग्रेट कर सकते हैं. इससे, समय और मेहनत की बचत होती है.

उपयोगकर्ता, सहमति मोड टेंप्लेट का इस्तेमाल करके सहमति की डिफ़ॉल्ट स्थितियां सेट कर सकते हैं. साथ ही, वे Google Tag Manager को वेबसाइट पर आने वाले लोगों को सहमति देने के विकल्पों के बारे में बता सकते हैं. इससे, सहमति मोड के साथ काम करने वाले Google और तीसरे पक्ष के टैग की बेहतर तरीके से काम करना पक्का होता है.

टेंप्लेट बनाने वाले के तौर पर, आपके पास सहमति मोड टेंप्लेट को इंटरनल इस्तेमाल के लिए लागू करने का विकल्प होता है. इसके अलावा, इन्हें सार्वजनिक तौर पर उपलब्ध कराने के लिए, कम्यूनिटी टेंप्लेट गैलरी में पब्लिश किया जा सकता है. सहमति मोड के टेंप्लेट उपलब्ध कराने वाली सहमति मैनेजमेंट प्लैटफ़ॉर्म (सीएमपी) सेवा देने वाली कंपनियों को, सहमति मोड के दस्तावेज़ में शामिल किया जा सकता है. साथ ही, टेंप्लेट गैलरी पिकर में उनके टेंप्लेट दिखाए जा सकते हैं.

Google और तीसरे पक्ष के टैग, granted या denied की सहमति की स्थिति के आधार पर, स्टोरेज के अपने व्यवहार में बदलाव करते हैं. इनमें, सहमति के इन टाइप के लिए, सहमति की जांच करने की सुविधा पहले से मौजूद हो सकती है:

सहमति का टाइप जानकारी
ad_storage विज्ञापन से जुड़ी मेमोरी, जैसे कि कुकी को चालू करता है.
ad_user_data ऑनलाइन विज्ञापन दिखाने के मकसद से, Google को उपयोगकर्ता का डेटा भेजने के लिए सहमति सेट करता है.
ad_personalization लोगों के हिसाब से विज्ञापन दिखाने के लिए सहमति सेट करता है.
analytics_storage आंकड़ों से जुड़े स्टोरेज, जैसे कि कुकी को चालू करता है. उदाहरण के लिए, विज़िट का कुल समय.
functionality_storage वेबसाइट या ऐप्लिकेशन पर काम करने वाले डिवाइस की मेमोरी को चालू करता है, जैसे कि भाषा की सेटिंग.
personalization_storage अपनी पसंद के हिसाब से डिवाइस की मेमोरी को चालू करता है, जैसे कि वीडियो के लिए सुझाव.
security_storage पुष्टि करने के तरीके, धोखाधड़ी रोकने, और उपयोगकर्ता की सुरक्षा वगैरह से जुड़ी मेमोरी को चालू करता है

सहमति मोड, वेबसाइट पर आने वाले लोगों की सहमति के विकल्पों और टैग के लिए सहमति की जांच को ट्रैक करता है. इससे यह पक्का होता है कि टैग के काम करने के तरीके में बदलाव होता है. सहमति का नया टेंप्लेट बनाते समय, सबसे सही तरीके अपनाएं:

  • gtag consent के बजाय, Tag Manager के सहमति मोड के एपीआई setDefaultConsentState और updateConsentState का इस्तेमाल करें.

  • सहमति की प्रोसेस को चालू करने वाला ट्रिगर - सभी पेज का इस्तेमाल करके, ट्रिगर होने के तुरंत बाद सहमति की डिफ़ॉल्ट स्थितियां सेट करें.

  • सीएमपी को वेबसाइट पर आने वाले व्यक्ति को जल्द से जल्द, सहमति के सभी टाइप के लिए सहमति देने या अस्वीकार करने के लिए कहा जाना चाहिए.

  • जब कोई वेबसाइट पर आने वाला व्यक्ति सहमति की अपनी पसंद बताता है, तो सीएमपी को सहमति की अपडेट की गई स्थिति को पास करना होगा.

1. नया टेंप्लेट बनाना

लागू करने के इस तरीके में, टेंप्लेट में एक फ़ील्ड का इस्तेमाल किया जाता है, ताकि सहमति की डिफ़ॉल्ट स्थिति को सेव किया जा सके. लागू करने वाला कोड, रनटाइम पर सहमति की डिफ़ॉल्ट स्थिति सेट करने के लिए उस फ़ील्ड को पढ़ता है. अपडेट के निर्देश के लिए, आपका कोड ऐसी कुकी को पढ़ने की कोशिश करता है जिसे सहमति के समाधान ने सेट किया है, ताकि वेबसाइट पर आने वाले लोगों की सहमति के विकल्पों को सेव किया जा सके. आपको updateConsentState के लिए भी एक कॉलबैक सेट अप करना होगा. ऐसा करके, उस स्थिति को मैनेज किया जा सकेगा जहां वेबसाइट पर आने वाले व्यक्ति ने सहमति को नहीं चुना है या अपनी सहमति बदलने का फ़ैसला लिया है.

  1. अपने Google Tag Manager खाते में लॉग इन करें.
  2. बाईं ओर मौजूद नेविगेशन में, टेंप्लेट चुनें.
  3. टैग टेंप्लेट पैनल में, नया पर क्लिक करें.
  1. फ़ील्ड टैब चुनें, फ़ील्ड जोड़ें > पैरामीटर टेबल पर क्लिक करें.
  2. नाम को बदलकर defaultSettings करें.
  3. फ़ील्ड को बड़ा करें.
  4. डिसप्ले नेम को Default settings पर अपडेट करें.
  5. कॉलम जोड़ें पर क्लिक करें. इसके बाद, टेक्स्ट इनपुट चुनें और नाम को region में बदलें. इसके बाद, कॉलम की वैल्यू यूनीक होनी चाहिए बॉक्स को चुनें.
  6. कॉलम को बड़ा करें और डिसप्ले नेम को Region (leave blank to have consent apply to all regions) पर सेट करें. ब्रैकेट में दिया गया स्टेटमेंट, आपके टेंप्लेट के उपयोगकर्ताओं के लिए दस्तावेज़ है. अलग-अलग देशों/इलाकों के लिए सहमति की डिफ़ॉल्ट स्थिति सेट अप करने के बारे में ज़्यादा जानें.
  7. कॉलम जोड़ें पर क्लिक करें और टेक्स्ट इनपुट चुनें. इसके बाद, नाम को granted में बदलें.
  8. कॉलम को बड़ा करें और डिसप्ले नेम को Granted Consent Types (comma separated) पर सेट करें.
  9. कॉलम जोड़ें पर क्लिक करें. इसके बाद, टेक्स्ट इनपुट चुनें और नाम को denied में बदलें.
  10. कॉलम को बड़ा करें और डिसप्ले नेम को Denied Consent Types (comma separated) पर सेट करें

ज़रूरी नहीं: विज्ञापनों के डेटा को छिपाने की सुविधा जोड़ने के लिए:

  1. फ़ील्ड जोड़ें पर क्लिक करें. इसके बाद, चेकबॉक्स चुनें और फ़ील्ड का नाम बदलकर ads_data_redaction करें.
  2. डिसप्ले नेम को Redact Ads Data पर अपडेट करें

विज्ञापनों का डेटा हटाने की सुविधा के साथ कुकी के काम करने के तरीके के बारे में ज़्यादा जानें

ज़रूरी नहीं: यूआरएल पैरामीटर को पास करने के लिए सहायता जोड़ने के लिए:

  1. फ़ील्ड जोड़ें पर क्लिक करें. इसके बाद, चेकबॉक्स चुनें और फ़ील्ड का नाम बदलकर url_passthrough करें.
  2. डिसप्ले नेम को Pass through URL parameters पर अपडेट करें

यूआरएल पैरामीटर से गुज़रने के बारे में ज़्यादा जानें

लागू करने का कोड जोड़ने के लिए:

  1. टेंप्लेट एडिटर में, कोड टैब खोलें.
  2. नीचे दिए गए कोड सैंपल में, प्लेसहोल्डर फ़ील्ड में बदलाव करें.
  3. कोड को कॉपी करें और टेंप्लेट एडिटर में मौजूद बॉयलरप्लेट कोड को उससे बदलें.
  4. टेंप्लेट को सेव करें.
// The first two lines are optional, use if you want to enable logging
const log = require('logToConsole');
log('data =', data);
const setDefaultConsentState = require('setDefaultConsentState');
const updateConsentState = require('updateConsentState');
const getCookieValues = require('getCookieValues');
const callInWindow = require('callInWindow');
const gtagSet = require('gtagSet');
const COOKIE_NAME = 'Your_cookie_name';
/*
 *   Splits the input string using comma as a delimiter, returning an array of
 *   strings
 */
const splitInput = (input) => {
  return input.split(',')
      .map(entry => entry.trim())
      .filter(entry => entry.length !== 0);
};
/*
 *   Processes a row of input from the default settings table, returning an object
 *   which can be passed as an argument to setDefaultConsentState
 */
const parseCommandData = (settings) => {
  const regions = splitInput(settings['region']);
  const granted = splitInput(settings['granted']);
  const denied = splitInput(settings['denied']);
  const commandData = {};
  if (regions.length > 0) {
    commandData.region = regions;
  }
  granted.forEach(entry => {
    commandData[entry] = 'granted';
  });
  denied.forEach(entry => {
    commandData[entry] = 'denied';
  });
  return commandData;
};
/*
 *   Called when consent changes. Assumes that consent object contains keys which
 *   directly correspond to Google consent types.
 */
const onUserConsent = (consent) => {
  const consentModeStates = {
    ad_storage: consent['adConsentGranted'] ? 'granted' : 'denied',
    ad_user_data: consent['adUserDataConsentGranted'] ? 'granted' : 'denied',
    ad_personalization: consent['adPersonalizationConsentGranted'] ? 'granted' : 'denied',
    analytics_storage: consent['analyticsConsentGranted'] ? 'granted' : 'denied',
    functionality_storage: consent['functionalityConsentGranted'] ? 'granted' : 'denied',
    personalization_storage: consent['personalizationConsentGranted'] ? 'granted' : 'denied',
    security_storage: consent['securityConsentGranted'] ? 'granted' : 'denied',
  };
  updateConsentState(consentModeStates);
};
/*
 *   Executes the default command, sets the developer ID, and sets up the consent
 *   update callback
 */
const main = (data) => {
  /*
   * Optional settings using gtagSet
   */
  gtagSet('ads_data_redaction', data.ads_data_redaction);
  gtagSet('url_passthrough', data.url_passthrough);
  gtagSet('developer_id.your_developer_id', true);
  // Set default consent state(s)
  data.defaultSettings.forEach(settings => {
    const defaultData = parseCommandData(settings);
  // wait_for_update (ms) allows for time to receive visitor choices from the CMP
    defaultData.wait_for_update = 500;
    setDefaultConsentState(defaultData);
  });

  // Check if cookie is set and has values that correspond to Google consent
  // types. If it does, run onUserConsent().
  const settings = getCookieValues(COOKIE_NAME);
  if (typeof settings !== 'undefined') {
    onUserConsent(settings);
  }
  /**
   *   Add event listener to trigger update when consent changes
   *
   *   References an external method on the window object which accepts a
   *   function as an argument. If you do not have such a method, you will need
   *   to create one before continuing. This method should add the function
   *   that is passed as an argument as a callback for an event emitted when
   *   the user updates their consent. The callback should be called with an
   *   object containing fields that correspond to the five built-in Google
   *   consent types.
   */
  callInWindow('addConsentListenerExample', onUserConsent);
};
main(data);
data.gtmOnSuccess();

इसके बाद, सहमति की स्थिति और कुकी ऐक्सेस करने के लिए, अनुमतियां कॉन्फ़िगर करें.

  1. अनुमतियां टैब चुनें और सहमति की स्थिति ऐक्सेस करता है पर क्लिक करें.
  2. सहमति टाइप जोड़ें पर क्लिक करें.
  3. बॉक्स पर क्लिक करें और ड्रॉप-डाउन मेन्यू से ad_storage चुनें.
  4. लिखें पर सही का निशान लगाएं.
  5. जोड़ें पर क्लिक करें
  6. ad_user_data, ad_personalization, और analytics_storage के लिए, दूसरा से लेकर पांचवां चरण दोहराएं. अगर आपको सहमति के अन्य टाइप की ज़रूरत है, तो उन्हें उसी तरह जोड़ें.
  7. सेव करें पर क्लिक करें.

कुकी ऐक्सेस करने की अनुमतियां जोड़ने के लिए:

  1. अनुमतियां टैब चुनें और कुकी वैल्यू पढ़ता है पर क्लिक करें.
  2. खास सेक्शन में, हर उस कुकी के नाम डालें जिसे आपके कोड को पढ़ना है, ताकि उपयोगकर्ता की सहमति के विकल्प तय किए जा सकें. हर लाइन में एक नाम डालें.
  3. सेव करें पर क्लिक करें.

2. यूनिट टेस्ट बनाना

अपने टेंप्लेट के लिए टेस्ट बनाने के बारे में जानकारी पाने के लिए, टेस्ट देखें.

नीचे दिए गए कोड में, एक उदाहरण दिया गया है. इसमें बताया गया है कि सहमति मैनेजमेंट के समाधान के लिए, इस टेंप्लेट को कोड के साथ कैसे इंटिग्रेट किया जा सकता है. इसके लिए, आपको एक लिसनर जोड़ना होगा:

// Array of callbacks to be executed when consent changes
const consentListeners = [];

/**
 *   Called from GTM template to set callback to be executed when user consent is provided.
 *   @param {function} Callback to execute on user consent
 */
window.addConsentListenerExample = (callback) => {
  consentListeners.push(callback);
};

/**
 *   Called when user grants/denies consent.
 *   @param {Object} Object containing user consent settings.
 */
const onConsentChange = (consent) => {
  consentListeners.forEach((callback) => {
    callback(consent);
  });
};

जब वेबसाइट पर आने वाला कोई व्यक्ति, सहमति वाले बैनर के साथ इंटरैक्ट करके, सहमति के विकल्पों को चुनता है, तो टेंप्लेट कोड को updateConsentState एपीआई के हिसाब से सहमति की स्थितियों को अपडेट करना चाहिए.

नीचे दिए गए उदाहरण में, किसी ऐसे वेबसाइट पर आने वाले व्यक्ति के लिए updateConsentState कॉल दिखाया गया है जिसने सभी तरह के स्टोरेज के लिए सहमति दी है. फिर से, इस उदाहरण में granted के लिए हार्डकोड की गई वैल्यू का इस्तेमाल किया गया है. हालांकि, असल में, इन्हें रनटाइम पर तय किया जाना चाहिए. इसके लिए, सीएमपी से इकट्ठा की गई, वेबसाइट पर आने वाले व्यक्ति की सहमति का इस्तेमाल किया जाना चाहिए.

const updateConsentState = require('updateConsentState');

updateConsentState({
  'ad_storage': 'granted',
  'ad_user_data': 'granted',
  'ad_personalization': 'granted',
  'analytics_storage': 'granted',
  'functionality_storage': 'granted',
  'personalization_storage': 'granted',
  'security_storage': 'granted'
});

इलाके के हिसाब से व्यवहार के बारे में जानकारी

किसी खास इलाके से आने वाले लोगों के लिए, सहमति की डिफ़ॉल्ट स्थितियां सेट करने के लिए, टेंप्लेट में कोई देश/इलाका (ISO 3166-2 के हिसाब से) डालें. क्षेत्र की वैल्यू का इस्तेमाल करने से, टेंप्लेट के उपयोगकर्ता उन क्षेत्रों के बाहर के विज़िटर की जानकारी खोए बिना, क्षेत्र के नियमों का पालन कर सकते हैं. जब setDefaultConsentState कमांड में कोई क्षेत्र तय नहीं किया जाता है, तो वैल्यू सभी अन्य क्षेत्रों पर लागू होती है.

उदाहरण के लिए, नीचे दिए गए कोड से स्पेन और अलास्का से आने वाले लोगों के लिए, डिफ़ॉल्ट स्टेटस analytics_storage से denied पर सेट हो जाता है. साथ ही, अन्य सभी लोगों के लिए, डिफ़ॉल्ट स्टेटस analytics_storage से granted पर सेट हो जाता है:

const setDefaultConsentState = require('setDefaultConsentState');

setDefaultConsentState({
  'analytics_storage': 'denied',
  'region': ['ES', 'US-AK']
});
setDefaultConsentState({
  'analytics_storage': 'granted'
});

सबसे खास एट्रिब्यूट को प्राथमिकता दी जाती है

अगर किसी इलाके और उप-इलाके की वैल्यू वाले एक ही पेज पर, सहमति से जुड़े दो डिफ़ॉल्ट निर्देश मौजूद हैं, तो ज़्यादा खास इलाके वाला निर्देश लागू होगा. उदाहरण के लिए, अगर आपने US इलाके के लिए ad_storage को 'granted' पर सेट किया है और US-CA क्षेत्र के लिए ad_storage को 'denied' पर सेट किया है, तो कैलिफ़ोर्निया से आने वाले व्यक्ति के लिए ज़्यादा सटीक US-CA सेटिंग लागू होगी.

क्षेत्र ad_storage व्यवहार
अमेरिका 'granted' अमेरिका में रहने वाले उन उपयोगकर्ताओं पर लागू होता है जो कनाडा में नहीं हैं
US-CA 'denied' अमेरिका और कनाडा के उपयोगकर्ताओं के लिए लागू
सेट नहीं है 'granted' 'granted' की डिफ़ॉल्ट वैल्यू का इस्तेमाल करता है. इस उदाहरण में, यह शर्त उन उपयोगकर्ताओं पर लागू होती है जो अमेरिका या अमेरिका-कैलिफ़ोर्निया में नहीं हैं

अन्य मेटाडेटा

नीचे दिए गए वैकल्पिक पैरामीटर सेट करने के लिए, gtagSet एपीआई का इस्तेमाल किया जा सकता है:

ये एपीआई सिर्फ़ GTM टेंप्लेट सैंडबॉक्स एनवायरमेंट में उपलब्ध हैं.

यूआरएल में विज्ञापन पर क्लिक, क्लाइंट आईडी, और सेशन आईडी की जानकारी पास करना

जब कोई वेबसाइट पर आने वाला व्यक्ति, विज्ञापन पर क्लिक करने के बाद विज्ञापन देने वाले की वेबसाइट पर जाता है, तो विज्ञापन के बारे में जानकारी, क्वेरी पैरामीटर के तौर पर लैंडिंग पेज यूआरएल में जोड़ी जा सकती है. कन्वर्ज़न की सटीक जानकारी देने के लिए, Google टैग आम तौर पर इस जानकारी को विज्ञापन देने वाले के डोमेन पर, पहले पक्ष की कुकी में सेव करते हैं.

हालांकि, अगर ad_storage denied है, तो Google टैग इस जानकारी को स्थानीय तौर पर सेव नहीं करेंगे. इस मामले में, विज्ञापन पर क्लिक के मेज़रमेंट की क्वालिटी को बेहतर बनाने के लिए, विज्ञापन देने वाले लोग या कंपनियां, यूआरएल पासथ्रू नाम की सुविधा का इस्तेमाल करके, सभी पेजों पर यूआरएल पैरामीटर के ज़रिए विज्ञापन पर क्लिक की जानकारी भेज सकती हैं.

इसी तरह, अगर analytics_storage को 'अस्वीकार किया गया' पर सेट किया जाता है, तो यूआरएल पासथ्रू का इस्तेमाल सभी पेजों पर कुकी के बिना, इवेंट और सेशन के आधार पर विश्लेषण (कन्वर्ज़न के साथ) भेजने के लिए किया जा सकता है.

यूआरएल पासथ्रू का इस्तेमाल करने के लिए नीचे दी गई शर्तें पूरी होनी चाहिए:

  • पेज पर सहमति वाले Google टैग मौजूद हैं.
  • साइट ने यूआरएल पासथ्रू की सुविधा का इस्तेमाल करने के लिए ऑप्ट इन किया हो.
  • पेज पर सहमति मोड लागू किया गया हो.
  • आउटगोइंग लिंक, मौजूदा पेज के डोमेन से मेल खाता है.
  • यूआरएल में gclid/dclid मौजूद है (सिर्फ़ Google Ads और Floodlight टैग के लिए)

आपके टेंप्लेट में, टेंप्लेट इस्तेमाल करने वाले को यह कॉन्फ़िगर करने की अनुमति होनी चाहिए कि उसे यह सेटिंग चालू करनी है या नहीं. नीचे दिए गए टेंप्लेट कोड का इस्तेमाल, यूआरएल पासथ्रू को 'सही है' पर सेट करने के लिए किया जाता है:

gtagSet('url_passthrough', true);

विज्ञापनों के डेटा में बदलाव करना

ad_storage को अस्वीकार करने पर, विज्ञापन के मकसद से कोई नई कुकी सेट नहीं की जाती. इसके अलावा, google.com और doubleclick.net पर पहले से सेट की गई तीसरे पक्ष की कुकी का इस्तेमाल नहीं किया जाएगा. Google को भेजे गए डेटा में अब भी पेज का पूरा यूआरएल शामिल होगा. इसमें, यूआरएल पैरामीटर में विज्ञापन पर क्लिक की जानकारी भी शामिल होगी.

ad_storage के अस्वीकार होने पर, अपने विज्ञापनों का डेटा छिपाने के लिए उसमें और बदलाव करने के लिए, ads_data_redaction को 'सही' पर सेट करें.

जब ads_data_redaction की वैल्यू 'सही' और ad_storage की वैल्यू 'अस्वीकार' होती है, तो Google Ads और Floodlight टैग के ज़रिए नेटवर्क अनुरोधों में भेजे गए विज्ञापन पर मिले क्लिक के आइडेंटिफ़ायर को छिपाया जाएगा.

gtagSet('ads_data_redaction', true);

डेवलपर आईडी

अगर आप ऐसे सीएमपी वेंडर हैं जिसके पास Google का डेवलपर आईडी है, तो अपने टेंप्लेट में इसे जल्द से जल्द सेट करने के लिए, यहां दिया गया तरीका अपनाएं.

आपको डेवलपर आईडी की ज़रूरत सिर्फ़ तब होती है, जब आपके लागू किए गए टैग का इस्तेमाल, अलग-अलग कंपनियों या इकाइयों की कई वेबसाइटों पर किया जाएगा. अगर लागू करने का इस्तेमाल किसी एक साइट या इकाई के लिए किया जाएगा, तो डेवलपर आईडी के लिए आवेदन न करें.

gtagSet('developer_id.<your_developer_id>', true);

अपने उपयोगकर्ताओं के लिए दस्तावेज़ उपलब्ध कराना

आपके उपयोगकर्ता, सहमति लेने के लिए टैग सेट अप करने के लिए, आपके सहमति टेंप्लेट का इस्तेमाल करेंगे. अपने उपयोगकर्ताओं के लिए दस्तावेज़ उपलब्ध कराएं, जिसमें इन सबसे सही तरीकों के बारे में बताया गया हो:

  • सेटिंग टेबल में, सहमति की डिफ़ॉल्ट सेटिंग सेट करने का तरीका.
  • अलग-अलग देशों/इलाकों के लिए, टेबल की अतिरिक्त पंक्तियां जोड़कर सहमति की डिफ़ॉल्ट सेटिंग सेट अप करने का तरीका.
  • सहमति की प्रोसेस को चालू करने वाला ट्रिगर - सभी पेज ट्रिगर पर टैग को ट्रिगर करें.

अगले चरण

अगर आपको अपना टेंप्लेट, Tag Manager के सभी उपयोगकर्ताओं को उपलब्ध कराना है, तो उसे समुदाय टेम्प्लेट गैलरी में अपलोड करें.