Получение и визуализация данных из Битрикс24 без навыков программирования
Год назад у Битрикс24 появилась нативная интеграция с BI‑сервисом DataLens, и теперь пользователи CRM могут строить дашборд с бизнес‑аналитикой за несколько кликов. Для создания таких аналитических отчётов бизнес обычно объединяет все данные в единую базу. При таком подходе можно накладывать данные друг на друга, искать пересечения и строить обобщённые визуализации. Но в интерфейсе Битрикс24 такой возможности нет, а значит для создания единой базы нужны программисты.
В этом материале покажу, как настроить интеграцию Битрикс24 со сторонней базой данных, даже если вы вообще не знаете языков программирования.
Дисклеймер: Это бета‑версия скрипта для импорта лидов, сделок, контактов и компаний из Битрикс24 от участника сообщества DataLens. Если встретите ошибку или возникнут вопросы, пишите в телеграм https://t.me/polyakovbest
Что делаем
Наша задача — простым и безопасным способом передавать данные по лидам, сделкам, контактам и компаниям из Битрикс24 в базу данных, которая станет источником для DataLens.
Да, для подобных задач передачи данных существуют сторонние сервисы —, но в этом случае нельзя гарантировать недоступность информации третьим лицам и отсутствие уязвимостей, которые могут привести к утечке данных.
Поэтому мы сделаем так:
передадим в базу данных информацию из Битрикс24;
настроим функцию в облаке, которая будет работать как обозреватель для изменений данных Битрикс24. Для этого пригодятся возможности Yandex Cloud Functions.
Это поможет создать актуальные отчёты DataLens, которые будут содержать все данные, в том числе дополнительные пользовательские поля, взятые из разных систем.
Схема действий: пользователь заполняет файл с анкетой конфигурации, скачивает и запускает Docker (это одна строчка в консоли). Остальные действия выполняются внутри исполняемого Docker-образа.
Как подготовиться
Прежде чем настраивать автоматизацию пройдёмся по необходимым подготовительным шагам:
Получить доступ в базу данных, в которой будет храниться выгрузка. В этой базе уже должны быть созданы таблицы для приёма данных.
Необходимо получить доступы в формате: host, port, user, password, db_name.
А также выяснить названия полей в базе‑приёмнике.Если ваша база данных ClickHouse — то для работы с данными из CRM обязательно создать таблицы на движке VersionedCollapsingMergeTree (`sign` Int8, `version` UInt32).
Создать входящий вебхук в Битрикс24 на получение данных из CRM.
Входящий вебхук позволит выгрузить имеющиеся данные из Битрикс24 в базу.Создать вебхук можно в разделе для разработчиков Битрикс24, в подразделе Другое: Инструкция на сайте Поддержки24
Там же нужно проверить, что у нас есть возможность настроить исходящий вебхук из Битрикс24.
Одна из задач в этой статье — настроить облачную функцию-наблюдатель для данных, которые поступают из Битрикс24. Для этого мы должны дать возможность системе Битрикс24 обратиться к нашей облачной функции и что‑то ей передать.Зарегистрироваться в Yandex Cloud. Убедиться, что можем создавать Cloud Functions.
Зарегистрироваться можно на сайте Yandex Cloud. Затем в консоли управления облака необходимо зайти в любой каталог и из него выбрать сервис Cloud Functions.
Выгрузка данных из Битрикс24 в базу
Сначала мы запустим Docker‑контейнер, который создаст для нас весь код облачной функции для обработки событий поступающих из Битрикс24.
Скачать и установить дистрибутив Docker с официального сайта.
Скачать архив с кодом программы из репозитория и распаковать его.
Из распакованного архива открыть файл config.example.yaml в текстовом редакторе и заполнить:
авторизационную информацию Битрикс24,
авторизационную информацию базы данных, полученную на подготовительном шаге,
настройки переноса данных: какие данные в какие поля будем переносить. В образце задана возможность экспорта всех разделов Битрикс24, но при желании ненужные можно пропустить, например, экспортировать только сделки. Названия нужных полей в Битрикс24 можно легко найти через инструменты разработчика в консоли браузера.
Надо заполнить нужные нам поля реальными данными или присвоить им null, если их экспорт не нужен. Комментарии к заполнению на английском написаны в файле.
После этого сохранить файл там же с именем config.yaml
Открыть терминал, перейти в директорию с распакованным архивом и заполненными настройками с помощью команд:
cd и ls для Linux и MacOS,
cd и dir для Windows.
Выполнить команду:
docker build -t your-image-name
Docker скачает все необходимые библиотеки для запуска.
Открыть Docker Desktop и запустить образ:
Кнопка для запуска образа.
Создание кода для функции в Yandex Cloud
Для следующего шага ждём появления текста import started:
Deal import started — значит данные о структуре всех таблиц получены, сохранены и помещены в директорию с файлами облачной функции.
С этого момента Docker начал выполнять выгрузку данных из истории Битрикс24, и это означает, что файлы виртуальной функции уже готовы — они появляются после теста проверки подключения к базе и получения данных о таблицах в ней.
Чтобы скачать файлы облачной функции, надо пройти во вкладку Files и перейти в директорию App приложения Docker Desktop.
Расположение файлов: 1. Files. 2. App 3. cf (для скачивания).
Нас интересует папка с именем cf (cloud function). Нажимаем по ней правой кнопкой и сохраняем на диск через диалог Save.
Создаём архив из всех скачанных файлов.
Синим выделены файлы, которые нужно добавить в архив.
Если у вас MacOS, то открываем терминал, переходим в папку с созданным архивом и выполняем команду zip -d Архив.zip »__MACOSX/*»
zip -d Архив.zip "__MACOSX/*”
Удаление временных файлов из архива для MacOS.
Это нужно, чтобы исключить в файле архива наличие мусора — сборщику функций Yandex Cloud понадобится чистый архив.
Настраиваем функцию в Яндекс.Облаке
Заходим на https://cloud.yandex.ru. Переходим в Консоль >> Все сервисы >> Cloud Functions. Нажимаем Создать функцию.
Расположение кнопки создания новой функции.
Вводим имя и описание
Среда Python 3.11, файлы с примерами кода не нужны.
Нужно выбрать Zip-архив >> Прикрепить файл >> Выбираем созданный на прошлом шаге архив.
Спускаемся ниже и указываем точку входа index.handler.
Ещё ниже. Выставляем таймаут 10 секунд.
Нажимаем кнопку вверху справа Создать версию.
После того как попадем во вкладку Обзор, выставляем флаг Публичная функция и копируем ссылку на функцию.
1. Установка доступа к функции извне. 2. Адрес, по которому функцию можно разбудить.
В Битрикс24 открываем раздел Разработчикам >> Другое и создаём исходящий вебхук. В поле для ссылки вводим адрес нашей функции.
Копируем себе идентификатор приложения (токен) — он ещё понадобится.
Проставляем те события, наблюдателем которых должна быть наша функция.
Пример настройки исходящего вебхука в Битрикс24.
Возвращаемся в нашу функцию в консоли управления Yandex Cloud. Открываем Редактор.
Внизу редактора создаём переменную окружения с именем app_token и значением токена приложения из предыдущего шага.
Создаём версию. Функция готова.
Если импорт сделок в Docker закончился, то можно удалить образ, он нам больше не понадобится. Для этого можно использовать:
docker ps -a
docker rm ####
Сначала выполните первую команду. Затем найдите имя вашего контейнера и используйте его вместо ### во второй команде.
Как проверить, что всё работает
Идём в Битрикс24 и вносим любое изменение в отслеживаемую сущность. Например, в сделку, если вы настраивали функцию на их отслеживание.
После этого переходим в нашу созданную функцию и открываем вкладку «логи». Если там есть запись о совершенном импорте и нет ошибок — значит, всё работает как надо.
Примеры ошибок.
Примеры успешного обновления данных.
Бонусы для знакомых с Python
Как сделать свой собственный препроцессинг данных
Данный скрипт самостоятельно обрабатывает nullable‑поля, преобразовывает строки в числа, числа в строки там, где это необходимо. Но бывают случаи, когда простым препроцессингом не обойтись и надо преобразовать данные по сложной логике, например, для списочных свойств. На этот случай в настройках есть специальные поля:
В файле config.example.preproc.yaml есть внесённые значения для функций.
В файле config.example.yaml проставлены null, этот файл для тех, кто не будет писать собственные функции предобработки.
Чтобы пользоваться препроцессингом данных, надо написать специальную функцию и разместить её в файле preprocessing_functions.py.
Следует предусмотреть в этой функции сразу все возможные манипуляции, включая обработку null, так как встроенный препроцессинг не будет запускаться для этих значений.
Имя функции написать в файле config.yaml.
Функции пишутся на Python. Пример функции:
def add_million_to_id(value: str) -> int:
return int(value) + 1000000
Чтобы проще ориентироваться в содержании данных, я сделал отдельный метод, который можно запустить в терминале из директории проекта:
python show_values.py
Как узнать список полей Битрикс24 и их идентификаторы
В архиве проекта есть скрипт на языке Python, который можно запустить, заполнив информацию о вебхуке Битрикс24 из предварительного шага. Скрипт выведет все существующие поля для данных из вашего Битрикс24.
python show_fields.py
Как решать возможные проблемы с окружением Python
Последняя мини-инструкция поможет, если на вызов в консоли
python3 show_fields.py
мы получаем ошибку вида:
Traceback (most recent call last):
File "/Users/master/Dropbox/Analytics x AWST/Статьи/Импорт данных
из б24 в базу/show_fields.py", line 1, in
import requests
ModuleNotFoundError: No module named 'requests'
Для решения нужно 2 шага.
Узнаём, где у нас расположено окружение Python:
which python3
Получаем вывод:
/opt/homebrew/bin/python3
Установим необходимые для работы библиотеки по обнаруженному адресу:
/opt/homebrew/bin/python3 -m pip install --upgrade pip
/opt/homebrew/bin/python3 -m pip install requests
/opt/homebrew/bin/python3 -m pip install pyyaml