Автоматизация: разработка модуля интеграции с CRM 1С-Битрикс
Ежедневно вы теряете заказы из-за ручного переноса данных в CRM. Дубли контактов, забытые сделки, часы рутины — это стоит бизнесу до 200 000 рублей в год. Мы создаём модуль синхронизации между Битрикс и CRM, который автоматизирует двусторонний обмен заказами, контактами, сделками и статусами. Без ручного ввода. Без потерь. Наш опыт — более 500 проектов на 1С-Битрикс — позволяет проектировать надёжную архитектуру с очередями, дедупликацией и логированием. Закажите разработку модуля под ключ — и забудьте о ручном вводе навсегда. Модуль окупается в среднем за 4 месяца, экономя до 300 000 рублей в год. Среднее время синхронизации одной операции — 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 и предложим оптимальное решение.







