Найти в Дзене

Автоматизация отчетов: интеграция Битрикс24 с MySQL по расписанию

Для компаний, использующих Битрикс24, аналитика — ключ к контролю эффективности сотрудников. Можно настроить интеграцию между Битрикс24 и MySQL, чтобы иметь все данные в базе и сделать визуализацию отчетов на дашборде. Однако постоянная выгрузка данных в MySQL создает избыточную нагрузку на систему и API. Узнайте, как обеспечить быстродействие и оптимальную нагрузку на портал и СУБД, настроив выгрузку данных по расписанию. Чем это отличается от обычной периодической выгрузки и какую бизнес-пользу такой подход может вам принести, расскажем далее в статье. Один из наших заказчиков - производитель инструментов - ведет операционную деятельность в коробочном Битрикс24. Сотрудники работают в задачах и руководителю ежемесячно нужно контролировать их выполнение с учетом множества факторов. Объем задач большой. Для получения глубокой и полной аналитики по выполнению задач во всех отделах компании мы настроили интеграцию между Битрикс24 и MySQL на платформе Пинкит. Интеграция выгружает обновлени
Оглавление

Для компаний, использующих Битрикс24, аналитика — ключ к контролю эффективности сотрудников. Можно настроить интеграцию между Битрикс24 и MySQL, чтобы иметь все данные в базе и сделать визуализацию отчетов на дашборде. Однако постоянная выгрузка данных в MySQL создает избыточную нагрузку на систему и API. Узнайте, как обеспечить быстродействие и оптимальную нагрузку на портал и СУБД, настроив выгрузку данных по расписанию. Чем это отличается от обычной периодической выгрузки и какую бизнес-пользу такой подход может вам принести, расскажем далее в статье.

1. Аналитика по задачам из Битрикс24 в MySQL

Один из наших заказчиков - производитель инструментов - ведет операционную деятельность в коробочном Битрикс24. Сотрудники работают в задачах и руководителю ежемесячно нужно контролировать их выполнение с учетом множества факторов.

Объем задач большой. Для получения глубокой и полной аналитики по выполнению задач во всех отделах компании мы настроили интеграцию между Битрикс24 и MySQL на платформе Пинкит. Интеграция выгружает обновления по задачам (статус, крайний срок, результат и так далее) в таблицу, каждой задаче соответствует отдельная строка.

Если задача удалена (сотрудникам иногда удобнее не закрыть неважную задачу, а удалить ее) - статус задачи в БД меняется на "удаленная".

Проблема

В процессе работы интеграции мы заметили несколько проблем.

1.1. Выгрузка срабатывает каждые 5 минут

Из-за того, что задач много и каждая обновляется ежедневно не по одному разу, выгрузка генерировала очень много API-вызовов, и хотя база данных MySQL, как и Пинкит, высокую нагрузку поддерживает, это не приносило заказчику бизнес-пользу.

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

Как связан объем API-вызовов в интеграциях по обмену данными и бизнес-польза для пользователей CRM? Читайте в статье.

1.2. Рассинхронизация данных

На больших объемах сущностей замечены единичные примеры рассинхронизация данных.

Решение

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

  • Сократить количество запросов к серверу на 95%.
  • Устранить рассинхронизацию данных.
  • Упростить аналитику: данные в MySQL всегда актуальны на момент формирования отчета.

Готовый шаблон интеграции есть по ссылке.

-2

Далее покажем пример настройки обеих интеграций: по обновлению задач и по запуску интеграции по графику.

2. Запуск интеграции в начале каждого месяца. Задача обновлена => MySQL_task

2.1. Шаг 1: Откуда

Забираем данные из Битрикс24 при событии обновления задачи. Добавляем два дополнительных запроса:

Тип: Запрос
Название: order[CHANGED_DATE]
Значение: ASC

Тип: Запрос
Название: filter[>CHANGED_DATE]
Значение: {{now|date('Y-m-d\TH:i:s','Europe/Moscow','-1 month)}}
-3

2.2. Шаг 2: Инструменты

  • Проверка. Задача выгружалась ранее в БД?

Используем Поиск ID соответствующий сущности. Название поля - source.id.

-4
  • Если задача ранее не выгружалась в базу данных, тогда пропустить обработку данной задачи

Используем проверку в поле step13. Условие - (Логическое) Истина, Действие - Продолжить, если проверка пройдена.

-5
  • Получить постановщика

Используем API-запрос методом GET с указанием URL /user.get.json?ID={{source.createdBy}}.

-6
  • Информация о исполнителе

Используем API-запрос методом GET с указанием URL /user.get.json?ID={{source.responsibleId}}.

-7
  • Дата создания задачи

Используем Форматирование даты/времени в поле source.createdDate. Формат даты/времени - Y-m-d H:i:s.

-8
  • Крайний срок задачи

Используем Форматирование даты/времени в поле source.deadline.

-9
  • Дата последнего изменения

Используем Форматирование даты/времени в поле source.changedDate. Формат даты/времени - Y-m-d H:i:s.

-10
  • Дата закрытия

Используем Форматирование даты/времени в поле source.closedDate. Формат даты/времени - Y-m-d H:i:s.

-11
  • Получить теги у задачи

Используем API-запрос методом GET с указанием URL /task.item.gettags?TASK_ID={{source.id}}.

-12
  • Преобразовать массив тегов в строку

Преобразуем массив в JSON в поле step7.result. Условие выполнения - step7.result.

-13
  • Статус задачи

Используем сопоставление данных в поле source.status. Сопоставляем статус задачи и столбец в таблице БД.

-14
  • Получить департамент постановщика

Используем API-запрос методом GET с указанием URL /department.get.json?ID={{step1.result.0.UF_DEPARTMENT.0}}.

-15
  • Получить департамент Исполнителя

Используем API-запрос методом GET с указанием URL /department.get.json?ID={{step2.result.0.UF_DEPARTMENT.0}}.

Условие выполнения - step2.result.0.UF_DEPARTMENT.

-16
  • Приоритет задачи

Используем Сопоставление данных для сопоставления приоритета задачи и соответствующий столбец таблицы.

-17
  • Получить результат задачи

Используем API-запрос методом GET с указанием URL /tasks.task.result.list?taskId={{source.id}}.

-18
  • Проверяем наличие результата по задаче

Используем инструмент Если-Иначе в поле step15.result. Условие - Не пустое значение. Результат при успешной проверке = 1, Результат при неуспешной проверке = 0.

-19
  • Убрать теги из комментария

Используем замену по регулярному выражению в поле step15.result.0.text. Условие выполнения - step16. Регулярное выражение = /\[.*?\]/.

-20

2.3. Шаг 3: Куда

Обновляем строку в БД MySQL.

-21

2.4. Шаг 4: Сопоставление данных

Добавляем пользовательские сопоставления.

ID задачи
Тип: Столбец SQL
Название параметра: id_task
Значение параметра: {{Идентификатор задачи}}

Название
Тип: Столбец SQL
Название параметра: Nazvanie
Значение параметра: {{Название задачи}}

Ссылка
Тип: Столбец SQL
Название параметра: Ssylka
Значение параметра: https://**/company/personal/user/{{Исполнитель (id)}}/tasks/task/view/{{Идентификатор задачи}}/

ID родительской задачи
Тип: Тело
Название параметра: ID_roditelskoj_zadachi
Значение параметра: {{Идентификатор родительской задачи}}

Описание
Тип: Столбец SQL
Название параметра: Opisanie
Значение параметра: {{Описание}}

Постановщик
Тип: Столбец SQL
Название параметра: Postanovshchik
Значение параметра: {{step1.result.0.LAST_NAME|default()}} {{step1.result.0.NAME|default()}}

Ответственный
Тип: Столбец SQL
Название параметра: Otvetstvennyj
Значение параметра: {{step2.result.0.LAST_NAME|default()}} {{step2.result.0.NAME|default()}}

Дата создания задачи
Тип: Столбец SQL
Название параметра: Data_sozdaniya
Значение параметра: {{step3|default(1970-01-01 00:00:00)}}

Крайний срок задачи
Тип: Столбец SQL
Название параметра: Krajnij_srok
Значение параметра: {{step4|default(1970-01-01 00:00:00)}}

Дата последнего изменения задачи
Тип: Столбец SQL
Название параметра: Data_poslednego_izmeneniya
Значение параметра: {{step5|default(1970-01-01 00:00:00)}}

Дата закрытия задачи
Тип: Столбец SQL
Название параметра: Data_zakrytiya
Значение параметра: {{step6|default(1970-01-01 00:00:00)}}

Теги
Тип: Столбец SQL
Название параметра: Tegi
Значение параметра: {{step8|default()}}

Статус задачи
Тип: Столбец SQL
Название параметра: Status
Значение параметра: {{step9}}

Отдел постановщика
Тип: Столбец SQL
Название параметра: Otdel_postanovshchika
Значение параметра: {{step10.result.0.NAME|default(Не указан)}}

Отдел ответственного
Тип: Столбец SQL
Название параметра: Otdel_otvetstvennogo
Значение параметра: {{step11.result.0.NAME|default(Не указан)}}

Проект/Группа
Тип: Столбец SQL
Название параметра: Proekt
Значение параметра: {{source.group.name|default(Не указан)}}

Приоритет
Тип: Столбец SQL
Название параметра: PRIORITY
Значение параметра: {{step12}}

Результат задачи
Тип: Столбец SQL
Название параметра: rezult_zadachi
Значение параметра: {{step17|default()}}
-22

2.5. Шаг 5: Запуск

Запускаем.

-23

3. Интеграция запускает другую интеграцию по расписанию

3.1. Шаг 1: Откуда

Указываем событие срабатывания вебхука.

-24

3.2. Шаг 2: Инструменты

Пропускаем.

3.3. Шаг 3: Куда

Запускаем интеграцию Пинкит с доступом через Login-Pass.

-25

3.4. Шаг 4: Сопоставление данных

Сопоставляем строки БД и поля задач.

-26

3.5. Запуск

Запускаем.

-27

4. Итог

Настройка интеграции для запуска синхронизации данных из Битрикс24 в MySQL позволила заказчику:

  • Сократить запросы к серверу на 95%, снизив затраты на инфраструктуру.
  • Устранить ошибки в аналитике.
  • Ускорить подготовку отчетов с 2 дней до 2 часов.

Хотите оптимизировать аналитику задач? Скачайте шаблон по ссылке или свяжитесь с нами в Телеграм или WhatsApp, — наши эксперты Пинкит помогут настроить решение под ваши задачи.

-28
Если вам нужна интеграция с сервисом, которого в Пинкит нет, или приватное событие/действие, через Пинкитбилдер вы можете самостоятельно добавить авторизацию, необходимые события и действия без разработки.
Подберите свой готовый шаблон интеграции без регистрации здесь.
Алексей Окара, продакт-менеджер Пинкит
-29

#пинол #пинкит #pinall #pinkit #bitrix24 #битрикс24 #amo #amocrm #амо #амоцрм #crm #црм #црмсистема #црм_система #внедрениецрм #интеграция #миграция #обмен #пинкитбилдер #пинкит_mysql_битрикс24