AI

Автоматизация бронирования слотов: решение для логистической компании

Agentium30 нояб. 2025 г.
Автоматизация бронирования слотов: решение для логистической компании

Проблематика и решение

🎯 Бизнес-задача

Логистическая компания работает с крупным заводом по переработке металлолома, который использует веб-портал для управления отгрузками. Для планирования маршрутов необходимо заранее бронировать временные слоты на выгрузку через корпоративный портал предприятия.

Основная проблема: Свободные слоты появляются редко и разбираются буквально за секунды. Ручное бронирование неэффективно и неконкурентно — к моменту, когда логист обнаруживает свободный слот, его уже успевают забронировать конкуренты.

⚠️ Проблематика

Отрасль сталкивается с серьезными вызовами при работе с системами бронирования слотов. Главная сложность заключается в том, что свободные временные окна для выгрузки появляются непредсказуемо и очень быстро разбираются конкурентами. Доступны слоты только на ближайшие 5 дней, что создает дополнительное давление и требует постоянного мониторинга системы.

Человеческий фактор значительно ограничивает возможности логистических компаний. Логисты физически не могут мониторить портал круглосуточно, а задержка даже в несколько секунд приводит к потере желанного слота. Это создает высокую нагрузку на персонал и увеличивает риск пропуска критических временных окон.

Экономические последствия этих проблем проявляются в простоях транспорта, потере конкурентоспособности и неэффективном использовании ресурсов компании. Каждый пропущенный слот означает дополнительные расходы и снижение операционной эффективности.

✅ Решение

Разработана автоматизированная система, которая решает все выявленные проблемы комплексно. Система постоянно мониторит доступность слотов на 5 дней вперед, мгновенно бронирует появляющиеся свободные слоты и работает круглосуточно без участия человека. Интеллектуальные алгоритмы позволяют обходить блокировки сайта, а интеграция с Telegram обеспечивает оперативные уведомления о каждом успешном бронировании.

📊 Результаты

Внедрение системы принесло впечатляющие результаты, которые превзошли изначальные ожидания.

ПоказательДо внедренияПосле внедренияУлучшение
Скорость реакции на слот10–30 секунд0.5–2 секундыдо 60 раз быстрее
Успешность бронирования~10–15%60–80%4–6 раз выше
Время мониторинга8 часов/день24/73 раза больше охват
Загрузка персоналаВысокаяМинимальнаявысвобождение времени

Компания получила стабильное обеспечение слотов благодаря тому, что система гарантирует наличие забронированных временных окон. Это привело к существенному снижению простоев транспорта, так как водители теперь получают забронированные слоты своевременно. Конкурентоспособность значительно повысилась — компания получает слоты значительно быстрее конкурентов. Кроме того, логисты теперь могут фокусироваться на других важных задачах, что оптимизирует использование человеческих ресурсов.

⚙️ Особенности решения

Система работает в двух режимах для оптимизации ресурсов и эффективности. В обычном режиме система выполняет энергоэффективный фоновый мониторинг с интервалом проверки 10 секунд, который активен 82% времени. Турборежим активируется в критические моменты (57–7 минута каждого часа) и работает с интервалом 0.5 секунды, обеспечивая агрессивный мониторинг в периоды, когда вероятность появления свободных слотов максимальна.

Защита от блокировок реализована через специальный алгоритм, который разносит запросы разных потоков во времени, контролирует частоту обращений к серверу (до 33 запросов в минуту), автоматически восстанавливается после временных блокировок и минимизирует риск обнаружения через имитацию человеческого поведения.

Многопоточная архитектура позволяет системе одновременно мониторить несколько дат (до 5 потоков), что повышает вероятность успешного бронирования в 3–5 раз. Каждый поток работает независимо, что обеспечивает стабильность работы даже при выходе из строя отдельных компонентов.


Техническая реализация

💡 Информация для разработчиков: Ниже подробное описание технической архитектуры и алгоритмов работы системы

🏗️ Архитектура системы

Решение построено по модульной архитектуре, что обеспечивает гибкость, масштабируемость и простоту поддержки. Система состоит из пяти основных компонентов: автоматизированный бот для мониторинга и бронирования, веб-админка для управления водителями и настройками, REST API для интеграции с внешними системами, база данных PostgreSQL для хранения всей информации и система уведомлений через Telegram для оперативного информирования.

Технологический стек

Технологический выбор определялся требованиями к производительности, надежности и простоте интеграции.

Backend-компоненты:

Python 3.9+ — основной язык разработки, выбран за богатую экосистему и удобство работы с веб-автоматизацией

Django — веб-фреймворк для админ-панели, обеспечивающий быструю разработку и встроенную админку

Flask — легковесный веб-сервер для управления водителями, минималистичный и быстрый

Selenium WebDriver — автоматизация браузера для работы с динамическим веб-интерфейсом портала завода

PostgreSQL — реляционная база данных с высокой производительностью и надежностью

Инфраструктурные решения:

Docker & Docker Compose — контейнеризация обеспечивает изолированность и простоту развертывания

Nginx — веб-сервер и reverse proxy для эффективной маршрутизации запросов

SSL-сертификаты — защищенное HTTPS-соединение для безопасности данных

Внешние интеграции:

Telegram Bot API — система уведомлений для оперативного информирования

Requests/HTTPX — HTTP-клиент для взаимодействия с внешними API

📦 Модульная структура

Система организована по принципу разделения ответственности, что упрощает разработку и поддержку. Модуль конфигурации содержит все настройки бота, включая интервалы, режимы работы, лимиты, а также селекторы CSS/XPath для элементов веб-интерфейса. Ядро системы включает управление жизненным циклом браузера, сервис авторизации, движок бронирования слотов и циклический мониторинг дат. Вспомогательные утилиты обеспечивают фильтрацию слотов, логирование операций и статистики, а также различные вспомогательные функции для работы с данными.

База данных хранит информацию о заявках на бронирование, данных водителей и их транспорта, а также настройки работы бота. Схема данных разработана с учетом необходимости быстрого доступа к информации и эффективного хранения исторических данных.

🔄 Алгоритм работы

Система работает по циклическому алгоритму, который начинается с инициализации потоков. Каждый поток получает уникального водителя из базы данных, для него устанавливается индивидуальная задержка для разнесения во времени, и создается отдельный экземпляр браузера. Это обеспечивает параллельную работу и независимость потоков друг от друга.

Мониторинг дат осуществляется циклически: потоки проверяют доступность слотов на 5 дней вперед, выполняя запросы к серверу веб-портала завода для каждой даты. Полученные списки слотов фильтруются по временным критериям — система ищет слоты, доступные более чем через 48 часов (настраиваемый параметр), которые помечены как доступные для бронирования.

При обнаружении подходящего слота запускается процесс бронирования: заполняется форма с данными водителя и транспорта, выбирается дата и время, подтверждается бронирование. После успешного бронирования результат обрабатывается — номер заявки сохраняется в базе данных, отправляется уведомление в Telegram, и операция логируется для последующего анализа.

Режимы работы

Система автоматически переключается между двумя режимами в зависимости от времени суток. Обычный режим работает 82% времени (8–56 минуты каждого часа) с интервалом проверки 10 секунд, создавая нагрузку около 6 запросов в минуту. Это обеспечивает энергоэффективный фоновый мониторинг.

Турборежим активируется с 57-й минуты каждого часа и длится 10 минут (до 7-й минуты следующего часа). Интервал проверки составляет 0.5 секунды, что создает нагрузку около 120 запросов в минуту — в 20 раз выше обычного режима. Такой подход позволяет экономить ресурсы при сохранении высокой эффективности, фокусируясь на критических временных окнах и снижая риск блокировок за счет умеренной нагрузки в обычном режиме.

🛡️ Механизмы защиты от блокировок

Основная проблема при работе нескольких потоков — синхронизация запросов, которая может привести к блокировке IP-адреса. Для решения этой проблемы реализована стратегия разнесения потоков: каждый поток использует уникальную задержку между циклами, которая рассчитывается с учетом номера потока, что предотвращает одновременные запросы от разных потоков.

ПотокЗадержка между цикламиЗапросов/минуту
Поток 14.9 секунды~12
Поток 25.6 секунды~11
Поток 36.3 секунды~10
Общая нагрузка~33 (безопасный уровень)

Система тщательно контролирует частоту обращений к серверу веб-портала. Базовая задержка между запросами составляет 2.5 секунды, между циклами мониторинга — 4.875 секунды. При возникновении ошибок применяются адаптивные задержки, которые автоматически увеличиваются.

При обнаружении блокировки система переходит в защитный режим: автоматически увеличиваются задержки между запросами, система переходит в режим ожидания, через определенное время возобновляет работу с нормальными параметрами и логирует инцидент для последующего анализа.

⚡ Оптимизация производительности

Вместо фиксированных задержек используется умное ожидание элементов через WebDriverWait. Система динамически ждет появления слотов без лишних ожиданий, что уменьшило общее время бронирования на 2–2.5 секунды и значительно улучшило стабильность работы.

Проведена тщательная оптимизация временных параметров: убраны избыточные микрозадержки после закрытия попапов (0.02 секунды) и паузы после кликов (0.1 секунды). Оптимизированы ключевые настройки: задержка установки даты снижена с 0.5 до 0.3 секунды (-40%), клик по слоту — с 1.0 до 0.5 секунды (-50%), поиск кнопки подтверждения — с 1.0 до 0.3 секунды (-70%), клик подтверждения — с 1.0 до 0.5 секунды (-50%). В результате общее ускорение процесса бронирования составило 2.0–2.5 секунды.

💻 Веб-интерфейс управления

Веб-интерфейс предоставляет полнофункциональную админ-панель для управления всей системой. Через интерфейс можно управлять водителями (добавление, редактирование, удаление, управление данными транспорта, контроль статусов активности), просматривать все забронированные слоты с фильтрацией по датам и статусам, настраивать параметры работы бота (конфигурация режимов, управление параметрами мониторинга, настройка уведомлений) и отслеживать статистику (количество найденных и забронированных слотов, успешность бронирований, время работы системы, графики активности).

📝 Система логирования

Реализована многоуровневая система логирования для отслеживания всех операций. Основной лог содержит общую информацию о работе бота, успешные бронирования, ошибки и предупреждения. Отдельный лог успешных бронирований фиксирует только успешные операции с номерами заявок, датами и временем, что удобно для быстрого анализа результатов. Статистический лог собирает агрегированную статистику работы и периодические отчеты о производительности. При многопоточной работе ведутся отдельные логи для каждого потока, что значительно упрощает диагностику проблем.

🗄️ База данных

Система использует PostgreSQL для хранения всех данных. База данных организована по реляционной модели и хранит информацию о заявках на бронирование (связь с водителями, даты, статусы), данные водителей (контактная информация, данные транспорта, статусы активности) и настройки работы бота (параметры мониторинга, режимы работы, конфигурация потоков).

Для управления схемой базы данных используется Alembic, который обеспечивает версионирование схемы, отслеживание изменений структуры и безопасное применение обновлений. Это позволяет легко мигрировать базу данных при обновлениях системы без потери данных.

🚀 Развертывание и эксплуатация

Вся система развернута с использованием Docker, что обеспечивает изолированность компонентов, простоту развертывания, масштабируемость и воспроизводимость окружения. Основные контейнеры включают приложение (Django + Flask), базу данных PostgreSQL и веб-сервер Nginx.

Автоматизация развертывания осуществляется через специальный скрипт, который проверяет наличие Docker и Docker Compose, создает необходимые директории, настраивает переменные окружения, запускает контейнеры и проверяет работоспособность всех сервисов.

Для обеспечения стабильности работы реализованы механизмы проверки работоспособности: health check скрипт для проверки всех компонентов, автоматическая проверка доступности веб-портала завода, мониторинг состояния базы данных и проверка активности бота.

🔒 Безопасность

Все чувствительные данные хранятся в переменных окружения, включая учетные данные для авторизации на веб-портале завода, токены Telegram бота, пароли для базы данных и SSL-сертификаты. Это исключает риск случайного попадания секретов в систему контроля версий.

Веб-интерфейс защищен базовой HTTP-аутентификацией для доступа к админ-панели, HTTPS-соединением через Nginx и валидацией всех входящих данных для предотвращения атак через пользовательский ввод.

📈 Производительность и масштабируемость

Система поддерживает до 5 параллельных потоков мониторинга, способна обрабатывать до 100 слотов в минуту и реагирует на появление слота за 0.5–2 секунды. Оптимизация ресурсов достигается через несколько механизмов: headless-режим браузера снижает потребление памяти на 40–50%, автоматическое закрытие неиспользуемых вкладок освобождает память и ресурсы процессора, оптимизация базы данных через индексирование и оптимизацию запросов ускоряет операции в 2–3 раза, а умное кеширование часто используемых данных снижает нагрузку на базу данных.

🔌 Интеграции

Система интегрирована с Telegram для отправки уведомлений о каждом успешном бронировании с указанием номера заявки и деталей слота. Опционально настроены оповещения об ошибках для оперативного реагирования на проблемы.

REST API предоставляет возможности для управления водителями, получения информации о заявках и интеграции с внешними системами, что позволяет легко расширять функциональность и интегрировать систему с другими бизнес-процессами.

🔧 Особенности реализации

Веб-портал завода использует динамическую загрузку контента, что требует специальных подходов: ожидания загрузки элементов через WebDriverWait, обработки всплывающих окон и модальных диалогов, работы с JavaScript-элементами интерфейса.

Многоуровневая система обработки ошибок обеспечивает надежность работы: повторные попытки при временных сбоях, логирование всех ошибок для анализа, автоматическое восстановление после блокировок и graceful degradation при проблемах с отдельными компонентами.

📊 Метрики и аналитика

Система собирает и анализирует метрики в реальном времени по четырем категориям:

КатегорияМетрикиНазначение
ПроизводительностьКоличество проверенных дат, найденных слотовОценка эффективности мониторинга
УспешностьКоличество успешных бронирований, процент успешностиАнализ результативности системы
НадежностьВремя работы системы, количество ошибок по типамМониторинг стабильности
РесурсыИспользование памяти, CPU, время откликаОптимизация производительности

Все метрики логируются в отдельные файлы для последующего анализа и оптимизации, что позволяет постоянно улучшать работу системы.


✨ Заключение

Разработанная система автоматизации бронирования слотов полностью решила поставленную бизнес-задачу. Компания получила надежный инструмент, который работает круглосуточно, обеспечивая стабильное бронирование временных слотов и существенно повышая конкурентоспособность бизнеса.

💬 Обсудим ваш проект?

Готовы обсудить ваш проект?

Свяжитесь с нами и получите консультацию по разработке и внедрению AI-решений