Справочный центр › Данные и аккаунты

Код на сайте и события

Поставьте код Megametrics на сайт и присылайте заявки и оплаты с сайта, со своего сервера, из Stripe, Shopify и других сервисов — чтобы видеть, какие клики по рекламе к ним привели.

Подключить сайт

На странице Источники в панели Сайт и события нажмите Подключить сайт:

  1. Домены — по одному в строке, без https:// и пути: example.com. Поддомены подходят сами: с example.com принимаются и хиты с shop.example.com.
  2. Домены оплаты — если оплата идёт на другом домене, например pay.example.net. Поле необязательное. Код добавит к ссылкам на эти домены ID посетителя, и визит склеится с оплатой. Код должен стоять и на страницах оплаты.
  3. Согласие — Сначала согласие (по умолчанию) или Без запроса согласия, см. ниже.
  4. Нажмите Сохранить — появится код для вставки.

Поставить код

<script>window.mm=window.mm||function(){(mm.q=mm.q||[]).push(arguments)}</script>
<script async src="https://megametrics.app/t.js" data-site="SITE_KEY" data-consent="required"></script>

Скопируйте код в панели кнопкой Скопировать: в нём уже ключ вашего сайта и выбранный режим согласия. Код нужен на каждой странице, лучше всего — в <head>. Первая строка позволяет вызывать mm(...) ещё до загрузки скрипта: вызовы его дождутся. На странице — один код Megametrics: из двух кодов с разными ключами сайта работает только один.

  • HTML — вставьте код перед </head> на каждой странице или в общий шаблон.
  • Google Tag Manager — новый тег Пользовательский HTML с этим кодом и триггером Все страницы, затем опубликуйте контейнер.
  • WordPress — плагин для вставки кода в <head> или файл header.php темы, перед </head>.
  • Shopify — Online Store → Themes → … → Edit code, файл theme.liquid, перед </head>. Страницы оформления заказа код темы не выполняют: заказы присылает вебхук Shopify (ниже).
  • Tilda — Настройки сайта → Ещё → HTML-код для вставки внутрь HEAD, затем опубликуйте все страницы заново.
  • Webflow — Site settings → Custom code → Head code, затем опубликуйте сайт.

Проверить установку — Megametrics открывает главную страницу первого домена и ищет на ней код с ключом сайта; ответ появится под кнопкой. Код из Google Tag Manager проверка не найдёт: он появляется на странице только в браузере. Тогда смотрите на строку состояния — после первого визита она сменится на «Код работает».

Согласие

Сначала согласие (по умолчанию): пока на странице не вызван mm('consent', true), код ничего не пишет в браузер — ни cookie, ни хранилище — и ничего не отправляет. Вызовы до согласия ждут в памяти страницы и уходят после него. mm('consent', false) их стирает, а если согласие уже было — ещё и удаляет cookie кода. Согласие запоминается в cookie _mm_c на 395 дней, повторять вызов на каждой странице не нужно.

Вызовите его из своего баннера cookie, когда посетитель ответил:

mm('consent', true)   // согласился
mm('consent', false)  // отказался

Готовых связок с сервисами согласия пока нет — нужен этот вызов из обработчика вашего баннера.

Без запроса согласия — код работает сразу. Выбирайте этот режим, только если закон страны ваших посетителей это разрешает. В ЕС на такой идентификатор, как правило, нужно согласие.

События

Сам код отправляет только просмотры страниц: при загрузке и при смене адреса без перезагрузки (history.pushState, replaceState, кнопка «Назад»). Заявки и оплаты добавьте вызовом на сайте:

mm('event', 'Lead')
mm('event', 'Purchase', { value: 120.5, currency: 'USD', order_id: 'A-1' })
  • Имя события — до 80 символов. Конверсиями сразу считаются Lead, Sign up, Start trial, Purchase, Schedule, Subscribe и Complete registration. Остальные события отметьте переключателем Конверсия в таблице событий.
  • value — ценность, currency — трёхбуквенный код валюты ISO 4217, order_id — номер заказа.
  • Событие с тем же именем и тем же order_id засчитывается один раз — откуда бы ни пришёл повтор: из браузера, с сервера или из вебхука. Перезагрузка страницы «Спасибо за заказ» оплату не удвоит.

Кто посетитель: identify

После формы или входа передайте почту или телефон:

mm('identify', { email: 'anna@example.com', phone: '+4915112345678' })

Код считает от них хэш SHA-256 прямо в браузере: сами почта и телефон на сервер не уходят. Хэш склеивает визиты одного человека с разных устройств и браузеров: если та же почта пришла от другого посетителя, их истории сливаются в одну. Телефон пишите в международном формате, с кодом страны: в хэш идут только цифры и ведущий «+», поэтому 0151 … и +49 151 … дадут разные хэши.

Токен для событий с сервера

Оплата часто подтверждается на сервере, а не на странице. Чтобы склеить её с визитом и рекламным кликом, возьмите на сайте токен посетителя и передайте его своему серверу — например, скрытым полем формы:

mm('token', function (token) {
  document.querySelector('input[name="mm_token"]').value = token
})

Сервер отправит токен в поле mm_token события. Для Stripe Checkout положите его в metadata.mm_token сессии оплаты (или в client_reference_id, если это поле свободно). До согласия посетителя токена нет.

События с сервера

POST /api/projects/<проект>/events с ключом API, у которого отмечено Может ещё отправлять события. Ключи создаёт владелец или администратор на странице ИИ и API, см. «Claude, ChatGPT и API». Как любой ключ API, такой ключ ещё и читает все данные пространства: отдавайте его сервису форм или CRM, только если им доверяете.

curl -X POST -H "Authorization: Bearer $MEGAMETRICS_KEY" -H "Content-Type: application/json" \
  -d '{"event_name": "Purchase", "mm_token": "<токен с сайта>", "email": "anna@example.com",
       "value": 120.5, "currency": "USD", "order_id": "A-1"}' \
  https://megametrics.app/api/projects/<проект>/events
  • event_name — обязательно, от 1 до 80 символов.
  • event_time — дата ISO или Unix-секунды; по умолчанию — время приёма.
  • mm_token — токен посетителя с сайта.
  • email или email_sha256, phone или phone_sha256 — почта и телефон как есть или хэшем SHA-256. Перед хэшем почту приведите к нижнему регистру и уберите пробелы по краям, в телефоне оставьте только цифры и ведущий «+».
  • external_id — ваш ID человека, например номер клиента в CRM.
  • value и currency — ценность и код валюты из трёх заглавных букв, например USD.
  • order_id — номер заказа.
  • idempotency_key — ключ повтора.

Почту и телефон, присланные как есть, Megametrics сразу превращает в хэш и нигде не хранит — ни в базе, ни в журналах.

Повторы: с order_id событие засчитывается один раз на имя и заказ; без него — один раз на idempotency_key; без обоих каждый вызов — новое событие. Ответ — {"id": "…", "duplicate": false}; true значит, что такое событие уже было и второе не записано.

Вебхуки: Stripe, Shopify и любой сервис

В панели Сайт и события, в разделе Вебхуки, создайте приёмник — панель покажет адрес для вставки. В карточке приёмника видно время последнего приёма и последнюю ошибку. Запрос с неверной подписью отклоняется. Если запрос с верной подписью разобрать не удалось, ошибка появится в карточке, а отправитель всё равно получит ответ «принято», чтобы не повторять запрос без конца.

Stripe и Shopify показывают секрет подписи только после того, как в них добавлен адрес. Поэтому их карточка сначала даёт адрес, а секрет вставляется потом. Пока секрет не сохранён, запросы на адрес не принимаются.

Stripe

  1. Нажмите Подключить Stripe и скопируйте адрес из карточки.
  2. В Stripe откройте Webhooks и добавьте новый адрес (endpoint): вставьте адрес и выберите события checkout.session.completed, checkout.session.async_payment_succeeded, customer.subscription.created и invoice.paid.
  3. Скопируйте Signing secret этого адреса (начинается с whsec_), вставьте его в карточку и нажмите Сохранить секрет.

Что получается из событий Stripe:

  • Оплаченная checkout.session.completed → Purchase: сумма, валюта, почта покупателя, ID сессии как order_id; токен посетителя — из metadata.mm_token или client_reference_id. Суммы в валютах без копеек, вроде JPY и KRW, не делятся на 100. Сессия без оплаты — пробный период, карта на будущее — не покупка.
  • При отложенной оплате (SEPA Direct Debit, ACH, Boleto) сессия завершается неоплаченной, а Purchase приходит с checkout.session.async_payment_succeeded, когда деньги дошли.
  • customer.subscription.created со статусом trialing → Start trial.
  • invoice.paid → Subscribe, один раз на подписку: за первый оплаченный счёт новой подписки, а с пробным периодом — за первую оплату после него.

Остальные события Stripe принимаются и пропускаются.

Shopify

  1. Нажмите Подключить Shopify и скопируйте адрес из карточки.
  2. В Shopify: Settings → Notifications → Webhooks → Create webhook, событие Order creation, формат JSON, адрес из карточки.
  3. Под списком вебхуков Shopify показывает ключ, которым они подписаны. Скопируйте его, вставьте в карточку и нажмите Сохранить секрет.

Новый заказ становится событием Purchase: сумма заказа, валюта, почта покупателя, номер заказа. Если в адресе первой страницы визита (landing_site) были метки utm_* или метка клика, покупателю добавляется касание на время заказа. Так последний клик виден даже без кода в теме магазина.

Любой сервис

  1. Создайте карточку Любой сервис: имя события (например, Lead) и пути к полям в теле запроса через точку: data.customer.email. Пути задаются для email, phone, value, currency, order_id, mm_token, event_time, external_id и idempotency_key.
  2. Панель покажет адрес и секрет. Секрет показывается один раз — сохраните его сразу.
  3. Сервис подписывает каждый запрос: заголовок X-Megametrics-Signature: sha256=<hex>, где <hex> — HMAC-SHA256 тела запроса по секрету.

Сервисы повторяют доставку после таймаута. Поэтому без order_id и idempotency_key запрос с точно тем же телом засчитывается один раз.

body='{"data": {"customer": {"email": "anna@example.com"}, "total": 120.5}}'
sig=$(printf '%s' "$body" | openssl dgst -sha256 -hmac "$SECRET" | sed 's/^.* //')
curl -X POST -H "Content-Type: application/json" -H "X-Megametrics-Signature: sha256=$sig" \
  -d "$body" https://megametrics.app/hooks/<id>

Что видно и где

Всё — в панели Сайт и события на странице Источники:

  • Строка состояния: «Код ещё не замечен на сайте», «Код работает» с числом визитов за 24 часа, «За сутки ни одного хита» или «Хиты приходят с домена не из списка» — с кнопкой Добавить домен. Если сайту нужно внимание, в сводке вверху страницы появляется отметка Сайт.
  • События — имя, откуда приходит (сайт, сервер, Stripe, Shopify, вебхук), сколько за 7 дней, последнее и переключатель Конверсия.
  • Журнал — последние 50 хитов и событий; пока журнал открыт, он обновляется каждые 5 секунд. У новых визитов указаны источник и канал. Хэши показаны первыми 6 символами.
  • Визиты за месяц — сколько использовано из лимита тарифа. Тот же счётчик — на странице Тариф.

Какие кампании привели к заявкам и оплатам, видно на странице Кампании в наборе Атрибуция, вместе с путём каждого покупателя, — см. «Атрибуция и пути покупателей». Те же конверсии можно отправлять обратно в Meta и Google Ads — см. «Отправка конверсий в рекламные кабинеты».

Визит — это новый сеанс. Он начинается, если посетитель не был активен 30 минут или пришёл по ссылке с метками utm_* или меткой клика. У визита записывается канал:

  • платный — есть метка клика или платный utm_medium: cpc, ppc, paid, cpm, display, retargeting и похожие;
  • почта — utm_medium=email;
  • поиск — переход из Google, Bing, Яндекса, DuckDuckGo и других поисковиков;
  • соцсети — переход из Facebook, Instagram, X, LinkedIn, VK, TikTok, YouTube, Telegram и других соцсетей;
  • переход — с любого другого сайта (переход со своих доменов и доменов оплаты переходом не считается);
  • прямой — без источника.

Метки кликов: gclid, gbraid, wbraid — Google Ads; fbclid — Meta; ttclid — TikTok; msclkid — Microsoft Advertising; li_fat_id — LinkedIn; yclid — Яндекс Директ; ScCid — Snapchat; twclid — X; epik — Pinterest. Один fbclid визит платным не делает: Facebook ставит его и на обычные ссылки. Нужен ещё платный utm_medium или utm_id. Как поставить метки в объявления — в статье «Метки в рекламных ссылках».

Наблюдатель видит панель целиком. Участник ещё подключает сайт, отмечает конверсии и создаёт вебхуки. Администратор и владелец ещё отключают сбор и удаляют данные человека.

Ограничения

  • Блокировщики. Блокировщики рекламы и трекеров могут не пустить код, и часть визитов не дойдёт. События с сервера и вебхуки блокировщики не видят: заявки и оплаты надёжнее присылать так.
  • Safari хранит cookie, поставленные скриптом, не дольше 7 дней. Кто вернулся через неделю, выглядит новым посетителем: его прошлый клик склеится с покупкой, только если он снова оставит ту же почту или телефон.
  • Отпечатка браузера нет. Человека мы узнаём только по нашему cookie, меткам кликов и хэшу почты или телефона. Поэтому людей мы узнаём хуже, чем сервисы с отпечатком, — это сознательно.
  • Лимит визитов в месяц на пространство: пробный период — 100 000, Starter — 10 000, Growth — 100 000, Agency — 500 000. Месяц — календарный, по UTC. Сверх 120 % лимита просмотры страниц до конца месяца не принимаются, события принимаются всегда. Тариф сам не повышается.
  • Частота — до 30 хитов в секунду на сайт и до 10 в секунду с одного адреса; лишние отклоняются.
  • Боты. Хиты поисковых роботов, сервисов предпросмотра ссылок и браузеров под управлением программ не принимаются.
  • Чужие домены. Хиты с доменов не из списка не записываются; их число видно в строке состояния.

Что мы храним и сколько

  • Хиты — адрес страницы, откуда пришёл посетитель, тип устройства — 30 дней. Значения параметров адреса с почтой, телефоном или именем (email, phone, name, first_name и похожие, или «+» с цифрами) стираются: форма, отправленная GET, не оставляет контакты в адресе.
  • Визиты с каналом, метками, меткой клика и страницей входа, события с ценностью, связи посетителей с людьми и хэши почты и телефона — 25 месяцев.
  • Не храним: IP-адрес, страну, отпечаток браузера, почту и телефон как есть. Тип устройства — телефон, планшет или компьютер — определяется по User-Agent при приёме. Сам User-Agent хранится только у событий с сайта, не у просмотров страниц, столько же, сколько событие: он нужен Meta, когда в неё отправляются конверсии.

Cookie, которые код ставит на вашем сайте, на вашем домене:

  • _mm_v — ID посетителя, 395 дней;
  • _mm_s — ID сеанса, живёт 30 минут без активности;
  • _mm_c — посетитель согласился, 395 дней.

Для склейки доменов код добавляет к ссылкам на домены оплаты параметр _mm с ID посетителя и временем клика. Страница оплаты принимает его 2 минуты и убирает из адреса: ссылка, пересланная кому-то позже, посетителя не переносит.

Вы — контролёр данных своих посетителей, Megametrics — обработчик по вашему поручению. Условия — в договоре обработки данных, что мы говорим посетителям — в политике конфиденциальности. Расскажите о коде и cookie в своей политике и спрашивайте согласие, где этого требует закон.

Перестать собирать (администратор и владелец) удаляет настройку сайта: хиты больше не принимаются, а собранное остаётся до конца срока хранения. Отправка конверсий в Meta и Google Ads тоже выключается. Удаление проекта удаляет всё.

Удалить данные человека

Администратор удаляет всё, что есть о человеке, — хиты, визиты, события и связи — формой Удалить данные человека внизу панели: по почте, телефону или ID посетителя из cookie _mm_v. Почту и телефон форма превращает в хэш прямо в браузере.

Через API — с сессией администратора:

DELETE /api/projects/<проект>/people?email=<SHA-256 почты>

Вместо email можно передать phone (тоже хэшем SHA-256), external_id (ваш ID как есть) или visitor. Почта и телефон — только хэшем, по тем же правилам, что у событий с сервера: адрес запроса пишут журналы сервера, и самой почте там не место. В ответе — сколько строк удалено в каждой таблице. Из резервных копий данные уходят в течение 30 дней. Копии касаний и событий, уже перенесённые в склад, не удаляются: удалите их в хранилище.

Посетители из России

Закон 152-ФЗ требует, чтобы персональные данные граждан России сначала записывались в базы на серверах в России. Сервер Megametrics — в Германии. Поэтому пока не ставьте код на сайты для посетителей из России и не присылайте события о них с сервера и из вебхуков.

Дальше: Отправка конверсий в рекламные кабинеты

Не нашли ответ?

Напишите нам — ответит человек в течение рабочего дня.