Справочный центр › Данные и аккаунты
Код на сайте и события
Поставьте код Megametrics на сайт и присылайте заявки и оплаты с сайта, со своего сервера, из Stripe, Shopify и других сервисов — чтобы видеть, какие клики по рекламе к ним привели.
Подключить сайт
На странице Источники в панели Сайт и события нажмите Подключить сайт:
- Домены — по одному в строке, без
https://и пути:example.com. Поддомены подходят сами: сexample.comпринимаются и хиты сshop.example.com. - Домены оплаты — если оплата идёт на другом домене, например
pay.example.net. Поле необязательное. Код добавит к ссылкам на эти домены ID посетителя, и визит склеится с оплатой. Код должен стоять и на страницах оплаты. - Согласие — Сначала согласие (по умолчанию) или Без запроса согласия, см. ниже.
- Нажмите Сохранить — появится код для вставки.
Поставить код
<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
- Нажмите Подключить Stripe и скопируйте адрес из карточки.
- В Stripe откройте Webhooks и добавьте новый адрес (endpoint): вставьте адрес и выберите события
checkout.session.completed,checkout.session.async_payment_succeeded,customer.subscription.createdиinvoice.paid. - Скопируйте 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
- Нажмите Подключить Shopify и скопируйте адрес из карточки.
- В Shopify: Settings → Notifications → Webhooks → Create webhook, событие Order creation, формат JSON, адрес из карточки.
- Под списком вебхуков Shopify показывает ключ, которым они подписаны. Скопируйте его, вставьте в карточку и нажмите Сохранить секрет.
Новый заказ становится событием Purchase: сумма заказа, валюта, почта покупателя, номер заказа. Если в адресе первой страницы визита (landing_site) были метки utm_* или метка клика, покупателю добавляется касание на время заказа. Так последний клик виден даже без кода в теме магазина.
Любой сервис
- Создайте карточку Любой сервис: имя события (например,
Lead) и пути к полям в теле запроса через точку:data.customer.email. Пути задаются дляemail,phone,value,currency,order_id,mm_token,event_time,external_idиidempotency_key. - Панель покажет адрес и секрет. Секрет показывается один раз — сохраните его сразу.
- Сервис подписывает каждый запрос: заголовок
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 — в Германии. Поэтому пока не ставьте код на сайты для посетителей из России и не присылайте события о них с сервера и из вебхуков.
Дальше: Отправка конверсий в рекламные кабинеты
Не нашли ответ?
Напишите нам — ответит человек в течение рабочего дня.