Привет! Меня зовут Антон Бугерко. Я руковожу проектами по разработке в IT-Solution — платиновом партнере «1C-Битрикс», интеграторе Битрикс24 и крупнейшем разработчике приложений для данной платформы.

В этой статье я расскажу о технологии интеграции Битрикс24 со сторонними сервисами, которая применяется в IT-Solution, а также поделюсь кейсами решения бизнес-задач наших клиентов.

Наиболее частые запросы владельцев порталов Битрикс24 — это интеграции со сторонними службами доставки, транспортными компаниями, ERP, сайтами и прочими сервисами.

Существует два типа лицензий Битрикс24 — облачная и коробочная. Варианты решения задачи интеграции очень схожи для обоих типов.

Первый: Найти готовое решение в Битрикс24 Маркетплейс

Метод надежный, но работает не всегда, так как нужного приложения может просто не быть среди 4000+ решений на маркете. Также стоит учитывать, что тиражные приложения создаются для массового использования и не могут учесть индивидуальные особенности всех отраслей бизнеса.

Второй: Разработать уникальный модуль интеграции или обратиться к подрядчику

Метод подходит только для коробочного Битрикс24 и таит множество подводных камней, о которых я расскажу чуть позже. Владельцы облачных лицензий могут перейти на «коробку» и уже там внедрять уникальный модуль, но это дорого и долго. Особенно эту задачу усложняет то, что с 1 сентября 2023 года прием заявок на бэкап для переноса портала из облака в коробочную версию прекращен.

Третий: Разработать и внедрить локальное приложение

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

Компания IT-Solution разработала технологию интеграции Битрикс24 со сторонними сервисами — «Интеграционный сервер». За последние 10 лет на ее основе было реализовано свыше 200 проектов. Далее расскажу об основных компонентах системы.

Что включает в себя технология

Интеграционный сервер — инфраструктура, разработанная с использованием фреймворка Django, в которой есть все необходимое для реализации двусторонних интеграций Битрикс24 со сторонними платформами:

1. Приложение на Django + Python, набор библиотек для работы с конкретной задачей и собственные разработки для взаимодействия с Битрикс24.

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

2. Базы данных на PostgreSQL для работы с данными, токенами приложения и логами.

3. Система получения и автоматического обновления SSL (acme + letsencrypt).

4. Сервисы запуска и перезагрузки приложения, а также системы, необходимые для работы сервера (uWSGI + Supervisor).

5. Сервис работы с системой контроля версий Git, перезагрузки и обновления приложения на сервере до новой версии релиза из административной панели.

6. Настройки регулярных задач через планировщик cron.

7. Система логирования разных уровней и каналов: файлы логов сервера, логи в базе данных приложения, уведомления в Telegram.

Почему был выбран именно Django + python

Основатель «IT-Solution» Евгений Хлобыстин начинал как программист 1С, поэтому высокоуровневый язык был просто ближе и удобнее. Первые решения в компании писали на чистом PHP. Так как фреймворки уровня Laravel еще не появились, начали искать более удобный инструмент. 

Как я говорил выше, Django оказался наиболее оптимальным вариантом благодаря документации, ООП и постоянному внедрению новых функций. Дополнительным аргументом стал опыт разработки приложения для VK на стеке Django + uwsgi, которое успешно справлялось с нагрузкой до 3000 пользователей одновременно. После этого кейса отказываться от Django + Python уже не хотелось. 

При разработке фронтенда мы столкнулись с трудностями и пробовали уйти от использования чистого JavaScript. Экспериментировали с разными фреймворками, но в итоге остановились на Vue.js, поскольку он реактивный, прост в использовании и совместим с Django + Python. 

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

Внутренняя архитектура решения

На изображении представлены схема и ключевые компоненты сервера, а также их взаимодействие с Битрикс24 и сторонними системами.
На изображении представлены схема и ключевые компоненты сервера, а также их взаимодействие с Битрикс24 и сторонними системами.

Примеры использования технологии

На основе технологии было реализовано множество интеграций облачного и коробочного Битрикс24 со сторонними сервисами. Вот несколько кейсов для демонстрации возможностей решения.

Интеграция Битрикс24 с транспортной компанией

Заказчик обратился в IT-Solution за разработкой решения для интеграции, которая позволит создавать заявки на доставку и отслеживать их статусы в Битрикс24, не заходя на сайт транспортной компании. Также потребовался специфический функционал: расчет ориентировочной стоимости и сроков доставки до ближайших к адресу клиента пунктов выдачи.

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

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

Заполненная заявка на перевозку на стороне Битрикс24.
Заполненная заявка на перевозку на стороне Битрикс24.

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

Расчёт стоимости доставки из карточки Сделки в Битрикс24.
Расчёт стоимости доставки из карточки Сделки в Битрикс24.

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

Ближайшие терминалы отгрузки к адресу клиента на интерактивной карте.
Ближайшие терминалы отгрузки к адресу клиента на интерактивной карте.
Ближайшие терминалы отгрузки к адресу клиента в подробной таблице.
Ближайшие терминалы отгрузки к адресу клиента в подробной таблице.

Во время тестирования калькулятора мы столкнулись с казусом. Для расчета кратчайшего расстояния от адреса клиента до терминалов использовалась формула декартова расстояния d = √((x₂ - x₁)² + (y₂ - y₁)²). Вследствие этого система считала расстояние фактически сквозь Землю.

Поняв причину и в очередной раз убедившись, что Земля — эллипсоид, мы воспользовались формулой гаверсинусов:

d = 2 * R * arcsin(√(sin²((lat2 - lat1)/2) + cos(lat1) * cos(lat2) * sin²((lon2 - lon1)/2)))

Где:

d — расстояние между точками (в километрах, если R — радиус Земли в километрах).

R — средний радиус Земли (около 6371 км).

lat1​, lon1​ — широта и долгота первой точки в радианах.

lat2​, lon2​ — широта и долгота второй точки в радианах.

Формула в виде метода модели:

def get_distance(self, latitude: float, longitude: float) -> float:
  lat1 = math.radians(latitude)
  lon1 = math.radians(longitude)
  lat2 = math.radians(self.latitude)
  lon2 = math.radians(self.longitude)
  return 2 * self.R * math.asin(math.sqrt(math.sin((lat2 - lat1) / 2) ** 2 + math.cos(lat1) * math.cos(lat2) * math.sin((lon2 - lon1) / 2) ** 2))

Также отмечу, что по умолчанию Django работает синхронно. Это не очень удобно, когда нужно быстро обработать много запросов к API. Чтобы ускорить работу приложения, можно использовать асинхронные библиотеки, такие как asyncio + aiohttp или httpx, но в данном случае мы обошлись ThreadPoolExecutor.

Интеграция Битрикс24 с несколькими сервисами

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

Основные источники данных для отчета:            

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

  2. Расположение объектов клиентов, к которым направлялись сотрудники, выгружено из карточек компаний Битрикс24.

  3. Данные о поездках на такси выгружены из корпоративного аккаунта в Яндекс Go по API Яндекса.

Схема взаимодействия интеграционного сервера с разными источниками данных
Схема взаимодействия интеграционного сервера с разными источниками данных

Для наглядности приведу пример получения данных из Яндекс GO и их последующего отображения на интерактивной карте.

  • Список сотрудников в корпоративном аккаунте Яндекс GO передается в локальное приложение.

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

  • Полученные данные о поездках обрабатываются и передаются в локальное приложение для отображения на карте.

  • Для соединения точек маршрутов между собой используется ymaps.Polyline.

В случае с другими источниками данных для выгрузки применяются аналогичные методы, но с определёнными нюансами. Например, для получения координат из адреса используется геокодер от Яндекса.

Интерфейс локального приложения в «Битрикс24» с отчётом о маршрутах сотрудников во время командировок
Интерфейс локального приложения в «Битрикс24» с отчётом о маршрутах сотрудников во время командировок

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

Система инвентаризации по QR-коду

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

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

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

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

Создание элементов смарт-процесса.
Создание элементов смарт-процесса.

Каждый сгенерированный элемент — это карточка устройства в смарт-процессе «Оборудование». В них вносится информация по технике, а также автоматически генерируется специальная ссылка на страницу оборудования в Битрикс24 для формирования QR-кода.

Заполненный элемент смарт-процесса «Оборудование»
Заполненный элемент смарт-процесса «Оборудование»

Почему я назвал ссылку «специальной»? Дело в том, что в нее зашит ID элемента смарт-процесса, чтобы по нему можно было определить, какое оборудование необходимо найти в системе. Проблема: если добавить просто ID, будет возможность перебором найти информацию о другом оборудовании. Так как QR-код будет использоваться не только сотрудниками, но и клиентами, это было недопустимо. Поэтому с помощью django.core.signing.Signer формируется защищенная от подбора ссылка с информацией, скрытой криптографической подписью.

  secret = Signer().sign(inventory_id)
  url = f'{self.BASE_URL}/inventory/{secret}'

После заполнения карточек работники склада генерируют QR-коды ссылок, распечатывают их и наклеивают на соответствующее оборудование.

Схема работы системы при сканировании QR-кода.
Схема работы системы при сканировании QR-кода.

При установке техники на объект специалист с помощью смартфона сканирует QR-код, который ведет на карточку оборудования в Битрикс24, и вносит данные по объекту установки, дату и прочую информацию.

При этом, если QR-код отсканирует пользователь, который не авторизован на портале Битрикс24 компании-заказчика, откроется карточка с контактной информацией и формой заявки на сервисное обслуживание.

WEB-интерфейс, доступный для неавторизованных пользователей
WEB-интерфейс, доступный для неавторизованных пользователей

Почему мы используем такой метод и на облаке, и на коробке Битрикс24?

Несмотря на то, что описанный выше метод интеграции изначально разрабатывался для облачной версии Битрикс24, в 99% случаев мы используем его и в случае с коробочными порталами.

Дело в том, что «1С-Битрикс» регулярно повышает версию PHP для обеспечения безопасности и высокой производительности своих продуктов. Последствия — после обновления коробки самописные модули могут перестать работать, так как обновленный PHP, например, не поддерживает какой-нибудь запрос. В свою очередь, на решения, построенные на базе отдельного сервера, это никак не повлияет.

Итог

Выделю три основных преимущества данной технологии интеграции.

Универсальность

Интеграцию можно реализовать на любых тарифах и типах лицензий Битрикс24 (за исключением облачного тарифа «Бесплатный»). Единственное условие — наличие подписки «Битрикс24 Маркетплейс».

Автономность

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

Многозадачность

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

Комментарии (2)


  1. atatarn
    04.08.2025 07:14

    Ещё бы облачный Б24 перестал использовать секрет webhook'а прямо в URL path, было бы совсем хорошо.

    Простите за нудёж.


  1. pavia
    04.08.2025 07:14

    Vue.js, совместим с Django + Python, пишите вы, ну каким он образом совместим то? Полная безграмотность, как и вся статья.