Услуги · обмен данными между системами

Интеграции систем: 1С, CRM, сайт, маркетплейсы и оборудование

Строим обмен, который переживает падение любой из сторон: событие пишется в одной транзакции с данными, доставка повторяется, дубли не проходят, а каждое сообщение видно в журнале.

16 ч → 9 минобработка ключевых процессов
3–5 днейдиагностика обмена
  • Транзакционный Outbox
  • Идемпотентные обработчики
  • Журнал обмена и алерты

Разобрать ваш обмен

Напишите, какие системы уже стоят и где рвётся. Вернёмся с планом диагностики и оценкой.

16 ч → 9 минвремя обработки ключевых процессов после автоматизации логистики
8микросервисов за одним централизованным API-шлюзом
5баз данных, связанных в одном отказоустойчивом контуре
Outbox + Kafkaдоставка событий, которая переживает падение приёмника

Знакомая картина

Как выглядит обмен, который «вроде работает»

Четыре ситуации, с которыми к нам приходят чаще всего. Под каждой — одна и та же инженерная причина, а не невезение.

Заказы

Клиент оплатил на сайте, а в 1С заказа нет — и узнаём мы об этом от клиента

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

Остатки

На маркетплейсе висит пять штук, на складе давно ноль

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

Расписание

Обмен падает примерно раз в неделю, и никто не понимает почему

Потому что от обмена не остаётся ни журнала, ни метрик — только «файлы не пришли». Мы заводим журнал обмена: сообщение, попытка, ответ приёмника, причина отказа. Разбор падения занимает минуты, а не рабочий день.

После сбоя

Сбой прошёл, а что доехало и что догружать руками — непонятно

Ручная догрузка — самый дорогой способ потерять данные ещё раз. При идемпотентных обработчиках повтор безопасен: можно перезалить весь интервал, дубли не появятся, а журнал покажет, что именно изменилось.

С чем связываем

Системы, между которыми ходят данные

Коробочного коннектора не существует: каждый поток проектируется под формат, лимиты и режим работы конкретной стороны — включая случаи, когда документации на API нет.

01

Учёт, CRM и порталы

Системы, где живут заказы, клиенты и документы.

  • 1С — номенклатура, остатки, заказы, документы
  • amoCRM — сделки, контакты, статусы воронки
  • Bitrix24 — карточки, задачи, права доступа
  • Сайт или интернет-магазин через REST
02

Маркетплейсы и площадки

Товары, цены, остатки и заказы в обе стороны.

  • Wildberries и Ozon через их API
  • Выгрузка прайсов и остатков по расписанию
  • Забор заказов и статусов отгрузки
  • EDI-обмен с торговыми сетями
03

Касса, ОФД и банк

Контур, в котором ошибка обмена стоит дороже всего.

  • ККМ и ОФД — чеки и фискальные данные
  • Банковские выписки и платёжные реестры
  • Сопоставление платежей с заказами
  • Ежедневный отчёт о расхождениях
04

Произвольные источники

Всё, у чего есть хоть какой-то интерфейс.

  • REST и SOAP, в том числе недокументированные
  • Google Таблицы и Яндекс Таблицы
  • Файловый обмен: CSV, XML, xlsx
  • Чтение чужой базы, когда API не существует

Механика

Почему интеграции ломаются и как мы это чиним

Обмен теряет данные не потому, что «сеть плохая». Ломается он в четырёх предсказуемых местах, и на каждое есть конкретный механизм, который мы ставим по умолчанию.

Потери → транзакционный Outbox

Событие пишется в таблицу outbox в той же транзакции, что и сам документ. Отдельный процесс читает её и публикует в Kafka или дёргает приёмника. Состояния «заказ есть, а сообщения нет» не существует.

commit → outbox → relay → приёмник

Дубли → идемпотентность по ключу

Ключ сообщения вычисляется из данных источника, а не из времени отправки. Приёмник делает upsert по внешнему идентификатору и помнит обработанные ключи. Повторная доставка меняет ноль строк, поэтому повтор после сбоя — штатная операция.

at-least-once доставка + идемпотентный приём

Тишина при сбое → журнал и алерты

Каждая попытка сохраняется со статусом, телом запроса и ответом стороны. Повторы идут с растущими паузами, исчерпавшие лимит уходят в очередь разбора. Алерт приходит на застрявшую очередь раньше, чем о проблеме сообщит клиент.

попытка · статус · причина · возраст очереди

Рассинхрон → проекции и сверки

Читающие системы получают не собственную версию правды, а проекцию источника: read-модель обновляется событиями по схеме CQRS, а раз в сутки идёт сверка сумм и количеств. Расхождение попадает в отчёт, а не в претензию от покупателя.

источник истины → проекция → ночная сверка

Как этот обмен собран внутри ERP-платформы →

Опыт

Что мы уже связывали

Три разных класса задач: операционная логистика, интеграция хранилищ данных и обмен финансовыми сообщениями в чужом формате.

Логистика · микросервисы

Логистическая платформа — операции вместо ручной работы

Восемь масштабируемых микросервисов за централизованным API-шлюзом, версионированные миграции, логирование Vector → Elasticsearch. Процессы перестали зависеть от того, успел ли человек перенести данные руками.

16 ч → 9 минвремя обработки ключевых процессов

Разбор проекта →

Данные · ETL

Пять баз данных в одном контуре

Отказоустойчивая интеграция пяти баз данных и полный цикл внедрения Airflow: от настройки до динамических DAG, которые разворачиваются под новые источники без правки кода пайплайна.

5 баз данныхв одной интеграции

Опыт студии →

Финансы · форматы

Крупный банк — интеграция в Murex

Интеграционное решение в Murex с преобразованием MxML → FIXML. Чужой формат и жёсткие требования к каждому полю: сообщение либо валидно, либо не уходит.

MxML → FIXMLпреобразование форматов

Опыт студии →

С чего начинаем

Диагностика существующего обмена

Прежде чем что-то переписывать, нужно понять, что именно уже ходит между вашими системами. Это отдельная работа с фиксированным сроком и результатом.

01

Инвентаризация систем и потоков

Собираем список систем, точек обмена и ответственных с обеих сторон. Отдельно отмечаем то, что переносится руками или файлами на общем диске: обычно теряется именно там.

1 деньреестр потоков

02

Разбор механики каждого потока

Формат, транспорт, периодичность, гарантия доставки и поведение при ошибке. Читаем код обмена и настройки, а не описания в вики: расхождение между ними и есть источник сбоев.

1–2 днякарта механик

03

Воспроизведение сбоев

Поднимаем логи за период, ищем потерянные и задвоенные сообщения, проверяем, что произойдёт при недоступности приёмника и повторной загрузке одного и того же файла.

1 деньперечень инцидентов

04

Карта потоков и список дыр

Отдаём документ: схема обмена, места потери данных, оценка работ по каждому и порядок, в котором их разумно чинить. Разбираем документ на созвоне с вашей командой.

1 деньдокумент и созвон

Диагностика обмена3–5 дней

Фиксированная стоимость — считаем после короткого созвона, когда понятен состав систем. На выходе карта потоков, список мест потери данных и оценка работ. Отчёт остаётся у вас в любом случае — даже если чинить возьмётся другой подрядчик.

Саму интеграцию оцениваем после диагностики. Фиксированного прайса на такие работы нет: цена зависит от количества систем, объёма данных и предсказуемости чужих API.

Информация на сайте не является публичной офертой. Сроки и стоимость фиксируются в договоре после уточнения состава систем и объёма данных. Гарантия — 2 недели на исправление ошибок, связанных с реализацией по техническому заданию.

Результат

Что остаётся у вас после работ

Интеграцию должно быть видно и понятно без нас — иначе через год это снова чёрный ящик, который «падает раз в неделю».

Схема потоков данных

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

контекстная схема + таблица потоков

Журнал обмена

Таблица сообщений с фильтрами по системе, типу, статусу и периоду: тело запроса, ответ стороны, число попыток. Доступ у поддержки, а не только у разработчика.

поиск по внешнему id и по интервалу

Дашборд состояния

Возраст очередей, доля ошибок и время последнего успешного обмена по каждому потоку. Ответ на вопрос «обмен живой?» занимает один взгляд, а не переписку с подрядчиком.

метрики и алерты по порогам

Документация и контракты

Описание форматов, коды ошибок, правила повторов и инструкция на случай, когда поток встал. Код и миграции — в вашем репозитории с первого дня работ.

контракты · инструкция · миграции

FAQ

Вопросы про обмен данными

Не нашли ответ — напишите, разберём на вашем наборе систем.

Сколько стоит интеграция?

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

У нас 1С. Нужен ли свой программист 1С?

Со стороны 1С нужен человек, который отвечает за конфигурацию: мы не переписываем чужие доработки в чужой базе. Мы проектируем контракт обмена, поднимаем сервис-посредник, забираем и отдаём данные через HTTP-сервисы или файловый обмен и отвечаем за доставку. Если специалиста по 1С нет, объём его работ описываем в задании — так его проще нанять точечно.

А если у стороннего сервиса нет вебхуков или жёсткие лимиты API?

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

Как выглядит миграция данных между системами?

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

Что происходит, когда одна из систем недоступна?

Ничего не теряется. Событие уже записано в базу-источник в одной транзакции с данными, а отправка идёт отдельным процессом с повторами и растущими паузами. Пока приёмник лежит, сообщения копятся; когда поднимается — разбираются по порядку. В журнале обмена видно каждую попытку, а на застрявшую очередь приходит алерт.

Кому принадлежит код и что с гарантией?

Код интеграции ваш: репозиторий заводится на вашей стороне, исключительные права передаются по договору. Гарантия — 2 недели на исправление ошибок, связанных с реализацией по техническому заданию. Схемы потоков и описание контрактов отдаём вместе с кодом, чтобы обмен мог поддерживать любой ваш разработчик.

Контакты

Расскажите, что и с чем нужно связать

Полезно сразу указать: какие системы участвуют, что передаётся сейчас, где и как часто рвётся. Ответим по существу — с планом диагностики и оценкой. maincode — инженерная студия ИП Диденко М. С.