qwane

связать всё вместе

Интеграции и обмен данными между системами

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

Данные, которые сотрудники руками переносят из системы в систему, — это не только потерянное время. Это ещё и расхождения, которые обнаруживаются позже всего: цена в счёте не та, остаток на сайте не тот, заявка потерялась между формой и CRM. Ручной перенос всегда выглядит дешевле автоматического обмена ровно до того момента, когда кто-то начинает считать стоимость ошибок и сверок.

При этом интеграция ломается не в тот день, когда её написали. Она ломается через полгода: у смежной системы выросли объёмы, поменялся формат поля, сменился ключ доступа, сервер был недоступен ровно те десять минут, когда ушёл заказ. Поэтому надёжный обмен — это не «код, который вызывает чужой API», а несколько вещей вокруг: очередь, чтобы не потерять сообщение; повтор с нарастающей паузой, чтобы пережить чужой простой; защита от повторной обработки, чтобы один заказ не поехал дважды; и журнал, по которому видно, что именно ушло, что вернулось и где остановилось.

Второе место, где ошибаются чаще всего, — направление и источник правды. Пока не решено, какая система главная по цене, какая по остатку, а какая по статусу заказа, любой двусторонний обмен рано или поздно устраивает войну: одна система перезаписывает другую, обе считают себя правыми. Поэтому разговор начинается не с API, а с таблицы: какие сущности синхронизируем, в какую сторону по каждому полю, что происходит при конфликте и что считается признаком совпадения записей — ИНН, артикул, внешний идентификатор.

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

Что здесь ломается

Где обмен ломается через полгода после запуска

Что случаетсяКак обычно сделаноКак должно быть
Смежная система недоступнаЗапрос упал, данные потеряныОчередь и повтор с нарастающей паузой: уйдёт, когда поднимется
Вебхук пришёл дваждыДве записи в учётеКлюч операции: повтор распознаётся и не создаёт второй заказ
Поменялся формат поляМолча пишется мусорПроверка на входе, стоп с понятной ошибкой вместо тихой порчи
Обе системы правят одно полеКто последний, тот и правИсточник правды по каждому полю зафиксирован заранее
Записи не сопоставляютсяСверка глазами по названиюПравило совпадения: ИНН, артикул, внешний идентификатор
Объёмы вырослиВыгрузка не успевает за ночьПередаются изменения, а не весь справочник целиком
Никто не знает, работает ли обменУзнают от клиентаЖурнал и уведомление о сбое раньше, чем заметит бизнес

Что входит

Для кого

тем, у кого данные живут в нескольких системах и переносятся вручную: сайт и 1С, CRM и учёт, заявки с форм и мессенджеров, платежи и заказы. Особенно там, где расхождение между системами уже стоило денег.

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

Частые вопросы

Сколько стоит одна интеграция?
Смету двигают три вещи: качество чужого API, число сущностей и требования к актуальности. Односторонняя выгрузка справочника раз в сутки и двусторонний обмен заказами и остатками в реальном времени различаются в разы при одинаковом списке систем. Вилка и разбор того, что двигает цену, — на странице стоимости интеграции; цена и срок фиксируются до начала работ.
А если у смежной системы нет API?
Тогда смотрим, что есть: обмен файлами по расписанию, выгрузка из интерфейса, прямой доступ к базе на чтение. Все три хуже полноценного API, и я говорю об этом прямо, а не выдаю обходной путь за решение. Чего я не делаю — так это разбора чужого интерфейса роботом: такая связка ломается при первом же обновлении смежной системы и без предупреждения.
Что будет, когда 1С или CRM обновятся?
Обмен построен так, чтобы поломка была заметной, а не тихой. Данные проверяются на входе: если пришло не то, что ожидалось, обмен останавливается с понятной ошибкой и уведомлением, а не пишет мусор в вашу систему. Это принципиальный выбор — лучше остановиться и разобраться, чем полгода спустя выяснять, откуда в базе взялись странные цены.
Можно автоматизировать процесс целиком, а не только обмен?
Часто именно это и нужно. Обмен переносит данные, автоматизация принимает по ним решения: разобрать заявку, назначить ответственного, собрать документ, отправить уведомление, поднять флаг при отклонении. Это соседний раздел сайта, и там разобрано по процессам, что реально снимается с рук, а что только выглядит автоматизируемым.

Строишь что-то такое?

Расскажи, что строишь — отвечу в течение дня.

Обсудить проект

Разбор по теме

Все разборы