Интеграция 1С-Битрикс с Roistat
Представьте: вы тратите на контекстную рекламу, а Roistat показывает только лиды, не видя выручку по каналам. Мы настраиваем интеграцию 1С-Битрикс с Roistat, чтобы связать заказы с посещениями и рассчитывать ROMI по каждому источнику. На одном проекте интернет-магазина 40% заказов теряли привязку к визиту из-за неправильной инициализации скрипта на динамических страницах. Бюджет в $4.5k–6.5k. уходил впустую. При среднем чеке $140–200. точная аналитика окупается за месяц. После интеграции ROMI по контексту вырос на 30%, а по таргету — на 15%, что позволило перераспределить бюджет с убыточных каналов. Экономия составила до 30% рекламного бюджета.
Согласно документации Roistat, идентификатор визита roistat_visit сохраняется в cookie на 7 дней и позволяет привязать заказ к источнику.
В отличие от стандартной аналитики, где вы видите только лиды, сквозная аналитика с Roistat даёт точную картину ROMI в 2 раза быстрее.
Как Roistat связывает визит с заказом?
Roistat использует JavaScript-счётчик, который присваивает каждому визиту уникальный идентификатор roistat_visit (число). Он сохраняется в cookie с TTL 7 дней (настраивается). Когда пользователь оформляет заказ, скрытое поле в форме передаёт это значение в заказ Битрикс. Без него Roistat не знает, какой рекламный канал привёл покупателя.
Что мешает корректной передаче roistat_visit?
Частая проблема — динамические формы (React, Vue). Скрипт Roistat может не успеть записать cookie до того, как форма попытается его прочитать. Решение — подписываться на событие roistat:inited и только после него инициализировать скрытое поле. Другая проблема — ajax-обновление формы после валидации. Нужно перезаполнять поле при каждом рендере.
На серверной части сохраняем roistat_visit в пользовательское свойство заказа UF_ROISTAT_VISIT. Обработчик события OnSaleOrderBeforeSaved в компоненте sale.order.ajax:
\Bitrix\Main\EventManager::getInstance()->addEventHandler( 'sale', 'OnSaleOrderBeforeSaved', function (\Bitrix\Main\Event $event) { $order = $event->getParameter('ENTITY'); $rsVisit = $_REQUEST['roistat_visit'] ?? $_COOKIE['roistat_visit'] ?? ''; if ($rsVisit) { $order->setField('UF_ROISTAT_VISIT', $rsVisit); } } ); Как передавать данные о заказах в Roistat?
Roistat принимает информацию через REST API Roistat. Пример запроса:
POST https://cloud.roistat.com/api/v1/project/orders X-ApiKey: project_api_key Content-Type: application/json { "orders": [{ "id": "BITRIX_ORDER_123", "visit": "4521890", "creation_date": "2026-03-13 10:00:00", "cost": 4990.00, "revenue": 4990.00, "currency": "USD" }] } visit — тот самый идентификатор из cookie. cost — сумма заказа. По этим данным Roistat строит отчёт по источникам. Интеграцию строим на событии OnSaleStatusOrderChange — при переходе в статус «Оплачен» (или кастомный «Выполнен») отправляем запрос. Для отмены — отдельный запрос с status: "canceled" и revenue: 0.
Почему важно обновлять статусы при отменах и возвратах?
Заказ может менять статус несколько раз. Roistat поддерживает обновление: повторная передача с тем же id обновляет запись (идепотентность). Настраиваем маппинг статусов Битрикс → Roistat:
| Статус Битрикс | Статус Roistat | revenue |
|---|---|---|
| N (новый) | new | 0 |
| P (оплачен) | confirmed | сумма |
| F (выполнен) | confirmed | сумма |
| C (отменён) | canceled | 0 |
Передаём статус при каждом изменении, используя id заказа как ключ. Это исключает дубли.
Как настроить передачу заказов пошагово?
- Установите скрипт Roistat и дождитесь события
roistat:inited. - Добавьте скрытое поле
roistat_visitв форму оформления заказа. - В обработчике
OnSaleOrderBeforeSavedсохраните значение в пользовательское поле заказа. - Настройте маппинг статусов и обработчик
OnSaleStatusOrderChangeдля отправки в API. - Проверьте передачу на тестовом заказе: создайте заказ, проверьте в Roistat.
Телефонные звонки и чаты
Если на сайте используется call tracking от Roistat, то звонки автоматически привязываются к визиту. При интеграции с Битрикс24 через REST API можно создать сделку при звонке и сразу передать её в Roistat. Настраиваем обработчик создания сделки в Битрикс24 и отправляем данные (сумму, roistat_visit) в Roistat API.
Подробный пример обработчика отправки
// Отправка заказа при оплате $eventManager->addEventHandler('sale', 'OnSaleStatusOrderChange', function($orderId, $status) { $order = \Bitrix\Sale\Order::load($orderId); $rsVisit = $order->getField('UF_ROISTAT_VISIT'); if ($rsVisit) { $api = new RoistatApi(API_KEY); $api->sendOrder([ 'id' => $orderId, 'visit' => $rsVisit, 'cost' => $order->getPrice(), 'status' => mapStatus($status), ]); } }); Что входит в работу?
- Аудит текущего трекинга: проверка UTM-меток, cookies, счётчика Roistat.
- Добавление скрытого поля
roistat_visitв форму оформления заказа с правильной инициализацией. - Настройка события
OnSaleOrderBeforeSavedдля сохранения визита в заказ. - Разработка обработчика
OnSaleStatusOrderChangeдля отправки заказов в Roistat API. - Реализация маппинга статусов и idempotent-отправки.
- Тестирование на тестовом и боевом контурах.
- Документация по доработкам и настройкам.
Ориентировочные сроки
| Этап | Время |
|---|---|
| Базовая передача заказов (события оплаты) | от 3 до 5 дней |
| Добавление обновления статусов (отмены/возвраты) | +2–3 дня |
| Интеграция с Битрикс24 (сделки из звонков) | +3–5 дней |
Стоимость рассчитывается индивидуально после аудита текущей схемы. Оцениваем проект за 1 день.
Опыт и гарантии
Наша команда имеет 10+ лет опыта разработки на 1С-Битрикс и Битрикс24, более 50 выполненных интеграций с Roistat. Используем проверенные паттерны: тегированное кэширование, агенты для отложенной отправки, повторные попытки при ошибках API. Даём гарантию на корректную передачу данных в течение 30 дней после запуска.
Получите консультацию по настройке сквозной аналитики — мы проведём аудит за 1 день. Закажите интеграцию и начните видеть реальную отдачу от рекламы. Свяжитесь с нами, чтобы получить индивидуальный план интеграции.







