- Трекинг конверсий в CCV Shop наиболее полон, когда каждый оплаченный заказ отправляется из данных заказа CCV на сервере, а на странице успешного заказа стоит сниппет, который связывает заказ с кликом по рекламе.
- Один клик по Create webhook — и CCV Shop сообщает о каждом заказе в момент, когда он помечен как оплаченный, причём каждая отправка должна содержать приватный токен вашего магазина.
- Заказы CCV Shop не содержат IP-адреса покупателя, поэтому сниппет на странице успешного заказа в CCV Shop важнее, чем на большинстве платформ.
- Проверка раз в 5 минут смотрит только недавно созданные заказы, поэтому заказы, оплаченные через несколько дней, зависят от вебхука: держите его активным.
- Meta отклоняет серверные события спустя более чем 7 дней после создания заказа, поэтому очень поздний банковский перевод до Meta не доходит.
Трекинг конверсий в CCV Shop означает передачу каждого оплаченного заказа в вашем интернет-магазине CCV Shop на рекламные платформы, такие как Meta и TikTok, чтобы они засчитывали нужные объявления и оптимизировались по реальным продажам. Самый полный способ — отправлять каждую покупку из данных заказа CCV на сервере и добавить на страницу успешного заказа короткий сниппет, который связывает заказ с кликом по рекламе.
CCV Shop — это облачная платформа интернет-магазинов нидерландской компании CCV, которая сообщает о 17,000 работающих магазинов. В этом руководстве объясняется, как ROASaurus подключается к ней, как заказы связываются с кликами по рекламе, что доходит до Meta и TikTok, как выполнить настройку и тестирование и как работают поздние платежи. Общую идею смотрите в материале что такое серверный трекинг.
Как ROASaurus подключается к CCV Shop?
ROASaurus использует три части CCV Shop, все они описаны в документации API CCV:
| Часть CCV Shop | Для чего ее использует ROASaurus |
|---|---|
| REST API с публичным и секретным ключом | Читает каждый оплаченный заказ и его строки |
Вебхук для события orders.updated.ispaid | CCV сообщает о заказе в момент изменения его статуса оплаты |
Страница успешного заказа с Vertoshop.js | Сниппет читает там id заказа и связывает заказ с посетителем |
Почему браузерные пиксели не видят покупки в CCV Shop?
Браузерный пиксель сообщает о покупке, только когда браузер покупателя загружает страницу успешного заказа и запускается скрипт пикселя. Это ломается в нескольких распространённых ситуациях:
- Покупатель платит через редирект, например с помощью iDEAL, и закрывает вкладку до загрузки страницы успеха.
- Блокировщик рекламы или настройка приватности в браузере блокирует скрипт пикселя.
- Посетитель отклоняет маркетинговые cookie, поэтому пиксель не должен загружаться.
- Заказ оплачивается позже, банковским переводом или при доставке, когда браузер не участвует.
Во всех этих случаях CCV Shop всё равно помечает заказ как оплаченный. ROASaurus отправляет этот заказ с сервера, поэтому покупка передаётся независимо от того, что произошло в браузере. У сниппета на странице успеха другая задача: он сообщает ROASaurus, какому посетителю, а значит и какому клику по рекламе, принадлежит заказ.
Вебхук оплаты заказа и проверка раз в 5 минут
Что делает Create webhook
Когда вы нажимаете Create webhook, ROASaurus регистрирует вебхук CCV для события orders.updated.ispaid, которое CCV запускает при изменении свойства оплаты заказа. Адрес — это URL вебхука вашего магазина в ROASaurus, содержащий ключ магазина и приватный токен. CCV ничего не добавляет в вебхук, что идентифицировало бы магазин, а его документация советует включать идентификатор в адрес. Ключ магазина это и делает.
CCV выдаёт каждому вебхуку собственный секретный ключ из 32 символов. Когда CCV возвращает этот ключ, ROASaurus сохраняет его, и с этого момента каждая отправка должна содержать корректный заголовок x-hash. Каждая отправка также должна содержать токен вашего магазина. Получив отправку, ROASaurus игнорирует неоплаченные заказы, читает из API полный заказ и его строки и отправляет заказ, только когда CCV сообщает, что он оплачен.
Подписанные вызовы API
CCV требует подписывать каждый вызов API. ROASaurus отправляет три заголовка: x-public с вашим публичным ключом, x-date с текущим временем и x-hash. CCV отклоняет метку времени, которая отличается от времени его сервера более чем на 5 минут. Сам ваш секретный ключ никогда не отправляется.
API call (ROASaurus → CCV) x-hash = HMAC-SHA512( public_key|METHOD|uri|body|timestamp , secret_key ) Webhook (CCV → ROASaurus) x-hash = HMAC-SHA512( address|payload , webhook_key )
Проверка раз в 5 минут
Каждые 5 минут ROASaurus также запрашивает у CCV оплаченные заказы, созданные с момента его последней проверки, с перекрытием в 30 минут, и записывает те, которых у него ещё нет. CCV фильтрует заказы только по дате создания. Поэтому проверка находит заказы, оплаченные вскоре после оформления, а заказ, оплаченный через несколько дней, попадает в ROASaurus только через вебхук.
CCV считает успехом ответ 200, 201, 202 или 204. После ответа 307, 408, 503 или 504 он держит отправку открытой и повторяет её при следующем событии, а любой другой ответ помечает как неудачный. Он ждёт соединения 2 секунды и ответа 5 секунд.
Как заказ CCV Shop связывается с кликом по рекламе?
Чтобы засчитать объявление, платформе нужны идентификаторы клика посетителя, который сделал заказ, например click id Meta (fbc) и click id TikTok (ttclid). Скрипт ROASaurus сохраняет их для каждого посетителя, когда он приходит с рекламы. Этот visitor id ROASaurus не получает из заказа CCV, поэтому связывает заказы с посетителями другими способами:
| Метод | В CCV Shop | Как это работает |
|---|---|---|
| 1. Сниппет на странице успешного заказа | Да | Читает id заказа через Vertoshop.getOrder().getId(), а также сумму заказа и валюту и запускает покупку ROASaurus с event id order-58213 |
| 2. Более ранний email | Да | Хешированный email, который посетитель ранее указал на вашем сайте, в форме во всплывающем окне или через вызов Identify |
| 3. IP-адрес и браузер | Нет | Заказы CCV Shop не содержат IP-адреса или браузера покупателя, поэтому этому запасному способу не с чем сравнивать |
ROASaurus недолго ждёт перед отправкой каждой покупки, чтобы событие со страницы успеха могло прийти первым, и повторяет сопоставление в момент отправки. Страница Orders показывает результат по каждому заказу в столбце Matched by: thank_you, email или not matched.
Несопоставленный заказ всё равно уходит на ваши рекламные платформы с хешированными данными клиента из заказа. У него нет click id, а поскольку заказы CCV не содержат IP-адреса или браузера, нет и их. Это снижает долю событий, которые Meta может сопоставить с человеком; как Meta оценивает это, объясняет материал Event Match Quality. В атрибуции ROASaurus такой заказ отображается как прямой или неизвестный.
Что доходит до Meta и TikTok из заказа CCV?
| Данные заказа CCV | Отправляется как |
|---|---|
id | Event id order-58213 и id заказа |
total_price, currency | Сумма и валюта (EUR, когда CCV не указывает валюту) |
create_date | Время события |
| Email клиента, мобильный или обычный телефон, имя и фамилия | Хешируется с помощью SHA-256 |
| Город, почтовый индекс и код страны для выставления счёта | Хешируется с помощью SHA-256 |
| ID клиента | Хешированный внешний ID |
| Строки заказа: номер товара, id товара, количество, цена и название | Товары с id, количеством и ценой |
| IP-адрес и браузер | Нет в заказах CCV: берутся из события страницы успеха или из сопоставленного посетителя |
Meta получает Purchase через свой Conversions API, а TikTok — CompletePayment через свой Events API, оба с event id order-58213. TikTok теперь показывает CompletePayment в своих отчётах как Purchase. Если вы отметите опцию загрузки также браузерного пикселя, сниппет на странице успеха запускает те же события в браузере с тем же event id, а Meta и TikTok оставляют одну копию. Те же заказы уходят в Snapchat, Pinterest, Reddit, X, Microsoft Ads, Taboola, LinkedIn и другие рекламные платформы, если вы их подключили. Конверсии покупок Google Ads отправляются только из чекаута Shopify, поэтому ROASaurus не отправляет их из CCV Shop.
Как настроить трекинг конверсий в CCV Shop
- Добавьте магазин в ROASaurus
Перейдите в Add a store, выберите CCV Shop и введите адрес вашего магазина. Затем на вкладке Connection появятся ваш тег скрипта и сниппет для страницы успеха.
- Найдите свои ключи API
В CCV Shop откройте My webshop › Settings › General › API settings и нажмите New API key. Если этого раздела нет, сначала установите приложение API из CCV App Store.
- Добавьте скрипт на каждую страницу
Вставьте тег скрипта в Header HTML вашего магазина. В справочном центре CCV он находится в Mijn webshop › Instellingen › Lay-out › Layout, внизу страницы. Блок кода приложения в заголовке тоже подойдёт.
- Добавьте сниппет на страницу успеха
Перейдите в Mijn webshop › Instellingen › Algemeen › Teksten, откройте текст, который показывается после оформления заказа, переключитесь на Source и вставьте туда сниппет. Тогда CCV Shop будет запускать его на странице успешного заказа.
- Подключите API
На вкладке Connection введите публичный и секретный ключ. Заполняйте Shop URL, только если ваш API работает на другом домене, чем магазин. Сохраните, нажмите Test connection, затем Create webhook.
- Подключите рекламные платформы
В разделе Tracking & platforms используйте Connect with Facebook или Add pixel для Meta и Add pixel для TikTok. Отметьте опцию загрузки также браузерного пикселя.
Согласие
Вне Shopify скрипт ROASaurus считывает выбор посетителя из распространённых инструментов согласия: Cookiebot, OneTrust, баннеров IAB TCF и Google consent mode. При использовании другого cookie-баннера вызовите tlq('consent', true), когда посетитель принимает маркетинговые cookie, и tlq('consent', false), когда он отказывается. Пока посетитель не принял, у него нет visitor id и click id, а браузерные пиксели не срабатывают. Оплаченный заказ по-прежнему отправляется с сервера с хешированными данными клиента из заказа. Подробности объясняет справочная страница о согласии.
Как протестировать трекинг конверсий в CCV Shop?
- Откройте свой магазин с
?roasaurus=connectedв адресе. Предупреждение подтвердит, что скрипт работает.?roasaurus=debugвыводит в консоль браузера то, что он отправляет. - В Event log, в разделе Collected events, просмотры страниц должны показывать visitor id.
- Оформите заказ и оплатите его или отметьте как оплаченный. В Event log в разделе Collected events должно появиться событие Purchase с id заказа CCV в данных. Если его нет, сниппет на странице успеха не сработал.
- На вкладке Connection поле Last order received показывает заказ, а Last sync — последнюю 5-минутную проверку, вместе с ошибкой от CCV, если она была.
- В разделе Server deliveries в Event log для каждой подключённой платформы появляется строка со статусом sent и ответом платформы.
PageView visitor 51c0e9a7Скрипт на каждой страницеPurchase order-58213Сниппет страницы успешного заказаwebhook orders.updated.ispaidПодпись проверена, заказ оплаченMeta Purchase sentMatched by thank_youTikTok CompletePayment sentТот же event id, дедупликацияЧтобы увидеть событие в Meta, вставьте код из Events Manager › Test events в поле Test event code вашего пикселя Meta в ROASaurus и удалите его, когда закончите.
Поздние платежи и другие ограничения
Банковские переводы и наложенный платёж оплачиваются после оформления заказа. Вот что происходит с примером заказа с банковским переводом, начиная со дня оформления:
| Когда | Что происходит | Результат |
|---|---|---|
| День 0, при оформлении | Заказ создан, но не оплачен | Не отправлено: 5-минутная проверка запрашивает только оплаченные заказы |
| День 0, примерно через 35 минут | Время создания заказа выходит за окно проверки | Теперь сообщить о нём может только вебхук |
| День 3 | Вы помечаете заказ как оплаченный | Приходит вебхук, ROASaurus отправляет заказ. Времени события (день 0) уже 3 дня: Meta принимает его |
| Вместо этого день 9 | Вы помечаете заказ как оплаченный | Приходит вебхук, ROASaurus отправляет заказ. 9 дней — это больше 7: Meta отклоняет его |
- Наложенный платёж. ROASaurus отправляет такие заказы, когда CCV помечает их оплаченными, обычно после доставки. О том, когда считать такие заказы, см. трекинг наложенного платежа.
- Браузерные покупки до оплаты. Сниппет на странице успеха запускается при оформлении заказа, поэтому браузерные пиксели сообщают о заказе с банковским переводом до его оплаты. Если оплата приходит более чем через 48 часов, Meta и TikTok не могут объединить браузерную и серверную копии.
- Нет запасного варианта по IP. Добавьте сниппет на страницу успеха и, где можете, собирайте email раньше на своём сайте.
- Отмены и возвраты не отправляются. Как только покупка отправлена, она остаётся в рекламной платформе.
- Только просмотры страниц, без кода. Просмотры товаров и добавления в корзину определяются автоматически только в Shopify. В CCV Shop разработчик может отправлять их вызовом
tlqtrack.
На странице интеграции с CCV Shop в одном месте собраны сведения о подключении, а на странице справки о других интернет-магазинах CCV Shop сравнивается с другими платформами, к которым подключается ROASaurus, например Lightspeed.
Источники
- CCV Shop: API Documentatie
- CCV: Webshop API
- Meta for Developers: Server Event Parameters
- Meta for Developers: Handling Duplicate Pixel and Conversions API Events
- TikTok Ads Manager: About Event Deduplication
В ROASaurus
- Интеграция с CCV Shop
- Справка: Wix, Lightspeed и другие интернет-магазины
- Серверный трекинг
- Интеграция с Meta