Как мы связали CRM с корпоративными системами через TypeScript-скрипты, которые аналитики собирают в бизнес-процессы без программирования
Крупная нефтегазовая компания внедряла CRM на ELMA365, и CRM нужно было связать с корпоративными системами: 1С и системой электронного документооборота КИС КЭД. Проект вёл системный интегратор. Штатных специалистов по ELMA365 для кастомной разработки ему не хватало, и в июне 2023 года он подключил бэкенд-разработчиков Фортех.
Интеграции пишутся как скрипты на TypeScript. Они работают с API систем и с бизнес-процессами ELMA365, а потом не-программисты собирают из них блок-схемы обмена данными.
Команда интеграций: три бэкенд-разработчика и тимлид, который одновременно вёл проект как менеджер. Вокруг работали аналитики, архитекторы, QA-инженеры, DevOps-инженер и лоукодеры. Работа длилась шесть месяцев, до декабря 2023 года.
Требование заказчика: минимальная нагрузка на сеть. Между системами передаётся только разница в данных, а не полный набор.
С разницей сложно работать, когда у сущности есть связь «один ко многим». Обычно в таком случае набор связанных сущностей отправляют целиком, даже если поменялась одна, потому что так проще и меньше риск ошибиться. Здесь так делать было нельзя.
Интеграции разворачиваются во внутреннем контуре компании. Доступ к серверу идёт через удалённый рабочий стол по шифрованному каналу, а отладка возможна только по логам.
Требования к каждой интеграции согласуются с разработчиками других систем. Если в ТЗ находится ошибка, её исправляют вместе с архитекторами и аналитиками всех сторон.
Как шла работа. Аналитики и архитекторы встречались с разработчиками смежных систем и описывали требования: структуру входящих и исходящих данных, поток через корпоративную шину, где XML превращается в JSON, и текстовое описание логики. На ежедневных созвонах команда разбирала ТЗ, искала в нём неточности, расставляла приоритеты и сверялась с трекером: что готово, что заблокировано, что отменено.
Передача только изменений. Синхронизацию связей «один ко многим» согласовали с архитекторами заказчика и 1С и сделали вручную. Изменения передаются тремя массивами: на создание, на изменение и на удаление. В каждом лежат идентификаторы или полные данные сущностей. Решение прошло тестирование и было развёрнуто в тестовом окружении для интеграции с остальными системами.
Единый POST-запрос. Для всех операций спроектировали один формат запроса. Если в запросе стоит флаг удаления, сущность удаляется. Если нет, скрипт ищет сущность по идентификатору: нашёл, значит обновляет, не нашёл, значит создаёт. Если пришёл массив, включается пакетная обработка для первичной выгрузки данных.
Все функции обработки изначально написаны для массивов. Одиночный элемент просто упаковывается в массив из одного элемента, поэтому отдельный код для единичных операций не нужен. Заодно появился задел на пакетное обновление и удаление.
Выгрузка и отладка. Выгрузка из CRM в Excel сделана на SheetJS. Каждый шаг обработки пишется в лог, а логи доступны в веб-интерфейсе ELMA365 как обычные записи. Ошибки исправляются на тестовой среде и после тестирования переезжают во внутренний контур.
CRM ELMA365 получила обмен с 1С и системой документооборота, который передаёт только изменения и не нагружает сеть лишними данными.
Один формат запроса покрывает создание, изменение, удаление и первичную загрузку, а пакетное обновление и удаление можно добавить на той же основе.
Сотрудники без навыков программирования собирают обмен данными из готовых скриптов в блок-схемах ELMA365.
Весь пул задач и правки заказчика за шесть месяцев реализованы и протестированы, на этом работа завершилась.
Как синхронизировать данные между ELMA365 и 1С без лишней нагрузки на сеть?
Передавать только разницу. В этом проекте изменения уходили тремя массивами: на создание, изменение и удаление, в том числе для связей «один ко многим».
Можно ли обойтись одним запросом на все операции?
Да. Флаг удаления, поиск по идентификатору с обновлением или созданием и пакетная обработка массива укладываются в один формат POST-запроса.
Как отлаживать интеграции во внутреннем контуре заказчика?
Писать подробный лог каждого шага обработки и смотреть его в веб-интерфейсе ELMA365. Исправления проверяются на тестовой среде и только потом переносятся в контур.

Как мы искали узкие места в каталоге на Strapi, наладили синхронизацию характеристик с 1С и проверяли, откуда в категориях берутся чужие бренды

Как фронтенд-разработчик Фортех сделал умное автозаполнение по справочнику и девять конфигурируемых форм для компоновки буровой колонны

Как бэкенд-разработчик Фортех 1 год и 3 месяца работал в одной из двадцати команд автодилера: интеграции, общий NPM-пакет, новая авторизация и наблюдаемость

Как мы за пять месяцев собрали ядро магазина на NestJS: гибкие цены для трёх типов клиентов, обмен с 1С без дублей и поиск с русской морфологией