Опубликовано: 21 сен 2020
Часть 2 Часть 1
Клиент в серверном GTM работает, как обработчик хитов, он может преобразовывать поступающие http запросы в события. При этом он формирует http ответы. Мы можем воспользоваться этим и создать простой клиент, который позволит нам получать файл скрипта аналитики App+Web с нашего собственного сервера GTM, что дает некие плюсы, при условии, что мы подключили к серверу наш домен. Т.е. наш сервер GTM в данном случае будет выступать в роли некоего прокси-сервера. Реализовать эту задачу нам позволяет имеющийся API под названием getGoogleScript
Чтобы создать клиента в серверном GTM, создадим вначале для него шаблон:
Вводим название:
Пишем код функционала:
И добавляем необходимые разрешения:
Код функционала достаточно простой. Вначале мы импортируем все необходимые API. Затем, иcпользуя функции claimRequest()
, добавляем логику того, когда наш клиент должен обрабатывать входящий запрос - когда путь в запросе равен /gtag.js
. И затем обрабатываем запрос и возвращаем нужный нам скрипт с помощью функций getGoogleScript()
и returnResponse()
. При этом на этапе тестирования мы задаем опцию, к которой включаем режим debug для скрипта аналитики.
// Импортируем нужные нам API
const claimRequest = require('claimRequest');
const getRequestHeader = require('getRequestHeader');
const getRequestPath = require('getRequestPath');
const setResponseHeader = require('setResponseHeader');
const setResponseBody = require('setResponseBody');
const getGoogleScript = require('getGoogleScript');
const returnResponse = require('returnResponse');
// Прописываем логику обработки запроса
if (getRequestPath() == '/gtag.js') {
// Claim the request
claimRequest();
getGoogleScript('GTAG', (script, metadata) => {
// копируем заголовки, чтобы они были такими же, как для оригинального ендпоинта
for (let header in metadata) {
setResponseHeader(header, metadata[header]);
}
setResponseHeader('content-type', 'text/javascript');
setResponseBody(script);
// Добавляем заголовки для CORS, чтобы не было связанных с ним ошибок
const origin = getRequestHeader('Origin');
if (origin) {
setResponseHeader('Access-Control-Allow-Origin', origin);
setResponseHeader('Access-Control-Allow-Credentials', 'true');
}
// Возвращаем gtag.js
returnResponse();
// Для тестирования работы аналитики устанавливаем режим debug
}, {'debug': true, 'id': 'G-XXXXXXXXXX'});
}
После создания шаблона, мы можем перейти к созданию самого клиента. В качестве типа клиента выбираем наш кастомный шаблон.
Подготовив таким образом серверный GTM, нам теперь нужно переместиться в обычный GTM и создать там тег, который будет вызывать и подгружать скрипт аналитики App+Web на наш сайт. Делаем это аналогичным образом — вначале создадим шаблон, затем на его основе сам тег. Данный тег не будет иметь триггера, так как мы его привяжем к тегу аналитики App+Web в качестве предшествующего тега (setup tag), и он будет загружаться перед тегом аналитики App+Web.
// Импортируем нужные API
const injectScript = require('injectScript');
const log = require('logToConsole');
// Добавляем тег <script> в DOM и загружаем gtag.js
const url = 'https://gtm.datainsights.ru/gtag.js';
injectScript(url, data.gtmOnSuccess, data.gtmOnFailure, url);
log('data =', data);
Поскольку мы подключили скрипт аналитики в режиме debug, если все сделано правильно после публикации контейнеров в консоли браузера вы должны видеть отладочные сообщения хитов аналитики App+Web.