Автоматизація: розробка модуля інтеграції з CRM 1С-Бітрікс
Щодня ви втрачаєте замовлення через ручне перенесення даних в CRM. Дуби контактів, забуті угоди, години рутини — це коштує бізнесу до $1.8k–2.6kів на рік. Ми створюємо модуль синхронізації між Бітрікс та CRM, який автоматизує двосторонній обмін замовленнями, контактами, угодами та статусами. Без ручного введення. Без втрат. Наш досвід — понад 500 проєктів на 1С-Бітрікс — дозволяє проєктувати надійну архітектуру з чергами, дедуплікацією та логуванням. Замовте розробку модуля під ключ — і забудьте про ручне введення назавжди. Модуль окупається в середньому за 4 місяці, економлячи до $2.7k–3.9kів на рік. Середній час синхронізації однієї операції — 2 секунди, а пропускна здатність — до 1000 замовлень на хвилину. Ручне введення — головне джерело помилок: забули передати контакт, неправильно вказали суму. Автоматизація знижує ці ризики до нуля.
Інтеграція з різними CRM та дані, що передаються
Інтегруємося з Бітрікс24, amoCRM, RetailCRM, Salesforce, HubSpot. Через REST API та вебхуки. При оформленні замовлення створюється угода з даними покупця, складом, сумою, UTM. Контакт або компанія оновлюється за нормалізованим номером телефону або email — це виключає дублі в 95% випадків. При зміні статусу замовлення на сайті статус угоди в CRM оновлюється автоматично. Зворотна синхронізація оновлює статус на сайті через вебхук — в середньому за 2 секунди. Повний обмін замовленнями між сайтом та CRM в реальному часі.
Як працює синхронізація: покрокова інструкція
- Покупець оформляє замовлення на сайті.
- Подія
OnOrderNewактивує обробник. - Модуль формує запит до CRM через REST API.
- Якщо CRM недоступна, запит зберігається в чергу.
- Раз на хвилину cron повторює невдалі запити.
- Успішна синхронізація фіксується в лозі.
Архітектура модуля
local/modules/vendor.crmintegration/ ├── lib/ │ ├── Adapter/ │ │ ├── Bitrix24Adapter.php │ │ └── RetailCrmAdapter.php │ ├── Mapper/ │ │ ├── OrderMapper.php # Замовлення → угода │ │ └── UserMapper.php # Користувач → контакт │ ├── SyncService.php │ └── WebhookHandler.php # Обробка вхідних вебхуків └── install/db/install.sql Схема таблиці логу синхронізацій
| Поле | Тип | Призначення |
|---|---|---|
| ID | int auto_increment | — |
| ENTITY_TYPE | varchar(50) | order, user, product |
| ENTITY_ID | int | ID сутності на сайті |
| CRM_TYPE | varchar(50) | lead, deal, contact |
| CRM_ID | varchar(100) | ID в CRM |
| DIRECTION | enum | OUTBOUND, INBOUND |
| STATUS | enum | SUCCESS, ERROR, PENDING |
| ERROR_MESSAGE | text | Текст помилки |
| CREATED_AT | datetime | — |
Інтеграція з Бітрікс24 та дедуплікація контактів
Для Бітрікс24 використовуємо REST API. Створення угоди при новому замовленні:
$dealData = [ 'TITLE' => 'Замовлення #' . $orderId . ' з сайту', 'OPPORTUNITY' => $order->getPrice(), 'CURRENCY_ID' => $order->getCurrency(), 'SOURCE_ID' => 'WEB', 'UF_ORDER_ID' => $orderId, // користувацьке поле в Б24 ]; $response = $this->callBitrix24( 'crm.deal.add', ['fields' => $dealData] ); $dealId = $response['result']; // Додаємо товари до угоди foreach ($basket as $item) { $this->callBitrix24('crm.deal.productrows.set', [ 'id' => $dealId, 'rows' => [[ 'PRODUCT_NAME' => $item->getField('NAME'), 'PRICE' => $item->getPrice(), 'QUANTITY' => $item->getQuantity(), 'PRODUCT_ID' => $item->getProductId(), ]], ]); } Метод callBitrix24 виконує запит до https://portal.bitrix24.ru/rest/{token}/. Токен зберігається в налаштуваннях модуля (b_option). Перед створенням нового контакту шукаємо існуючий за нормалізованим телефоном:
$existing = $this->callBitrix24('crm.contact.list', [ 'filter' => ['PHONE' => $normalizedPhone], 'select' => ['ID', 'NAME'], ]); if (!empty($existing['result'])) { $contactId = $existing['result'][0]['ID']; // Оновлюємо існуючий, не створюємо дубль } else { $contactId = $this->callBitrix24('crm.contact.add', [... ]); } Нормалізація прибирає відмінності у форматуванні: +7 (999) 123-45-67 та 89991234567 — один номер.
Чому REST API надійніший за файловий обмін?
Файловий обмін (CommerceML, CSV) — джерело конфліктів: дублі, затримки, втрата даних. REST API працює в реальному часі, кожна операція підтверджується відповіддю сервера. При помилці модуль повторює запит або зберігає в чергу — файловий обмін такої гарантії не дає. Докладніше про переваги REST можна прочитати в Wikipedia.
Як працює черга повідомлень та відмовостійкість?
Всі вихідні запити до CRM поміщаються в чергу в таблиці b_crm_queue. Cron обробляє чергу кожну хвилину, повторюючи невдалі спроби (до 5 разів з інтервалом 10 секунд). Це гарантує, що при недоступності API CRM замовлення не губляться. Вхідні вебхуки обробляються скриптом:
// local/api/crm/webhook/index.php $payload = json_decode(file_get_contents('php://input'), true); \Vendor\CrmIntegration\WebhookHandler::handle($payload); Обробник за CRM_ID з b_crm_sync_log знаходить ORDER_ID, оновлює статус через $order->setField('STATUS_ID', $mappedStatus) та зберігає.
Що входить в розробку модуля?
- Аналіз API цільової CRM та поточних бізнес-процесів (1 день).
- Проєктування архітектури модуля та схеми даних (1 день).
- Написання адаптерів, маперів, сервісу синхронізації (3–5 днів).
- Налаштування вебхуків та черги повідомлень (1–2 дні).
- Інтеграційне тестування на тестовому та бойовому контурах (2–3 дні).
- Документація з експлуатації та навчання ваших менеджерів (1 день).
- Технічна підтримка 3 місяці після запуску.
Процес розробки та терміни
| Масштаб | Склад | Термін |
|---|---|---|
| Базовий | Одна CRM, передача замовлення/контакту, вихідна синхронізація | 5–8 днів |
| Стандартний | + Вебхуки, двостороння синхронізація, дедуплікація, черга | 10–15 днів |
| Розширений | + Дві CRM, мапінг статусів, аналітика синхронізацій, Admin UI | 18–25 днів |
Зв'яжіться з нами для оцінки вашого проєкту — розрахуємо точну вартість та терміни за один робочий день. Отримайте консультацію — ми проаналізуємо вашу CRM та запропонуємо оптимальне рішення.







