Інтеграція 1С-Бітрікс із сервісами оптимізації маршрутів

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Інтеграція 1С-Бітрікс із сервісами оптимізації маршрутів
Середня
~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С-Бітрікс з сервісами оптимізації маршрутів

Сервіси оптимізації маршрутів — спеціалізовані API, які приймають список точок доставки та повертають оптимальний порядок відвідування. Популярні: Яндекс.Маршрутизація, Route4Me, Routific, OptimoRoute, Google OR-Tools (self-hosted). Інтеграція з Бітрікс — двосторонній трубопровід: дані замовлень йдуть до оптимізатора, готові маршрути повертаються назад.

Вибір сервісу оптимізації

Сервіс Особливості Модель оплати
Яндекс.Маршрутизація Російська інфраструктура, хороша база геокодування Запити + склад кур'єрів
Route4Me Гнучкий API, підтримка часових вікон, мультидепо Підписка
Routific Простий API, підходить для малого автопарку Підписка від 5 машин
OptimoRoute Підтримка пріоритетів, компетенції водіїв Підписка
OR-Tools Безкоштовний, self-hosted, потребує Python-сервера Ваші сервери

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

Цикл роботи виглядає так:

  1. З ранку агент збирає замовлення на сьогодні зі статусом «На доставку» з b_sale_order
  2. Формує список точок з адресами, координатами та часовими вікнами
  3. Відправляє запит в API оптимізатора
  4. Зберігає маршрути в bl_delivery_routes
  5. Призначає водіїв через CRM або вручну
  6. При завершенні доставки webhook від оптимізатора оновлює статуси замовлень

Загальний інтерфейс для роботи з оптимізаторами

Реалізуйте паттерн адаптер — один інтерфейс, кілька реалізацій:

interface RouteOptimizerInterface
{
    public function optimize(array $depot, array $vehicles, array $orders): array;
}

class YandexRouteOptimizer implements RouteOptimizerInterface
{
    public function optimize(array $depot, array $vehicles, array $orders): array
    {
        $payload = [
            'depot'    => $depot,
            'vehicles' => $vehicles,
            'orders'   => array_map(fn($o) => [
                'id'           => (string)$o['order_id'],
                'point'        => ['lat' => $o['lat'], 'lon' => $o['lon']],
                'time_window'  => [$o['time_from'], $o['time_to']],
                'service_duration' => 300,  // 5 хвилин на точку
            ], $orders),
        ];

        $http = new \Bitrix\Main\Web\HttpClient();
        $http->setHeader('Content-Type', 'application/json');
        $http->setHeader('X-Ya-Courier-Request-Id', uniqid());

        $response = $http->post(
            'https://courier.yandex.ru/api/v1/companies/' . $this->companyId . '/routes',
            json_encode($payload)
        );

        return json_decode($response, true);
    }
}

class Route4MeOptimizer implements RouteOptimizerInterface
{
    public function optimize(array $depot, array $vehicles, array $orders): array
    {
        // Логіка, специфічна для Route4Me
    }
}

Конкретна реалізація вибирається через фабричний метод, налаштовується в b_option.

Перетворення даних замовлення

Ключовий момент — коректне перетворення даних Бітрікс в формат API оптимізатора. Адреса потребує геокодування у координати (якщо не зроблено при замовленні), часові вікна — конвертувати в формат оптимізатора:

function buildOrderPoint(\Bitrix\Sale\Order $order): array
{
    $props = $order->getPropertyCollection();

    return [
        'order_id' => $order->getId(),
        'lat'      => (float)$props->getItemByOrderPropertyCode('LAT')?->getValue(),
        'lon'      => (float)$props->getItemByOrderPropertyCode('LON')?->getValue(),
        'time_from' => $this->toUnix($props->getItemByOrderPropertyCode('DELIVERY_TIME_FROM')?->getValue()),
        'time_to'   => $this->toUnix($props->getItemByOrderPropertyCode('DELIVERY_TIME_TO')?->getValue()),
        'weight_kg' => $this->getBasketWeight($order->getBasket()),
        'volume_m3' => $this->getBasketVolume($order->getBasket()),
        'priority'  => (int)$props->getItemByOrderPropertyCode('DELIVERY_PRIORITY')?->getValue(),
    ];
}

Збереження та відображення маршрутів

Структура таблиці bl_delivery_routes:

route_id        — ID маршруту від оптимізатора
route_date      — дата доставки
vehicle_id      — ID транспортного засобу
driver_id       — CRM-контакт водія
stops_json      — JSONB впорядкований список зупинок
total_distance  — загальний пробіг у км
estimated_time  — приблизний час у хвилинах
status          — planned / in_progress / completed
created_at

Маршрут відображається на карті в адміністративному розділі через Яндекс.Карти API або Leaflet.js. Водію — посилання з waypoints.

Оновлення статусів замовлень

По завершенні доставки в точці оптимізатор (або водій через мобільний додаток) відправляє подію. Webhook Бітрікс оновлює статус конкретного замовлення:

// /bitrix/route_webhook.php
$data = json_decode(file_get_contents('php://input'), true);

foreach ($data['completed_stops'] as $stop) {
    $order = \Bitrix\Sale\Order::load((int)$stop['order_id']);
    if ($order) {
        $order->setField('STATUS_ID', 'F');
        $order->save();
        // Відправка листа клієнту про доставку
    }
}

Терміни виконання за масштабом

Масштаб Особливості Терміни
Малий (1–3 машини) Один адаптер, ручне призначення водіїв 3–5 днів
Середній (5–20 машин) Автоматичне призначення, карта маршрутів, вебхуки статусів 8–12 днів
Великий (20+ машин) Мультидепо, компетенції водіїв, реалтайм-трекінг 20–35 днів

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

  • Інтерфейс RouteOptimizerInterface з адаптерами під потрібні сервіси
  • Агент збору замовлень та відправки до оптимізатора з ранку робочого дня
  • Таблицю bl_delivery_routes зі зберіганням маршрутів та статусів
  • Карту маршрутів в адміністративному розділі
  • Webhook оновлення статусів замовлень при виконанні доставки