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

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Интеграция 1С-Битрикс с сервисами оптимизации маршрутов
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1177
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • 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 Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Интеграция 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. При завершении доставки вебхук от оптимизатора обновляет статусы заказов

Общий интерфейс для работы с оптимизаторами

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

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.

Обновление статусов заказов

По завершении доставки в точке оптимизатор (или водитель через мобильное приложение) отправляет событие. Вебхук Битрикс обновляет статус конкретного заказа:

// /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 с хранением маршрутов и статусов
  • Карту маршрутов в административном разделе
  • Вебхук обновления статусов заказов при выполнении доставки