सर्वर साइड कस्टम टेंप्लेट की अनुमतियां

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


हर अनुमति:

  • उन एपीआई से जांचा गया जिन्हें इनकी ज़रूरत है.
  • इस्तेमाल किए गए एपीआई के आधार पर, सैंडबॉक्स की गई JavaScript में अपने-आप पता चलता है. ऐसा कस्टम टेंप्लेट एडिटर में बदलाव करने के दौरान होता है (तेज़ फ़ीडबैक लूप के लिए) और कोड को कंपाइल किए जाने पर (यह पुष्टि करने के लिए कि सही अनुमतियां लागू की गई हैं).
  • कस्टम टेंप्लेट एडिटर में बदलाव किया जा सकता है, ताकि अनुमति को और सटीक बनाया जा सके.
  • queryPermission एपीआई की मदद से, सैंडबॉक्स की गई JavaScript में क्वेरी की जा सकती है.

access_bigquery

डिसप्ले नेम: BigQuery को ऐक्सेस करता है

जानकारी: इससे Google Cloud Platform पर BigQuery को ऐक्सेस किया जा सकता है.

कॉन्फ़िगरेशन: BigQuery के साथ चुनिंदा प्रोजेक्ट, डेटासेट, और टेबल कॉम्बिनेशन का इस्तेमाल करने की अनुमति देने का विकल्प. GOOGLE_CLOUD_PROJECT का प्रोजेक्ट आईडी कॉन्फ़िगरेशन सेट करने पर, projectId को BigQuery API parameter से बाहर रखने पर, GOOGLE_CLOUD_PROJECT एनवायरमेंट वैरिएबल को प्रोजेक्ट आईडी के तौर पर इस्तेमाल किया जा सकेगा.

इसके लिए ज़रूरी है: BigQuery

क्वेरी सिग्नेचर: queryPermission('access_bigquery', <operation>, <options>)

ध्यान दें: <operation> एक स्ट्रिंग है और इसमें ये वैल्यू हो सकती हैं:

  • लिखें

<options> एक ऑब्जेक्ट है, जिसमें ये आइटम मौजूद हैं:

{
  'projectId': <project_id>,
  'datasetId': <dataset_id>,
  'tableId': <table_id>
}

कोड का उदाहरण

const BigQuery = require('BigQuery');
const queryPermission = require('queryPermission');

const connectionInfo = {
  'projectId': 'gcp-cloud-project-id',
  'datasetId': 'destination-dataset',
  'tableId': 'destination-table',
};

if (queryPermission('access_bigquery', 'write', connectionInfo)) {
  const rows = [{
    'column1': 'String1',
    'column2': 1234,
  }];
  const options = {
    'ignoreUnknownValues': true,
    'skipInvalidRows': false,
  };

  BigQuery.insert(connectionInfo, rows, options)
      .then(data.gtmOnSuccess, data.gtmOnFailure);
}

access_firestore

डिसप्ले नेम: Google Firestore को ऐक्सेस करता है

जानकारी: इससे Google Firestore को ऐक्सेस करने की अनुमति मिलती है.

कॉन्फ़िगरेशन: तय किए गए प्रोजेक्ट और पाथ (वाइल्डकार्ड सिंटैक्स के साथ काम करने वाले) के कॉम्बिनेशन को Firestore के साथ इस्तेमाल करने की अनुमति देने का विकल्प. GOOGLE_CLOUD_PROJECT का प्रोजेक्ट आईडी कॉन्फ़िगरेशन सेट करने पर, Firestore API parameter से projectId को बाहर रखने पर, GOOGLE_CLOUD_PROJECT एनवायरमेंट वैरिएबल को प्रोजेक्ट आईडी के तौर पर इस्तेमाल किया जा सकेगा.

इसके लिए ज़रूरी है: Firestore

क्वेरी सिग्नेचर: queryPermission('access_firestore', <operation>, <options>)

ध्यान दें: <operation> एक स्ट्रिंग है और इसमें ये वैल्यू हो सकती हैं:

  • पढ़ें - पढ़ने और क्वेरी करने के लिए API का ऐक्सेस देता है
  • लिखें - API में लिखने के लिए ऐक्सेस देता है
  • Read_write - एपीआई को पढ़ने, लिखने, और क्वेरी करने का ऐक्सेस देता है

<options> एक ऑब्जेक्ट है, जिसमें ये आइटम मौजूद हैं:

{
  'projectId': <project_id>,
  'path': <path>
}

कोड का उदाहरण

const Firestore = require('Firestore');
const queryPermission = require('queryPermission');

const options = {
  'projectId': 'gcp-cloud-project-id',
  'path': 'collection/document',
};

if (queryPermission('access_firestore', 'read', options)) {
  Firestore.read('collection/document', {
    projectId: 'gcp-cloud-project-id',
  }).then(data.gtmOnSuccess, data.gtmOnFailure);
}

access_response

डिसप्ले नेम: ऐक्सेस करने का जवाब

जानकारी: जवाब का मुख्य हिस्सा, हेडर या स्टेटस को ऐक्सेस करता है.

कॉन्फ़िगरेशन: अलग-अलग सबकॉम्पोनेंट के ऐक्सेस को कंट्रोल करने के लिए, सब-विकल्पों के साथ, किसी भी या खास ऐक्सेस को अनुमति देने का विकल्प.

इनके लिए ज़रूरी है: setPixelResponse, setResponseBody, setResponseHeader, setResponseStatus

क्वेरी सिग्नेचर: queryPermission('access_response', 'write', <component>[, <optional component name>])

ध्यान दें: इससे यह कंट्रोल किया जाता है कि आउटगोइंग एचटीटीपी रिस्पॉन्स कॉम्पोनेंट को ऐक्सेस किया जा सकता है या नहीं.

कोड का उदाहरण

const queryPermission = require('queryPermission');
const setResponseBody = require('setResponseBody');
const setResponseHeader = require('setResponseHeader');
const setResponseStatus = require('setResponseStatus');
if (queryPermission('access_response', 'write', 'header', 'Content-Type')) {
  setResponseHeader('Content-Type', 'text/plain');
}
if (queryPermission('access_response', 'write', 'body')) {
  setResponseBody('Not Found');
}
if (queryPermission('access_response', 'write', 'status')) {
  setResponseStatus(404);
}

access_template_storage

डिसप्ले नेम: टेंप्लेट के स्टोरेज को ऐक्सेस करता है

जानकारी: इससे टेंप्लेट को कुछ समय के लिए सेव किए गए स्टोरेज का ऐक्सेस मिलता है. ये ऐसे टेंप्लेट होते हैं जो सर्वर साइड प्रोसेस तक लंबे समय तक बने रह सकते हैं.

कॉन्फ़िगरेशन: कोई नहीं

इसके लिए ज़रूरी है: templateDataStorage

क्वेरी हस्ताक्षर: queryPermission('access_template_storage')

कोड का उदाहरण

const queryPermission = require('queryPermission');
const templateDataStorage = require('templateDataStorage');
const key = 'my_key';
if (queryPermission('access_template_storage')) {
  const value = templateDataStorage.getItemCopy(key);
}

get_cookies

डिसप्ले नेम: इससे कुकी की वैल्यू का पता लगाया जाता है

ब्यौरा: तय किए गए नाम वाली कुकी की वैल्यू को पढ़ता है.

कॉन्फ़िगरेशन: उन कुकी के नामों की सूची जिन्हें पढ़ने की अनुमति है.

इसके लिए ज़रूरी है: getCookieValues

क्वेरी हस्ताक्षर: queryPermission('get_cookies', <name>)

नोट: कुकी के नाम के आधार पर, यह तय करता है कि कुकी को पढ़ा जा सकता है या नहीं.

कोड का उदाहरण

const queryPermission = require('queryPermission');
const getCookieValues = require('getCookieValues');
const cookieName = 'info';
let cookieValues;
if (queryPermission('get_cookies', cookieName)) {
  cookieValues = getCookieValues(cookieName);
}

डेटा इकट्ठा करने की प्रोसेस

डिसप्ले नेम: कंसोल में लॉग करता है

जानकारी: डेवलपर कंसोल और Tag Manager के झलक मोड में लॉग करता है.

कॉन्फ़िगरेशन: प्रोडक्शन में लॉग इन करने की सुविधा चालू करने का विकल्प. डिफ़ॉल्ट तौर पर, सिर्फ़ डीबग/झलक में लॉग इन करने की सुविधा चालू होती है. अगर अनुमति नहीं दी जाती है, तो logToConsole कोई गड़बड़ी नहीं दिखाएगा. हालांकि, इस लॉग मैसेज को रोक देगा.

इसके लिए ज़रूरी है: logToConsole

क्वेरी हस्ताक्षर: queryPermission('logging')

ध्यान दें: यह कंट्रोल करता है कि कस्टम टेंप्लेट, डेवलपर कंसोल में लॉग इन कर सकता है या नहीं.

कोड का उदाहरण

const queryPermission = require('queryPermission');
const logToConsole = require('logToConsole');
// Note that it's fine to call log, since the log call will be ignored if
// logging isn't permitted in the current environment.
logToConsole('diagnostic info');

use_message

डिसप्ले नेम: इसमें मैसेज का इस्तेमाल किया जाता है

जानकारी: addMessageListener या sendMessage एपीआई का इस्तेमाल करके मैसेज भेजता या पाता है.

कॉन्फ़िगरेशन: मैसेज का टाइप तय करने का विकल्प. इसमें यह भी बताया जाता है कि टेंप्लेट को सुन सकता है, भेज सकता है या दोनों की अनुमति है या नहीं.

इनके लिए ज़रूरी है: addMessageListener, sendMessage

क्वेरी हस्ताक्षर: queryPermission('use_message', <usage>, <message type>)

ध्यान दें: listen, send या listen_and_send में से किसी एक का इस्तेमाल किया जा सकता है.

कोड का उदाहरण

const queryPermission = require('queryPermission');
const sendMessage = require('sendMessage');
if (queryPermission('use_message', 'send', 'set_cookie')) {
  sendMessage('set_cookie', {name: 'foo', value: 'bar'});
}

read_container_data

डिसप्ले नाम: इससे कंटेनर के डेटा का पता चलता है

जानकारी: कंटेनर के डेटा को पढ़ता है.

कॉन्फ़िगरेशन: कोई नहीं.

इनके लिए ज़रूरी है: getClientName, getContainerVersion

क्वेरी हस्ताक्षर: queryPermission('read_container_data')

ध्यान दें: यह कंट्रोल करता है कि कस्टम टेंप्लेट, कंटेनर का डेटा पढ़ सकता है या नहीं.

कोड का उदाहरण

const getContainerVersion = require('getContainerVersion');
const queryPermission = require('queryPermission');
if (queryPermission('read_container_data')) {
  return getContainerVersion();
}

read_event_data

डिसप्ले नेम: इससे इवेंट के डेटा को ऐक्सेस किया जाता है

जानकारी: इससे इवेंट का डेटा पता चलता है.

कॉन्फ़िगरेशन: अनुमति वाले मुख्य पाथ की सूची से किसी भी ऐक्सेस या खास ऐक्सेस को कंट्रोल करने की अनुमति देने का विकल्प (वाइल्डकार्ड सिंटैक्स का इस्तेमाल किया जा सकता है).

इनके लिए ज़रूरी है: getAllEventData, getEventData

क्वेरी हस्ताक्षर: queryPermission('read_event_data'[, <optional key>])

ध्यान दें: यह कंट्रोल करता है कि कस्टम टेंप्लेट, किसी खास कुंजी पाथ (या किसी मुख्य पाथ न दिए जाने पर, पूरा इवेंट डेटा) पर मौजूद इवेंट डेटा को पढ़ सकता है या नहीं.

कोड का उदाहरण

const getAllEventData = require('getAllEventData');
const queryPermission = require('queryPermission');
if (queryPermission('read_event_data')) {
  return getAllEventData();
}
const getEventData = require('getEventData');
const queryPermission = require('queryPermission');
const keyPath = 'parentField.childField';
if (queryPermission('read_event_data', keyPath)) {
  return getEventData(keyPath);
}

read_event_metadata

डिसप्ले नेम: इससे इवेंट के मेटाडेटा का पता चलता है

जानकारी: इवेंट कॉलबैक में, इवेंट के मेटाडेटा को पढ़ता है

कॉन्फ़िगरेशन: कोई नहीं

इसके लिए ज़रूरी है: addEventCallback

क्वेरी हस्ताक्षर: queryPermission('read_event_metadata')

ध्यान दें: यह कंट्रोल करता है कि कस्टम टेंप्लेट, कॉलबैक के दौरान इवेंट मेटाडेटा को पढ़ सकता है या नहीं.

कोड का उदाहरण

const queryPermission = require('queryPermission');
const addEventCallback = require('addEventCallback');
if (queryPermission('read_event_metadata')) {
  addEventCallback((containerId, eventMetadata) => {
    // Read event metadata.
  });
}

read_request

डिसप्ले नेम: इससे एचटीटीपी अनुरोध को ऐक्सेस किया जा सकता है

जानकारी: इससे अनुरोध के हेडर, क्वेरी पैरामीटर, मुख्य हिस्से, पाथ या रिमोट आईपी पते की जानकारी देखी जा सकती है.

कॉन्फ़िगरेशन: अलग-अलग सबकॉम्पोनेंट के ऐक्सेस को कंट्रोल करने के लिए, सब-विकल्पों के साथ, किसी भी या खास ऐक्सेस को अनुमति देने का विकल्प.

इनके लिए ज़रूरी है: extractEventsFromMpv1, extractEventsFromMpv2, getRemoteAddress, getRequestBody, getRequestHeader, getRequestPath, getRequestQueryParameter, getRequestQueryParameters, getRequestQueryString

क्वेरी सिग्नेचर: queryPermission('read_request', <component>[, <optional component name>])

ध्यान दें: इससे यह कंट्रोल किया जाता है कि आने वाले एचटीटीपी रिस्पॉन्स कॉम्पोनेंट को ऐक्सेस किया जा सकता है या नहीं.

कोड का उदाहरण

const queryPermission = require('queryPermission');
const getRequestBody = require('getRequestBody');
const getRequestHeader = require('getRequestHeader');
let body, contentType;
if (queryPermission('read_request', 'body')) {
  body = getRequestBody();
}
if (queryPermission('read_request', 'header', 'content-type')) {
  contentType = getRequestHeader('content-type');
}
if (body && contentType == 'application/json') { ... }

return_response

डिसप्ले नेम: जवाब दिखाता है

जानकारी: यह फ़ंक्शन, कॉल करने वाले (कॉलर) को जवाब देता है.

कॉन्फ़िगरेशन: कोई नहीं

इसके लिए ज़रूरी है: returnResponse

क्वेरी हस्ताक्षर: queryPermission('return_response')

ध्यान दें: इस अनुमति में कम करने के लिए कोई फ़ील्ड नहीं होता. साथ ही, आम तौर पर इसके लिए क्वेरी नहीं की जाती.

run_container

डिसप्ले नेम: कंटेनर को चलाता है

जानकारी: इवेंट वाले कंटेनर को चलाता है

कॉन्फ़िगरेशन: कोई नहीं

इसके लिए ज़रूरी है: runContainer

क्वेरी हस्ताक्षर: queryPermission('run_container')

ध्यान दें: इस अनुमति में कम करने के लिए कोई फ़ील्ड नहीं होता. साथ ही, आम तौर पर इसके लिए क्वेरी नहीं की जाती.

send_http

डिसप्ले नेम: इससे एचटीटीपी अनुरोध भेजे जा सकते हैं

जानकारी: इससे, तय किए गए यूआरएल पर एचटीटीपी अनुरोध भेजा जाता है.

इनके लिए ज़रूरी है: getGoogleScript, sendEventToGoogleAnalytics, sendHttpGet, sendHttpRequest

क्वेरी हस्ताक्षर: queryPermission('send_http', <url>)

ध्यान दें: यह कंट्रोल करता है कि यूआरएल के आधार पर, एचटीटीपी अनुरोध किया जा सकता है या नहीं. सुरक्षित कनेक्शन पक्का करने के लिए, सिर्फ़ सुरक्षित (एचटीटीपीएस) यूआरएल का इस्तेमाल किया जाता है.

कोड का उदाहरण

const queryPermission = require('queryPermission');
const sendHttpGet = require('sendHttpGet');
const url = 'https://example.com/search?query=foo&results=10';
if (queryPermission('send_http', url)) {
  sendHttpGet(url);
}

send_pixel_from_browser

डिसप्ले नेम: ब्राउज़र से पिक्सल भेजता है

जानकारी: ब्राउज़र से बताए गए यूआरएल पर GET अनुरोध भेजता है.

इसके लिए ज़रूरी है: sendPixelFromBrowser

क्वेरी हस्ताक्षर: queryPermission('send_pixel_from_browser', <url>)

ध्यान दें: यह कंट्रोल करता है कि यूआरएल के आधार पर, ब्राउज़र से अनुरोध भेजा जा सकता है या नहीं.

कोड का उदाहरण

const queryPermission = require('queryPermission');
const sendPixelFromBrowser = require('sendPixelFromBrowser');
const url = 'https://example.com/search?query=foo&results=10';
if (queryPermission('send_pixel_from_browser', url)) {
  sendPixelFromBrowser(url);
}

set_cookies

डिसप्ले नेम: कुकी सेट करता है

जानकारी: इसमें दिए गए नाम और पैरामीटर के साथ कुकी सेट की जाती है.

कॉन्फ़िगरेशन: अनुमति वाली कुकी के नामों की टेबल. हर नाम में नाम, डोमेन, पाथ, secure एट्रिब्यूट, और समयसीमा खत्म होने से जुड़ी वैकल्पिक पाबंदियां शामिल होती हैं.

इसके लिए ज़रूरी है: setCookie

क्वेरी हस्ताक्षर: queryPermission('set_cookies', <name>, <options>)

नोट: इससे यह तय होता है कि कुकी के नाम, डोमेन, पाथ, secure एट्रिब्यूट, और खत्म होने की तारीख के आधार पर, दिए गए 'सेट-कुकी' हेडर को रिस्पॉन्स में जोड़ा जा सकता है या नहीं.

कोड का उदाहरण

const queryPermission = require('queryPermission');
const setCookie = require('setCookie');
const options = {
  'domain': 'www.example.com',
  'path': '/',
  'max-age': 60*60*24*365,
  'secure': true
};
if (queryPermission('set_cookies', 'info', options)) {
  setCookie('info', 'xyz', options);
}

use_custom_private_keys

डिसप्ले नेम: इसमें पसंद के मुताबिक बनाई गई निजी कुंजियों का इस्तेमाल किया जाता है

जानकारी: क्रिप्टोग्राफ़िक ऑपरेशन के लिए, JSON कुंजी वाली फ़ाइल में सेव की गई निजी कुंजियों का इस्तेमाल किया जाता है.

कॉन्फ़िगरेशन: अनुमति वाली कुंजी के आईडी की सूची. आईडी, JSON कुंजी की फ़ाइल में मौजूद कुंजियों से मेल खाना चाहिए. इस फ़ाइल के बारे में सर्वर पर SGTM_CREDENTIALS एनवायरमेंट वैरिएबल से बताया गया है.

इसके लिए ज़रूरी है: hmacSha256

क्वेरी हस्ताक्षर: queryPermission('use_custom_private_keys', <key id>)

नोट: अनुमति वाली निजी कुंजियों की सूची को कंट्रोल करता है.

कोड का उदाहरण

const hmacSha256= require('hmacSha256');
const queryPermission = require('queryPermission');
const keyId = 'key1';

let result;
if (queryPermission('use_custom_private_keys', keyId)) {
  result = hmacSha256('my_data', keyId);
}

use_google_credentials

डिसप्ले नेम: Google ऐप्लिकेशन के डिफ़ॉल्ट क्रेडेंशियल का इस्तेमाल किया जाता है

जानकारी: Google API को कॉल करने के लिए, Google डिफ़ॉल्ट क्रेडेंशियल का इस्तेमाल करता है.

कॉन्फ़िगरेशन: Google OAuth 2.0 के स्कोप की अनुमति वाली सूची.

इसके लिए ज़रूरी है: getGoogleAuth

क्वेरी हस्ताक्षर: queryPermission('use_google_credentials', <scopes>)

ध्यान दें: Google API के साथ इस्तेमाल किए जाने के लिए, अनुमति वाले Google OAuth 2.0 स्कोप को सीमित करता है.

कोड का उदाहरण

const getGoogleAuth = require('getGoogleAuth');
const queryPermission = require('queryPermission');

const scopes = [
  'https://www.googleapis.com/auth/datastore'
];

let auth;
if (queryPermission('use_google_credentials', scopes)) {
  auth = getGoogleAuth(scopes);
}