Для компаний, использующих Битрикс24, аналитика — ключ к контролю эффективности сотрудников. Можно настроить интеграцию между Битрикс24 и MySQL, чтобы иметь все данные в базе и сделать визуализацию отчетов на дашборде. Однако постоянная выгрузка данных в MySQL создает избыточную нагрузку на систему и API. Узнайте, как обеспечить быстродействие и оптимальную нагрузку на портал и СУБД, настроив выгрузку данных по расписанию. Чем это отличается от обычной периодической выгрузки и какую бизнес-пользу такой подход может вам принести, расскажем далее в статье.
1. Аналитика по задачам из Битрикс24 в MySQL
Один из наших заказчиков - производитель инструментов - ведет операционную деятельность в коробочном Битрикс24. Сотрудники работают в задачах и руководителю ежемесячно нужно контролировать их выполнение с учетом множества факторов.
Объем задач большой. Для получения глубокой и полной аналитики по выполнению задач во всех отделах компании мы настроили интеграцию между Битрикс24 и MySQL на платформе Пинкит. Интеграция выгружает обновления по задачам (статус, крайний срок, результат и так далее) в таблицу, каждой задаче соответствует отдельная строка.
Если задача удалена (сотрудникам иногда удобнее не закрыть неважную задачу, а удалить ее) - статус задачи в БД меняется на "удаленная".
Проблема
В процессе работы интеграции мы заметили несколько проблем.
1.1. Выгрузка срабатывает каждые 5 минут
Из-за того, что задач много и каждая обновляется ежедневно не по одному разу, выгрузка генерировала очень много API-вызовов, и хотя база данных MySQL, как и Пинкит, высокую нагрузку поддерживает, это не приносило заказчику бизнес-пользу.
Данные по задачам нужны только к концу месяца для подготовки отчетности по итогам работы сотрудников, а интеграция обновляла строки в отчете много лишних раз и генерировала избыточную нагрузку.
Как связан объем API-вызовов в интеграциях по обмену данными и бизнес-польза для пользователей CRM? Читайте в статье.
1.2. Рассинхронизация данных
На больших объемах сущностей замечены единичные примеры рассинхронизация данных.
Решение
Мы предложили заменить частую выгрузку на запуск интеграции раз в месяц, перед подготовкой отчетов. Это позволило:
- Сократить количество запросов к серверу на 95%.
- Устранить рассинхронизацию данных.
- Упростить аналитику: данные в MySQL всегда актуальны на момент формирования отчета.
Готовый шаблон интеграции есть по ссылке.
Далее покажем пример настройки обеих интеграций: по обновлению задач и по запуску интеграции по графику.
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)}}
2.2. Шаг 2: Инструменты
- Проверка. Задача выгружалась ранее в БД?
Используем Поиск ID соответствующий сущности. Название поля - source.id.
- Если задача ранее не выгружалась в базу данных, тогда пропустить обработку данной задачи
Используем проверку в поле step13. Условие - (Логическое) Истина, Действие - Продолжить, если проверка пройдена.
- Получить постановщика
Используем API-запрос методом GET с указанием URL /user.get.json?ID={{source.createdBy}}.
- Информация о исполнителе
Используем API-запрос методом GET с указанием URL /user.get.json?ID={{source.responsibleId}}.
- Дата создания задачи
Используем Форматирование даты/времени в поле source.createdDate. Формат даты/времени - Y-m-d H:i:s.
- Крайний срок задачи
Используем Форматирование даты/времени в поле source.deadline.
- Дата последнего изменения
Используем Форматирование даты/времени в поле source.changedDate. Формат даты/времени - Y-m-d H:i:s.
- Дата закрытия
Используем Форматирование даты/времени в поле source.closedDate. Формат даты/времени - Y-m-d H:i:s.
- Получить теги у задачи
Используем API-запрос методом GET с указанием URL /task.item.gettags?TASK_ID={{source.id}}.
- Преобразовать массив тегов в строку
Преобразуем массив в JSON в поле step7.result. Условие выполнения - step7.result.
- Статус задачи
Используем сопоставление данных в поле source.status. Сопоставляем статус задачи и столбец в таблице БД.
- Получить департамент постановщика
Используем API-запрос методом GET с указанием URL /department.get.json?ID={{step1.result.0.UF_DEPARTMENT.0}}.
- Получить департамент Исполнителя
Используем API-запрос методом GET с указанием URL /department.get.json?ID={{step2.result.0.UF_DEPARTMENT.0}}.
Условие выполнения - step2.result.0.UF_DEPARTMENT.
- Приоритет задачи
Используем Сопоставление данных для сопоставления приоритета задачи и соответствующий столбец таблицы.
- Получить результат задачи
Используем API-запрос методом GET с указанием URL /tasks.task.result.list?taskId={{source.id}}.
- Проверяем наличие результата по задаче
Используем инструмент Если-Иначе в поле step15.result. Условие - Не пустое значение. Результат при успешной проверке = 1, Результат при неуспешной проверке = 0.
- Убрать теги из комментария
Используем замену по регулярному выражению в поле step15.result.0.text. Условие выполнения - step16. Регулярное выражение = /\[.*?\]/.
2.3. Шаг 3: Куда
Обновляем строку в БД MySQL.
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()}}
2.5. Шаг 5: Запуск
Запускаем.
3. Интеграция запускает другую интеграцию по расписанию
3.1. Шаг 1: Откуда
Указываем событие срабатывания вебхука.
3.2. Шаг 2: Инструменты
Пропускаем.
3.3. Шаг 3: Куда
Запускаем интеграцию Пинкит с доступом через Login-Pass.
3.4. Шаг 4: Сопоставление данных
Сопоставляем строки БД и поля задач.
3.5. Запуск
Запускаем.
4. Итог
Настройка интеграции для запуска синхронизации данных из Битрикс24 в MySQL позволила заказчику:
- Сократить запросы к серверу на 95%, снизив затраты на инфраструктуру.
- Устранить ошибки в аналитике.
- Ускорить подготовку отчетов с 2 дней до 2 часов.
Хотите оптимизировать аналитику задач? Скачайте шаблон по ссылке или свяжитесь с нами в Телеграм или WhatsApp, — наши эксперты Пинкит помогут настроить решение под ваши задачи.
Если вам нужна интеграция с сервисом, которого в Пинкит нет, или приватное событие/действие, через Пинкитбилдер вы можете самостоятельно добавить авторизацию, необходимые события и действия без разработки.
Подберите свой готовый шаблон интеграции без регистрации здесь.
Алексей Окара, продакт-менеджер Пинкит
#пинол #пинкит #pinall #pinkit #bitrix24 #битрикс24 #amo #amocrm #амо #амоцрм #crm #црм #црмсистема #црм_система #внедрениецрм #интеграция #миграция #обмен #пинкитбилдер #пинкит_mysql_битрикс24