Если ваш сайт публикует деловые события в window.dataLayer (потому что вы настроили Google Tag Manager под Google Analytics), эти события уже доходят до Skomi. Переписывать нечего, никакого переходника ставить не надо, и вторую отправку рядом с первой добавлять тоже.
Эта страница о том, что происходит, что не происходит и какие пределы стоит знать, прежде чем на это полагаться.
Делать ничего не надо
Поставьте сниппет. Skomi подцепляется к dataLayer и читает то, что туда отправляют.
Работают обе формы:
// форма с объектом
dataLayer.push({ event: 'purchase', value: 49.00, currency: 'EUR' });
// gtag, который отправляет свои аргументы, а не объект
gtag('event', 'purchase', { value: 49.00, currency: 'EUR' });
GTM можно оставить. Google Analytics можно оставить работать рядом со Skomi, пока вы их сравниваете, — это разумный способ переезжать, и здесь ничто ему не мешает.
Почему это работает, какой бы скрипт ни загрузился первым
GTM заменяет dataLayer.push своей обёрткой, когда gtm.js догружается, и оба скрипта загружаются асинхронно. Тот, что приземлился вторым, попросту переписал бы обёртку другого и тихо проглотил бы его события.
Skomi ставит push как свойство с доступом, поэтому присваивание от GTM приходит в сеттер и становится той функцией, которой Skomi делегирует. Наша остаётся впереди, как бы гонка ни разрешилась. Порядок ваших тегов значения не имеет.
Что захватывается
Имя события — event в объекте или второй аргумент gtag.
Каждое свойство, разложенное в пути через точку, потому что свойства события хранятся как текст:
dataLayer.push({
event: 'purchase',
transaction_id: 'ORD-1234',
value: 49.00,
currency: 'EUR',
ecommerce: { items: [{ item_name: 'Pro plan', price: 49.00 }] }
});
приходит как transaction_id, value, currency, ecommerce.items.0.item_name, ecommerce.items.0.price.
Денежная величина, читаемая из value или из ecommerce.value. Строки принимаются, потому что значения в dataLayer часто приходят из шаблона текстом.
Валюта, из currency или ecommerce.currency, тем же способом. Событие магазина в GA4 и так несёт { value, currency } вместе, поэтому сайт, настроенный под Google, шлёт Skomi полностью оценённую покупку, сам того не зная.
Номер заказа. Сервер читает transaction_id из свойств, и повтор того же номера отбрасывается, а не считается, а это важнее, чем звучит. Страница подтверждения срабатывает при каждой загрузке: обновление, кнопка «назад», повторное открытие письма через неделю. Без номера заказа это три продажи.
Что не захватывается
Собственные события жизненного цикла GTM. Всё в пространстве имён gtm. и ключи, которыми GTM управляет собственной отправкой: event, eventCallback, eventTimeout, eventModel, _clear. О вашем деле они не говорят ничего и превосходили бы настоящие события в несколько раз.
Всё, что за пределами ограничений. Они настоящие, и знать о них стоит до того, как вы их обнаружите:
| Ограничение | Значение |
|---|---|
| Свойств на событие | 25 |
| Глубина вложенности | 3 уровня |
| Имя свойства | 64 символа |
| Значение свойства | 255 символов |
| Номер заказа | 128 символов |
⚠ Большой массив ecommerce.items не поместится. Каждая позиция даёт несколько свойств, поэтому заказ из десяти позиций заметно превосходит двадцать пять, и остаток отбрасывается, а не обрезается по позициям. Если подробности по позициям для вас важны, им место в отчётности вашего магазина: Skomi записывает заказ, его сумму и его валюту, а не его содержимое. Измерения товара нет нигде в продукте.
Собственные интеграции Google. Сигналы Consent Mode, выгрузка аудиторий, связка с Google Ads. Это дела между GTM и Google, и Skomi в них не участвует.
Где события появляются
Под своими именами, рядом с теми, что Skomi захватывает сам. У каждого события записано, откуда оно пришло: datalayer для этих, api для написанного руками вызова skomi.track(), auto для внешних ссылок и скачиваний, которые Skomi захватывает без просьбы, так что вы отличите событие, которое запросили, от того, которое просто разрешили.
Превратите любое из них в цель, чтобы получить по нему конверсию.
Если вы предпочитаете вызывать напрямую
skomi.track('purchase', { plan: 'pro' }, 49.00, 'EUR', 'ORD-1234');
Имя, свойства, величина, валюта, номер заказа, последние три необязательны. Берите это для событий, которым незачем идти через GTM. Сайту, у которого dataLayer нет вовсе, он и не нужен.
Как проверить, что сработало
Отправьте тестовое событие из консоли на настоящем домене:
dataLayer.push({ event: 'test_event', value: 1, currency: 'EUR' });
Потом поищите test_event в своих событиях. Если его там нет, пройдите что проверить, когда сниппет не работает, и учтите, что с localhost не собирается ничего, потому что это не тот домен, который вы зарегистрировали.