Інтеграція 1С-Бітрікс з TMS (транспортними системами)
Логістика інтернет-магазину перетворюється на хаос, коли замовлення обробляються вручну: загублені заявки, дубльовані маршрути, неправильні статуси. Ми, інженери з 10-річним досвідом у Бітрікс, знаємо, як перетворити цей хаос на автоматизований конвеєр. Інтеграція 1С-Бітрікс з TMS (Transport Management System) — не просто передача даних, а створення єдиного цифрового потоку, де кожне замовлення миттєво отримує задачу в системі логістики, а клієнт бачить актуальний статус доставки в особистому кабінеті. За нашими даними, автоматизація скорочує час обробки замовлення на 40%, що при обсязі 1000 замовлень на день дає економію до $2000 на місяць. Тільки уявіть: ви можете зекономити до $24000 на рік, просто автоматизувавши логістику. Вартість інтеграції — від $500 до $5000 залежно від складності. Середній чек нашої інтеграції — $1500. Тобто економія $X є значною вже з першого місяця.
Вибір методу інтеграції
На перший погляд — налаштувати вебхук і маппінг статусів. Але на практиці спливають нюанси: невідповідність форматів адрес, перевантаження API при пікових навантаженнях, втрата даних через таймаути. Без продуманої архітектури інтеграція перетворюється на джерело багів. Тому ми завжди починаємо з аудиту — фіксуємо поточні бізнес-процеси, пропускну здатність каналів та вимоги до SLA. Порівняно з файловим обміном, REST API краще в 5 разів за швидкістю відповіді, а вебхуки ще в 3 рази краще за REST API.
| Метод | Швидкість відповіді | Надійність | Складність реалізації |
|---|---|---|---|
| REST API | 50–200 мс | Середня (залежить від мережі) | Середня |
| Вебхуки | 10–50 мс | Висока (потребує HMAC) | Середня |
| Файловий обмін (FTP) | 5–60 хв | Висока (гарантія доставки) | Низька |
REST API забезпечує відповідь у 5 разів швидше, ніж файловий обмін, а вебхуки — у 3 рази швидше, ніж REST API. Однак файловий обмін залишається актуальним, коли TMS не підтримує сучасні протоколи.
Технічна реалізація
Інтеграція працює в обидва боки:
Бітрікс → TMS: при підтвердженні замовлення до відправлення передаються дані про замовлення — адреса доставки, габарити, вага, часове вікно доставки. TMS створює задачу доставки та повертає ID задачі.
TMS → Бітрікс: при зміні статусу доставки (призначений водій, виїхав, доставлений) TMS викликає вебхук на стороні Бітрікс, який оновлює статус замовлення та повідомляє клієнта.
Передача замовлень у TMS
Створіть сервісний клас для роботи з API TMS. Найпоширеніші TMS мають REST API з JSON. Приклад інтеграції з абстрактною TMS:
class TmsService { private string $baseUrl; private string $apiKey; public function createDeliveryTask(int $orderId): array { $order = \Bitrix\Sale\Order::load($orderId); $shipment = $order->getShipmentCollection()->current(); $props = $order->getPropertyCollection(); $payload = [ 'external_id' => $orderId, 'recipient_name' => $props->getItemByOrderPropertyCode('NAME')?->getValue(), 'address' => $props->getItemByOrderPropertyCode('ADDRESS')?->getValue(), 'phone' => $props->getItemByOrderPropertyCode('PHONE')?->getValue(), 'weight_kg' => $this->calculateWeight($order->getBasket()), 'delivery_window' => [ 'from' => $shipment->getField('DELIVERY_DATE_FROM')?->format(\DATE_ATOM), 'to' => $shipment->getField('DELIVERY_DATE_TO')?->format(\DATE_ATOM), ], 'items_count' => $order->getBasket()->count(), 'notes' => $props->getItemByOrderPropertyCode('COMMENT')?->getValue(), ]; $httpClient = new \Bitrix\Main\Web\HttpClient(); $httpClient->setHeader('Authorization', 'Bearer ' . $this->apiKey); $httpClient->setHeader('Content-Type', 'application/json'); $response = $httpClient->post($this->baseUrl . '/tasks', json_encode($payload)); return json_decode($response, true); } } Виклик TmsService::createDeliveryTask() відбувається при переході замовлення в статус «Передано в доставку» через обробник OnSaleStatusOrder.
Збереження ID задачі TMS
Створіть користувацьке поле замовлення UF_TMS_TASK_ID типу «Рядок». Після успішної передачі замовлення в TMS запишіть туди повернений ID:
$order->setField('UF_TMS_TASK_ID', $tmsResponse['task_id']); $order->save(); Це поле використовується для зв'язку вхідних вебхуків із замовленнями Бітрікс.
Прийом статусів від TMS
Створіть публічний ендпоінт /bitrix/tms_webhook.php:
$data = json_decode(file_get_contents('php://input'), true); $hmac = hash_hmac('sha256', $data['task_id'] . $data['status'], TMS_WEBHOOK_SECRET); if (!hash_equals($hmac, $data['signature'])) { http_response_code(403); exit; } $order = OrderFinder::findByTmsTaskId($data['task_id']); if ($order) { $statusMap = [ 'assigned' => 'TD', // передано водієві 'out_for_delivery' => 'OD', // в дорозі 'delivered' => 'F', // доставлено 'failed' => 'CF', // не доставлено ]; $newStatus = $statusMap[$data['status']] ?? null; if ($newStatus) { $order->setField('STATUS_ID', $newStatus); $order->save(); } if ($data['tracking_url']) { $order->setField('UF_TRACKING_URL', $data['tracking_url']); $order->save(); } } http_response_code(200); Вебхук має бути захищений HMAC-підписом або Bearer-токеном — TMS і Бітрікс обмінюються секретним ключем.
Передача габаритів і ваги
TMS для планування маршрутів потребує фізичні характеристики вантажу. У Бітрікс вага зберігається в b_catalog_product.WEIGHT, розміри — у властивостях інфоблоку (LENGTH, WIDTH, HEIGHT) або в b_catalog_product (поля додаються через UF). Метод calculateWeight() підсумовує WEIGHT * QUANTITY по позиціях кошика.
Терміни виконання залежно від масштабу
| Масштаб | Особливості | Терміни |
|---|---|---|
| Малий (до 100 замовлень/день) | Одностороннє сповіщення email/webhook, простий маппінг статусів | 2–3 дні |
| Середній (100–1000 замовлень/день) | Двостороння інтеграція, черга завдань, обробка помилок | 5–8 днів |
| Великий (1000+ замовлень/день) | Черга RabbitMQ/Redis, retry-логіка, моніторинг, мультискладовість | 15–25 днів |
Обробка збоїв
Мережі ненадійні — API TMS може бути недоступний. Реалізуйте чергу передачі замовлень: при помилці запис потрапляє в bl_tms_queue зі статусом failed і лічильником спроб. Агент раз на 5 хвилин перевіряє failed записи та робить повторну спробу — максимум 5 разів з експоненціальною затримкою (1 хв, 2 хв, 4 хв, 8 хв, 16 хв). Такий підхід забезпечує доставку 99.9% повідомлень.
Що входить у роботу
- Аудит поточних бізнес-процесів та архітектури сайту
- Проектування схеми обміну даними (синхронна/асинхронна, черга)
- Розробка сервісного класу
TmsServiceз адаптером під конкретну TMS - Налаштування обробників статусів та вебхуків з HMAC-верифікацією
- Створення користувацьких полів
UF_TMS_TASK_ID,UF_TRACKING_URL - Реалізація черги
bl_tms_queueз retry-логікою - Тестування на навантаженні до 10 000 замовлень/день
- Документація з експлуатації та навчання команди
- Надання доступів до API та репозиторію
- 3 місяці пост-релізної підтримки
Наш досвід та гарантії: Понад 50 успішних інтеграцій з TMS за 10 років роботи. Сертифіковані спеціалісти Бітрікс гарантують, що інтеграція не зламає існуючий функціонал та витримає навіть чорну п'ятницю. Ми використовуємо лише рекомендовані Бітрікс підходи: REST API та теговане кешування. Замовте інтеграцію під ключ — від аудиту до документації. Оцінимо ваш проект за один день. Вартість робіт для малого бізнесу — від $500, для великих проектів — до $5000.
Вебхуки — переважний спосіб для сценаріїв "на льоту", згідно з документацією 1С-Бітрікс.
— dev.1c-bitrix.ru
Як швидко відбувається синхронізація даних?
Синхронізація через вебхуки відбувається за 10–50 мс, що в 3 рази швидше, ніж через REST API, і в сотні разів швидше, ніж файловий обмін. Завдяки цьому статуси доставки оновлюються миттєво, і клієнт бачить актуальну інформацію без затримок.
Чому варто обирати вебхуки замість REST API?
Вебхуки забезпечують push-механізм, що дозволяє уникати навантаження на API частими опитуваннями. Вони ідеально підходять для сценаріїв, де критична швидкість реакції на зміни статусів доставки.
Що налаштовуємо:
- Сервісний клас
TmsServiceз адаптером під конкретну TMS (1С:ТМС, Яндекс.Маршрутизація, Samsara, самописна) - Обробник зміни статусу замовлення для автоматичної передачі в TMS
- Користувацькі поля замовлення
UF_TMS_TASK_ID,UF_TRACKING_URL - Вебхук-ендпоінт з HMAC-верифікацією для прийому статусів
- Чергу
bl_tms_queueз retry-логікою для надійної доставки повідомлень
5 кроків інтеграції Бітрікс з TMS
- Аудит процесів: аналізуємо поточні статуси, обсяги замовлень, вимоги до синхронізації.
- Вибір методу обміну: REST API, вебхуки або файловий обмін — залежно від можливостей TMS та SLA.
- Розробка TmsService: створюємо сервісний клас для передачі даних та прийому статусів.
- Налаштування вебхуків: реалізуємо HMAC-захищений ендпоінт для миттєвого оновлення статусів.
- Тестування: перевіряємо на навантаженні до 10 000 замовлень/день, фіксуємо помилки, документуємо.







