Інтеграція 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. - Реалізація мапінгу статусів та ідемпотентної відправки.
- Тестування на тестовому та бойовому контурах.
- Документація по доопрацюванням та налаштуванням.
Орієнтовні терміни
| Етап | Час |
|---|---|
| Базова передача замовлень (події оплати) | від 3 до 5 днів |
| Додавання оновлення статусів (скасування/повернення) | +2–3 дні |
| Інтеграція з Бітрікс24 (угоди з дзвінків) | +3–5 днів |
Вартість розраховується індивідуально після аудиту поточної схеми. Оцінюємо проєкт за 1 день.
Досвід та гарантії
Наша команда має 10+ років досвіду розробки на 1С-Бітрікс та Бітрікс24, більше 50 виконаних інтеграцій з Roistat. Використовуємо перевірені патерни: теговане кешування, агенти для відкладеної відправки, повторні спроби при помилках API. Даємо гарантію на коректну передачу даних протягом 30 днів після запуску.
Отримайте консультацію з налаштування наскрізної аналітики — ми проведемо аудит за 1 день. Замовте інтеграцію і почніть бачити реальну віддачу від реклами. Зв'яжіться з нами, щоб отримати індивідуальний план інтеграції.







