При перенесенні 50 000 контактів з Salesforce в Бітрікс24 менеджери втратили зв'язки угод з контактами — знайома ситуація? Кожна CRM має власну модель даних, логіку зв'язків та специфіку полів. Бітрікс24 — теж. Головне завдання міграції: зберегти цілісність даних та історію відносин. Наша команда має понад 10 років досвіду в таких проектах, тому ми знаємо всі підводні камені.
Компанії обирають Бітрікс24 через інтеграцію з 1С та єдину екосистему для продажів і підтримки. Перенесення даних — складний процес, що вимагає глибокого розуміння обох систем. Наш досвід гарантує, що після перенесення менеджери побачать повну історію відносин з клієнтами, наче завжди працювали в Бітрікс24.
Як уникнути втрати даних при перенесенні?
Найпоширеніша помилка — прямий експорт таблиць без урахування посилальної цілісності. Наприклад, угода посилається на контакт, а контакт — на компанію. Якщо створити угоду раніше за компанію, Бітрікс24 поверне помилку. Тому ми суворо дотримуємося порядку: компанії → контакти → угоди → активності. Кожен етап фіксується в маппінг-файлі.
Структура даних Бітрікс24
Перш ніж мігрувати, потрібно зрозуміти, куди кладуться дані. Ключові сутності Бітрікс24:
| Сутність | Таблиця БД | REST API |
|---|---|---|
| Контакти | b_crm_contact |
crm.contact.* |
| Компанії | b_crm_company |
crm.company.* |
| Ліди | b_crm_lead |
crm.lead.* |
| Угоди | b_crm_deal |
crm.deal.* |
| Активності | b_crm_activity |
crm.activity.* |
| Користувацькі поля | b_uts_crm_* |
crm.*.userfield.* |
Зв'язки: контакт прив'язаний до компанії через b_crm_company_contact, угода — до контакту через b_crm_deal_contact.
Інструменти перенесення
REST API Бітрікс24 — офіційний і найнадійніший метод. Підтримує пакетні запити (batch), що критично при перенесенні тисяч записів:
$batchCalls = []; foreach ($contacts as $contact) { $batchCalls['create_contact_' . $contact['id']] = [ 'method' => 'crm.contact.add', 'params' => [ 'fields' => [ 'NAME' => $contact['first_name'], 'LAST_NAME' => $contact['last_name'], 'EMAIL' => [['VALUE' => $contact['email'], 'VALUE_TYPE' => 'WORK']], 'PHONE' => [['VALUE' => $contact['phone'], 'VALUE_TYPE' => 'WORK']], 'COMPANY_ID' => $companyMapping[$contact['company_id']] ?? null, 'UF_CRM_SOURCE_ID' => $contact['id'], ], ], ]; } $result = $b24->callBatch(array_slice($batchCalls, 0, 50)); Згідно з документацією Бітрікс24, один batch-запит може містити до 50 команд. Прямий запис у БД — для хмарного Бітрікс24 недоступний. Для коробкової версії — прискорює масовий імпорт, але вимагає ручної перебудови індексів та обережності з тригерами. REST API повільніший, але безпечніший: у 2-3 рази повільніший при пакетному записі, зате дає повний контроль і можливість відкату. REST API безпечніший за прямий SQL у 3 рази, хоча й повільніший.
Прямий SQL не варто використовувати в хмарі, оскільки хмарний Бітрікс24 не надає доступ до бази даних. Навіть у коробковій версії ми рекомендуємо REST API для відстеження та відкату.
Чому маппінг полів — найтрудомісткіша частина?
Кожне поле джерела потрібно зіставити з полем Бітрікс24. Приклад маппінгу з HubSpot (див. HubSpot - Wikipedia):
| HubSpot | Бітрікс24 | Примітка |
|---|---|---|
firstname + lastname |
NAME + LAST_NAME |
Розділення |
email |
EMAIL[0].VALUE |
Тип: WORK |
phone |
PHONE[0].VALUE |
Нормалізація |
company |
COMPANY_ID |
Створити компанію окремо |
lifecyclestage |
STATUS_ID |
Маппінг стадій |
hs_lead_status |
Користувацьке поле | UF_CRM_HS_STATUS |
createdate |
DATE_CREATE |
Тільки через прямий SQL (коробка) |
Нестандартні поля HubSpot переносяться в користувацькі поля Бітрікс24 (UF-поля). Їх потрібно створити заздалегідь через crm.contact.userfield.add.
Що робити з дублікатами?
Сторонні CRM часто містять дублі контактів (одна людина під різними email). Перед міграцією — дедуплікація в джерелі. Стратегії:
- Жорстка: один унікальний email = один контакт. Дублі об'єднуються.
- М'яка: переносимо всі записи, потім використовуємо вбудований інструмент дедуплікації Бітрікс24 (
Контакти → Дублікати).
Рекомендується м'яка стратегія — зберігає всі дані, дедуплікацію менеджери роблять у процесі роботи.
Послідовність створення сутностей
Порядок важливий через посилальну цілісність:
- Компанії
- Контакти (прив'язка до компаній)
- Угоди (прив'язка до контактів та компаній)
- Активності — дзвінки, листи, завдання
- Коментарі та історія — через
crm.timeline.comment.add
Після створення кожної сутності зберігаємо маппінг: source_id → b24_id.
$mappingFile = 'migration_map.json'; $mapping = json_decode(file_get_contents($mappingFile), true) ?: []; $mapping['contacts'][$sourceContact['id']] = $b24ContactId; file_put_contents($mappingFile, json_encode($mapping)); Історія активностей: дзвінки та листи
Перенесення історії комунікацій — опціональна, але цінна частина. Дзвінки з джерела → crm.activity.add з типом CALL:
$b24->call('crm.activity.add', [ 'fields' => [ 'OWNER_TYPE_ID' => 3, 'OWNER_ID' => $mapping['contacts'][$call['contact_id']], 'TYPE_ID' => 2, 'SUBJECT' => 'Дзвінок від ' . date('d.m.Y', strtotime($call['created_at'])), 'DESCRIPTION' => $call['notes'], 'START_TIME' => $call['created_at'], 'END_TIME' => $call['ended_at'], 'DIRECTION' => $call['direction'] === 'inbound' ? 1 : 2, 'COMPLETED' => 'Y', ], ]); Контроль якості після перенесення
Після міграції — обов'язкова звірка:
SELECT COUNT(*) FROM hubspot_contacts WHERE is_deleted = 0; # → 12 847 SELECT COUNT(*) FROM b_crm_contact WHERE DELETED = 'N'; # → 12 839 ← 8 записів втрачено — розслідуємо Розбіжності логуються та аналізуються: зазвичай це дублі або записи з невалідними даними.
Що входить у роботу
Ми надаємо повний комплекс послуг:
- Аудит вихідної CRM — аналіз моделі даних, виявлення дублів та невалідних записів.
- Створення маппінг-карти — зіставлення всіх полів та типів.
- Розробка скриптів міграції — на PHP/JavaScript з використанням REST API.
- Тестова міграція — на копію даних, перевірка цілісності.
- Фінальне перенесення — з мінімальним даунтаймом (зазвичай у вихідні).
- Пост-міграційна підтримка — 2 тижні консультацій та доробок.
- Документація — опис усіх створених полів та зв'язків.
Вартість міграції визначається після аналізу обсягу даних та складності маппінгу. Економія при замовленні комплексної міграції замість поетапного перенесення може бути значною.
Строки виконання
| Обсяг даних | Строк |
|---|---|
| До 5 000 контактів + угоди без історії | 1–2 тижні |
| 5 000–50 000 записів + базові активності | 3–6 тижнів |
| 50 000+ записів + повна історія комунікацій | 2–4 місяці |
Вартість розраховується індивідуально залежно від складності маппінгу. Зв'яжіться з нами для точної оцінки вашого проекту.
Успішна міграція — це коли менеджери в Бітрікс24 наступного дня бачать повну історію відносин з клієнтами, наче завжди працювали тут. Замовте консультацію — ми оцінимо проект за один день.
Офіційний посібник з REST API Бітрікс24







