Інтеграція 1С-Бітрікс з TMS (транспортними системами)

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Інтеграція 1С-Бітрікс з TMS (транспортними системами)
Середня
~1-2 тижні
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Інтеграція 1С-Bitrix з TMS (транспортними системами)

TMS (Transport Management System) — це спеціалізоване ПО для управління логістикою: планування маршрутів, призначення водіїв, трекінг транспортних засобів, облік витрат на доставку. Коли в магазину є власний автопарк або складна структура доставки, інтеграція TMS з Bitrix дозволяє автоматично передавати замовлення в логістичну систему та отримувати назад статусу та трек-дані.

Архітектура інтеграції

Інтеграція працює в обидва боки:

Bitrix → TMS: при підтвердженні замовлення до відправки передаються дані про замовлення — адреса доставки, габарити, вага, часове вікно доставки. TMS створює задачу доставки та повертає ID задачі.

TMS → Bitrix: при змінці статусу доставки (призначено водія, виїхав, доставлено) TMS викликає вебхук на стороні Bitrix, який оновлює статус замовлення та сповіщає клієнта.

Передача замовлень у 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();

Це поле використовується для зв'язку вхідних вебхуків з замовленнями Bitrix.

Прием статусів від 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 та Bitrix обмінюються секретним ключем.

Передача габаритів та ваги

TMS для планування маршрутів потребує фізичні характеристики вантажу. У Bitrix вага зберігається в 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 разів з експоненціальною затримкою.

Що налаштовуємо

  • Сервісний клас TmsService з адаптером під конкретну TMS (1С:ТМС, Яндекс.Маршрутизація, Samsara, самописна)
  • Обробник змінча статусу замовлення для автоматичної передачі у TMS
  • Користувальницькі поля замовлення UF_TMS_TASK_ID, UF_TRACKING_URL
  • Вебхук-ендпоінт з HMAC-верифікацією для прийому статусів
  • Чергу bl_tms_queue з retry-логікою для надійної доставки сообщень