Как вытащить аналитику из Битрикса и не поймать бан по дороге

Как вытащить аналитику из Битрикса и не поймать бан по дороге

Битрикс отдаёт данные по 50 штук за раз и банит за жадность. Рассказываю, как построить на этом нормальную аналитику.

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

Данные лежат в Битриксе. Бери и строй, да?

А вот и нет. У Битрикса REST API, который выдаёт записи порциями по 50 штук и блокирует тебя, стоит начать частить. Несговорчивый свидетель, из которого показания вытягиваешь по чуть-чуть.

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

Почему нельзя просто выкачать всё разом

Облачный Битрикс живёт по лимитам. Базовый = два запроса в секунду. Превысил, ловишь ошибку и блокировку.

Работает так: каждый твой запрос увеличивает внутренний счётчик. Перебрал порог — следующие запросы отлетают с 503-й ошибкой, пока счётчик не остынет.

Есть и второй лимит, по времени: если методы суммарно молотят дольше положенного за десять минут, метод встаёт на паузу.

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

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

Контур, который работает: выгрузка Битрикс24 в Postgres

Схема называется ELT. Extract, Load, Transform. Сначала вытащили сырьё, сложили к себе, и только потом крутим.

Главное правило: не заставляй Битрикс что-либо считать и трансформировать. Его дело — отдать сырые данные. Вся аналитическая магия происходит уже в твоей базе, в Postgres.

Поток выглядит так:

Битрикс → raw → clean → marts → BI

Между Битриксом и дашбордом стоит Postgres, разбитый на три слоя. Каждый слой — своя зона ответственности.

Как вытащить аналитику из Битрикса и не поймать бан по дороге

Три слоя простыми словами

Представь склад. Обычный, с зонами.

  • raw — приёмка. Сгружаем всё как пришло, ничего не трогая. Приехали кривые данные — пусть лежат кривыми. Это точка отката: сломал обработку — перегнал заново отсюда, а не полез опять дёргать Битрикс и жечь лимиты.
  • clean — разбор. Тут наводим порядок: приводим типы, нормализуем телефоны и почты, разворачиваем коды в человеческий вид. У Битрикса статус сделки — это число, а менеджер — id. В clean они превращаются в «Оплачено» и «Иванов».
  • marts — выдача. Готовые витрины под конкретные отчёты. BI смотрит только сюда и больше никуда.

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

Как не упереться в лимиты

Четыре приёма, которые экономят нервы.

Батчи. Не дёргай API по одной записи. Метод batch пакует до 50 операций в один запрос. Вместо пятидесяти обращений — одно.

Инкремент вместо полной выгрузки. Не тащи всю базу каждый раз. Забирай только изменённое с прошлого прогона — по полю с датой изменения. А дату последней успешной выгрузки запоминай в служебной таблице. Это и есть watermark, водяная метка. Полную выгрузку оставь для редкой сверки.

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

Паузы и повторы. Словил временную ошибку — не долби сразу, подожди и повтори. Пара запросов в секунду с паузами вывезет миллионы записей. Жадность вывезет только бан.

Как вытащить аналитику из Битрикса и не поймать бан по дороге

Куда цепляем BI

BI-система подключается напрямую к Postgres. С одним условием.

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

Выглядит как занудство. Но именно из-за таких занудных мелочей потом никто не гадает, почему в отчёте цифры поехали.

5 ошибок, на которых спотыкаются

1. Гонят полную выгрузку каждый раз. База растёт, выгрузка удлиняется, в один день упирается в лимиты и встаёт колом. Инкремент с самого начала.

2. Забывают про удаления. Битрикс через список отдаёт живые записи и молчит про удалённые. В витрине копятся мертвяки — сделки, которых уже нет. Нужна периодическая сверка по id: чего нет в Битриксе, то помечаем удалённым.

3. Резолвят словари построчно. На каждую сделку — отдельный запрос за именем менеджера. Тысяча сделок — тысяча лишних запросов. Кэш снимает вопрос.

4. Строят трансформации внутри Битрикса. Нагружают портал, упираются в лимит по времени, тормозят всех вокруг. Трансформации — в Postgres, Битрикс только отдаёт сырьё.

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

Что еще почитать по теме подключения к Битриксу24 ?

Вопрос читателю

А вы как забираете данные из Битрикса — тянете батчами по расписанию или ловите изменения вебхуками на события? И где храните: Postgres, ClickHouse, что-то своё?

Делитесь в комментариях, интересно собрать разные подходы.

Подписывайтесь на мой телеграм-канал Data Дзен.

6
3