{
  "exportFormatVersion": 2,
  "exportTime": "2026-08-10 00:00:00",
  "containerVersion": {
    "path": "accounts/0/containers/0/versions/0",
    "accountId": "0",
    "containerId": "0",
    "containerVersionId": "0",
    "container": {
      "path": "accounts/0/containers/0",
      "accountId": "0",
      "containerId": "0",
      "name": "MediaMagic — Reten Pilot (Kadam + ExoClick)",
      "publicId": "GTM-0000000",
      "usageContext": ["WEB"],
      "fingerprint": "0"
    },
    "tag": [
      {
        "accountId": "0",
        "containerId": "0",
        "tagId": "1",
        "name": "magicpix — заглушка (визит, click-id, 1st-party кука)",
        "type": "html",
        "notes": "СТАБ пилота: ловит click-id из URL (mm_kdm — макрос Kadam {click_id}, mm_exo — токен ExoClick {conversions_tracking}), хранит в localStorage + опциональной 1st-party куке, шлёт визит в приёмник /pb/collect. Боевой magicpix заменит этот тег. RECEIVER/KEY поправить под стенд.",
        "parameter": [
          {
            "type": "TEMPLATE",
            "key": "html",
            "value": "<script>\n(function () {\n  // magicpix — ЗАГЛУШКА для пилота. Боевой magicpix заменит этот тег.\n  var RECEIVER = 'https://reten-pilot.pages.dev'; // постбэк-приёмник пилота\n  var KEY = '';          // PB_KEY приёмника, если задан\n  var SET_COOKIE = true; // 1st-party кука — опция, решение владельца (consent!)\n  function qp(n) { var m = location.search.match(new RegExp('[?&]' + n + '=([^&]*)')); if (!m) { return ''; } try { return decodeURIComponent(m[1]); } catch (e) { return ''; } }\n  function store(k, v) { try { localStorage.setItem(k, v); } catch (e) {} if (SET_COOKIE) { document.cookie = k + '=' + encodeURIComponent(v) + '; path=/; max-age=7776000; SameSite=Lax'; } }\n  function read(k) { try { var v = localStorage.getItem(k); if (v) return v; } catch (e) {} var m = document.cookie.match(new RegExp('(?:^|; )' + k + '=([^;]*)')); if (!m) { return ''; } try { return decodeURIComponent(m[1]); } catch (e) { return ''; } }\n  var uid = read('_mm_uid');\n  if (!uid) { uid = 'mm-' + Math.random().toString(36).slice(2) + '-' + Date.now().toString(36); store('_mm_uid', uid); }\n  var kdm = qp('mm_kdm'); if (kdm) store('_mm_kdm', kdm);\n  var exo = qp('mm_exo'); if (exo && exo.length <= 700) store('_mm_exo', exo); // click ID ExoClick ≤ 700 символов\n  var payload = { uid: uid, page: location.pathname };\n  var k2 = kdm || read('_mm_kdm'); if (k2) payload.kadam_click_id = k2;\n  var e2 = exo || read('_mm_exo'); if (e2) payload.exo_tag = e2;\n  try {\n    var url = RECEIVER + '/pb/collect' + (KEY ? '?key=' + encodeURIComponent(KEY) : '');\n    var body = JSON.stringify(payload);\n    // text/plain — чтобы sendBeacon не требовал CORS preflight; приёмник парсит JSON из текста\n    if (navigator.sendBeacon) { navigator.sendBeacon(url, new Blob([body], { type: 'text/plain;charset=UTF-8' })); }\n    else { fetch(url, { method: 'POST', body: body, keepalive: true }); }\n  } catch (e) {}\n  window.dataLayer = window.dataLayer || [];\n  window.dataLayer.push({ event: 'mm_ready', mm_uid: uid });\n})();\n</script>"
          },
          { "type": "BOOLEAN", "key": "supportDocumentWrite", "value": "false" }
        ],
        "firingTriggerId": ["2147479553"],
        "tagFiringOption": "ONCE_PER_EVENT"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "tagId": "2",
        "name": "Kadam — пиксель аудитории (вставить код из кабинета)",
        "type": "html",
        "notes": "ПЛЕЙСХОЛДЕР. Код пикселя выдаёт кабинет Kadam: Audiences → создать аудиторию (имя + период участия в днях) → «Save and get the code». Вставить полученный код вместо комментария ниже. Источник: research/providers.json (Kadam, retargeting).",
        "parameter": [
          {
            "type": "TEMPLATE",
            "key": "html",
            "value": "<!-- KADAM_PIXEL_CODE_HERE:\n  1) Кабинет Kadam → Audiences → создать аудиторию → «Save and get the code»\n  2) Вставить выданный код пикселя сюда целиком (заменив этот комментарий)\n  3) Максимум периода участия аудитории в аудите не подтверждён («365 дней» — неверифицировано) — проверить в кабинете\n-->"
          },
          { "type": "BOOLEAN", "key": "supportDocumentWrite", "value": "false" }
        ],
        "firingTriggerId": ["2147479553"],
        "tagFiringOption": "ONCE_PER_EVENT"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "tagId": "3",
        "name": "ExoClick — цель LP (визит лендинга)",
        "type": "html",
        "notes": "Пиксель цели ExoClick: метит ВСЕХ визитёров страницы (не только кликеров рекламы Exo). GOAL_ID_LP подставить после создания Conversion Goal в кабинете. Рекомендация доков: копить данные пикселя ~3 дня до включения Behavioral Retargeting. ВАЖНО: после Merge в общий контейнер клиента ограничить триггер путями лендинга (Page View + фильтр Page Path), иначе цель «визит LP» посчитает все страницы продукта и размоет сегментацию воронки. Источник: research/providers.json (ExoClick, retargeting).",
        "parameter": [
          {
            "type": "TEMPLATE",
            "key": "html",
            "value": "<script src=\"https://a.magsrv.com/tag_gen.js\" data-goal=\"GOAL_ID_LP\"></script>\n<!-- GOAL_ID_LP: подставить ID цели «визит LP» из кабинета ExoClick -->"
          },
          { "type": "BOOLEAN", "key": "supportDocumentWrite", "value": "false" }
        ],
        "firingTriggerId": ["2147479553"],
        "tagFiringOption": "ONCE_PER_EVENT"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "tagId": "4",
        "name": "ExoClick — цель «регистрация»",
        "type": "html",
        "notes": "Срабатывает на dataLayer-событии reg. GOAL_ID_REG подставить после создания цели. НЕ включать одновременно с S2S-постбэком на ту же цель без дедупликации (двойной счёт).",
        "parameter": [
          {
            "type": "TEMPLATE",
            "key": "html",
            "value": "<script src=\"https://a.magsrv.com/tag_gen.js\" data-goal=\"GOAL_ID_REG\"></script>\n<!-- GOAL_ID_REG: подставить ID цели «регистрация» из кабинета ExoClick -->"
          },
          { "type": "BOOLEAN", "key": "supportDocumentWrite", "value": "false" }
        ],
        "firingTriggerId": ["10"],
        "tagFiringOption": "ONCE_PER_EVENT"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "tagId": "5",
        "name": "ExoClick — цель «депозит»",
        "type": "html",
        "notes": "Срабатывает на dataLayer-событии dep. GOAL_ID_DEP подставить после создания цели. Эта же цель в кампаниях ExoClick служит Negative-целью (саппрешен вернувшихся).",
        "parameter": [
          {
            "type": "TEMPLATE",
            "key": "html",
            "value": "<script src=\"https://a.magsrv.com/tag_gen.js\" data-goal=\"GOAL_ID_DEP\"></script>\n<!-- GOAL_ID_DEP: подставить ID цели «депозит» из кабинета ExoClick -->"
          },
          { "type": "BOOLEAN", "key": "supportDocumentWrite", "value": "false" }
        ],
        "firingTriggerId": ["11"],
        "tagFiringOption": "ONCE_PER_EVENT"
      },
      {
        "accountId": "0",
        "containerId": "0",
        "tagId": "6",
        "name": "S2S-форвардер reg/dep → приёмник (ОБКАТКА, на паузе)",
        "type": "html",
        "notes": "ВЫКЛЮЧЕН по умолчанию. Клиентский стаб для обкатки петли: пересылает reg/dep в приёмник (/pb/kadam + /pb/exo), который бьёт S2S-постбэки сетей. В бою события reg/dep должен слать СЕРВЕР продукта (вебхук), не браузер. Не включать одновременно с пиксельными целями Exo на ту же цель (двойной счёт).",
        "paused": true,
        "parameter": [
          {
            "type": "TEMPLATE",
            "key": "html",
            "value": "<script>\n(function () {\n  var RECEIVER = 'https://reten-pilot.pages.dev';\n  var KEY = '';\n  function read(k) { try { var v = localStorage.getItem(k); if (v) return v; } catch (e) {} var m = document.cookie.match(new RegExp('(?:^|; )' + k + '=([^;]*)')); if (!m) { return ''; } try { return decodeURIComponent(m[1]); } catch (e) { return ''; } }\n  var ev = '{{_event}}';\n  var value = '{{DLV — value}}';\n  var product = '{{DLV — product}}';\n  // GTM подставляет строку 'undefined', если переменной нет в dataLayer (напр., value у события reg)\n  if (value === 'undefined') { value = ''; }\n  if (product === 'undefined') { product = ''; }\n  var uid = read('_mm_uid');\n  if (!uid) { return; }\n  ['kadam', 'exo'].forEach(function (net) {\n    var u = RECEIVER + '/pb/' + net + '?event=' + encodeURIComponent(ev) + '&uid=' + encodeURIComponent(uid);\n    if (value) { u += '&value=' + encodeURIComponent(value); }\n    if (product) { u += '&product=' + encodeURIComponent(product); }\n    if (KEY) { u += '&key=' + encodeURIComponent(KEY); }\n    try { fetch(u, { method: 'GET', keepalive: true }); } catch (e) {}\n  });\n})();\n</script>"
          },
          { "type": "BOOLEAN", "key": "supportDocumentWrite", "value": "false" }
        ],
        "firingTriggerId": ["10", "11"],
        "tagFiringOption": "ONCE_PER_EVENT"
      }
    ],
    "trigger": [
      {
        "accountId": "0",
        "containerId": "0",
        "triggerId": "10",
        "name": "ev — reg (регистрация)",
        "type": "CUSTOM_EVENT",
        "customEventFilter": [
          {
            "type": "EQUALS",
            "parameter": [
              { "type": "TEMPLATE", "key": "arg0", "value": "{{_event}}" },
              { "type": "TEMPLATE", "key": "arg1", "value": "reg" }
            ]
          }
        ]
      },
      {
        "accountId": "0",
        "containerId": "0",
        "triggerId": "11",
        "name": "ev — dep (депозит)",
        "type": "CUSTOM_EVENT",
        "customEventFilter": [
          {
            "type": "EQUALS",
            "parameter": [
              { "type": "TEMPLATE", "key": "arg0", "value": "{{_event}}" },
              { "type": "TEMPLATE", "key": "arg1", "value": "dep" }
            ]
          }
        ]
      }
    ],
    "variable": [
      {
        "accountId": "0",
        "containerId": "0",
        "variableId": "20",
        "name": "DLV — product",
        "type": "v",
        "notes": "Опциональная переменная контракта dataLayer: бренд/продукт (мультибренд). Дефолт '' — чтобы GTM не подставлял строку 'undefined' в Custom HTML.",
        "parameter": [
          { "type": "INTEGER", "key": "dataLayerVersion", "value": "2" },
          { "type": "BOOLEAN", "key": "setDefaultValue", "value": "true" },
          { "type": "TEMPLATE", "key": "defaultValue", "value": "" },
          { "type": "TEMPLATE", "key": "name", "value": "product" }
        ]
      },
      {
        "accountId": "0",
        "containerId": "0",
        "variableId": "21",
        "name": "DLV — value",
        "type": "v",
        "notes": "Сумма депозита для события dep (уйдёт в value S2S-постбэка ExoClick). Дефолт '' — чтобы GTM не подставлял строку 'undefined' в Custom HTML.",
        "parameter": [
          { "type": "INTEGER", "key": "dataLayerVersion", "value": "2" },
          { "type": "BOOLEAN", "key": "setDefaultValue", "value": "true" },
          { "type": "TEMPLATE", "key": "defaultValue", "value": "" },
          { "type": "TEMPLATE", "key": "name", "value": "value" }
        ]
      },
      {
        "accountId": "0",
        "containerId": "0",
        "variableId": "22",
        "name": "URL — mm_kdm (click_id Kadam)",
        "type": "u",
        "notes": "Для QA в Preview: click_id Kadam из URL лендинга (?mm_kdm={click_id}). Имя параметра — наша конвенция пилота.",
        "parameter": [
          { "type": "TEMPLATE", "key": "component", "value": "QUERY" },
          { "type": "TEMPLATE", "key": "queryKey", "value": "mm_kdm" }
        ]
      },
      {
        "accountId": "0",
        "containerId": "0",
        "variableId": "23",
        "name": "URL — mm_exo (click ID ExoClick)",
        "type": "u",
        "notes": "Для QA в Preview: click ID ExoClick из URL кампании (?mm_exo={conversions_tracking}, до 700 символов). Имя параметра — наша конвенция пилота.",
        "parameter": [
          { "type": "TEMPLATE", "key": "component", "value": "QUERY" },
          { "type": "TEMPLATE", "key": "queryKey", "value": "mm_exo" }
        ]
      }
    ],
    "fingerprint": "0"
  }
}
