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

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


हर अनुमति:

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

access_bigquery

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

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

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

इसके लिए ज़रूरी है: 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 को ऐक्सेस किया जा सकता है.

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

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

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

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

  • पढ़ें - पढ़ने और क्वेरी करने के लिए एपीआई का ऐक्सेस देता है
  • लिखें - लिखने के एपीआई का ऐक्सेस देता है
  • 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

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

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

इनके लिए ज़रूरी है: 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

डिसप्ले नेम: Google Tag Manager, ज़रूरत के हिसाब से बनाई गई निजी कुंजियों का इस्तेमाल करता है

जानकारी: क्रिप्टोग्राफ़िक के लिए, 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 को कॉल करने के लिए, Google के डिफ़ॉल्ट क्रेडेंशियल का इस्तेमाल करता है एपीआई.

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

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

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

ध्यान दें: Google OAuth 2.0 के उन दायरों पर पाबंदी लगाता है जिन्हें Google पर इस्तेमाल करने की अनुमति है एपीआई.

कोड का उदाहरण

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);
}