3

WebTech

Личный кабинет

Проекты, коммерческие предложения, документы и отчёты — в одном месте.

Войти Зарегистрироваться Забыли пароль?
Разработка API-интеграций

Разработка API-интеграций для бизнеса

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

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

Работаем с REST и GraphQL, вебхуками, SOAP/XML и файловым обменом. Связываем CRM, 1С и ERP, платежи, маркетплейсы, логистику, телефонию и аналитику. Если документации по API нет — восстановим контракт по факту и зафиксируем письменно.

Разбор задачи — бесплатно. Скажем, что реально сделать, и назовём срок.

Разбор вашей интеграции

Назовите системы, которые нужно связать, — зададим вопросы и вернёмся со схемой обмена и сроком.

Разбор задачи и оценка — без обязательств. NDA по запросу.

  • Схема обмена и оценка — до начала разработки
  • Фиксированная смета и срок в договоре
  • NDA до обсуждения деталей
  • Исходный код и документация — ваши
Знакомая картина

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

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

Коннектора нет — значит «нельзя»

Задача откладывается, а данные продолжают переносить руками: выгрузка, правка, загрузка. Через месяц такая «интеграция» становится ежедневным ритуалом целого отдела.

Обмен держится на одном человеке

Скрипт написан давно и без документации. Никто не помнит, какие поля обязательны и что делать при ошибке. Изменение на стороне сервиса останавливает процесс, и разбираться некому.

Сбой связи съедает операцию

Запрос не прошёл — записи нет. Обнаруживается это через недели, когда расхождение уже накопилось и непонятно, какие именно операции потерялись.

Повтор создаёт дубли

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

Провайдер блокирует запросы

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

Непонятно, работает ли обмен

Интерфейса у обмена нет, журнала тоже. Узнать, что данные не ходят, можно только по жалобе клиента или по отчёту, который «почему-то не сходится».

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

Виды работ

Какие API-интеграции мы делаем

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

Основной канал

REST и JSON API

Чтение и запись: заказы, платежи, номенклатура, статусы, контакты.

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

Сложные выборки

GraphQL

Один запрос вместо цепочки REST-вызовов там, где данные связаны.

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

Наследство и банки

SOAP, XML и закрытые протоколы

WSDL-сервисы, обмен с банками, ЭДО, 1С-веб-сервисы, выгрузки в XML.

Здесь чаще всего нужны ЭЦП, кодировки и строгие форматы. Пишем адаптер, который изолирует эту специфику от остальной системы.

События

Вебхуки и подписки

Обратный канал: сервис сам сообщает об изменении, не нужно опрашивать.

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

Когда API нет

Файловый обмен

CSV, XLSX, XML по SFTP или FTP — с расписанием и контролем результата.

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

Устойчивость

Очереди и брокеры

Redis, RabbitMQ, Kafka или таблица в базе — под объём и требования.

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

Доступ

Авторизация и безопасность

OAuth 2.0, API-ключи, JWT, mTLS, HMAC-подписи, ротация секретов.

Токены хранятся в секретах, права выдаются по минимуму, а не «полный доступ на всякий случай». Секреты не попадают в код и в логи.

Обратная задача

Публичное API для партнёров

Открываем вашу систему наружу: ключи, квоты, версии, песочница, документация.

OpenAPI-спецификация, лимиты по клиентам, журнал обращений и понятные ошибки — вместо «дадим доступ и разберёмся».

Архитектура

Интеграционный слой и шлюз

Единый внутренний интерфейс к нескольким внешним сервисам через адаптеры.

Замена провайдера превращается в правку одного адаптера, а не в переписывание системы. Особенно важно, если сервисов больше двух.

Версии

Миграция и версионирование

Переход на новую версию API без остановки обмена и без потери данных.

Старая и новая версии работают параллельно, пока данные обеих сторон не сойдутся. Отключение старой — отдельным шагом, а не «в пятницу вечером».

Как это устроено

Из чего состоит обмен

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

Ваши системы

Сайт, CRM, 1С, склад, учёт

Источник и получатель данных в вашем контуре.

Адаптеры

Слой интеграции

Сопоставление полей, справочников и правил обмена.

Очередь

Операции

Повторы, порядок, разбор неудачных задач.

Снаружи

API сервисов

REST, GraphQL, вебхуки, файлы, лимиты.

Данные ходят в обе стороны, но источник правды для каждой сущности один — он записан в контракте.

Пользователь не ждёт внешний сервис: операция уходит в очередь, интерфейс отвечает сразу.

Каждый шаг попадает в журнал: видно, что ушло, что вернулось и что не прошло.

Элементы обмена, направление данных и риск при ошибке
Элемент обмена Направление Что поставлено на карту
Контракт обмена Проектирование → обе стороны Без него расходятся уже через месяц: меняется поле, а договорённость была «на словах».
Запросы к API сервиса Наши системы → сервис Ошибка в обязательных полях или формате даты — сервис принимает запись частично, и это выясняется не сразу.
События сервиса Сервис → наши системы Долгий ответ приёмника сервис считает неудачей и повторяет доставку: без защиты от повторов появляются дубли.
Очередь операций Приложение → очередь → воркеры Если операции выполняются «в момент запроса», недоступность сервиса останавливает работу пользователя в интерфейсе.
Ключ идемпотентности Сквозной признак операции Сеть и очереди не дают доставку «ровно один раз». Без ключа повтор превращается во вторую сделку и второе списание.
Журнал и метрики Обмен → мониторинг Без журнала остановку обмена находят по жалобе клиента, а не по оповещению.
Сверка расхождений Отчёт → бухгалтерия и руководство Отчётность, собранная из двух систем, не сходится — решения принимаются по неверным цифрам.
Главный артефакт

Контракт обмена: документ, который дешевле кода

Контракт — это описание того, как системы договариваются, на человеческом языке. По нему можно проверить обмен, не читая код, и объяснить задачу новому разработчику. Он согласуется с обеими сторонами и меняется только явно — поэтому спора «мы думали, что поле обязательное» на приёмке не возникает.

Сущности и идентификаторы

Что именно обменивается и по какому признаку одна сторона узнаёт запись. Без этого повторная передача создаёт дубль, а не обновление.

Направление и частота

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

Обязательные поля и форматы

Типы, форматы дат и сумм, НДС, единицы измерения, кодировки. Это то, из-за чего обмен чаще всего падает в первый месяц.

Коды ответов и частичный успех

Что считается успехом, что поводом повторить, а что постоянной ошибкой, которую повторять бессмысленно. Отдельно — разбор ответа по элементам пакета.

Идемпотентность

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

Лимиты и размер пакета

Сколько запросов нужно на полный обмен, сколько разрешено и что делать при отказе по частоте. Считается заранее, а не выясняется блокировкой.

Поведение при сбое

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

Первичная загрузка

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

Передача заказа внешнему сервису
POST /api/v2/orders HTTP/1.1
Host: api.provider.example
Authorization: Bearer <access-token>
Idempotency-Key: order-10428-r3
Content-Type: application/json

{
  "number": "10428",
  "total": 184900,
  "currency": "RUB",
  "updated_at": "2026-02-11T09:14:03Z"
}
Ответ сервиса и наш разбор
HTTP/1.1 202 Accepted
X-RateLimit-Remaining: 0
Retry-After: 30

{"status": "queued", "operation_id": "op_8f31"}

# Разбор: принято к обработке, но квота исчерпана.
# Обмен не повторяет запрос сразу — пауза 30 секунд по Retry-After,
# затем продолжение с той же операции. Повтор с тем же
# Idempotency-Key не создаст второй заказ.
Приём события: подпись и защита от повторов
POST /webhooks/provider HTTP/1.1
X-Signature: t=1739260443,v1=5f2c9a...   # HMAC-SHA256(secret, t + body)
X-Event-Id: evt_91c7

# 1. Подпись проверяется до любой обработки.
# 2. Отвечаем 2xx сразу, обработка уходит в очередь:
#    провайдер считает доставку неуспешной по таймауту.
# 3. X-Event-Id пишется в журнал: повторная доставка
#    того же события не создаёт вторую запись.

Это не украшение страницы, а рабочая часть контракта: ключ идемпотентности, разбор 429 с Retry-After, проверка подписи вебхука до обработки и журнал событий. Именно эти детали отличают обмен, который работает годами, от скрипта, который «вроде работал, пока не поменяли API».

Надёжность

Что происходит, когда что-то падает

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

Ситуации сбоя, механизм обработки и то, что видно бизнесу
Что случилось Что делает обмен Что видно вам
Сервис недоступен или отвечает ошибкой Операция встаёт в очередь и повторяется с растущей паузой, число попыток ограничено В журнале видны время каждой попытки и результат; при исчерпании попыток приходит оповещение
Одно и то же событие доставлено дважды Ключ идемпотентности: повтор распознаётся, второй записи не создаётся В CRM и в учёте одна сделка и один платёж — а не два
Пакет принят частично Ответ разбирается по элементам: принятые фиксируются, отклонённые получают причину Список отклонённых записей с причиной; повтор только по ним, а не по всему пакету
Провайдер вернул отказ по частоте запросов Пауза до указанного сервисом времени, разнос тяжёлых выгрузок, пакетные методы, кэш справочников Обмен продолжается и не приводит к блокировке аккаунта у провайдера
Приложение или воркер перезапустили Задачи лежат в очереди, а не в памяти процесса; незавершённые возвращаются в работу Ни одна операция не теряется при деплое, обновлении или аварии
Операция «зависла» навсегда Неудачные задачи уходят в отдельный список вместе с телом запроса и текстом ошибки Разбор и повтор вручную из журнала — без восстановления базы из резервной копии
Внешний сервис обновил API Обмен идёт через адаптер, контрактные проверки падают раньше, чем это заметит бизнес Правится адаптер; остальная система и учёт не затрагиваются
Обмен остановился молча Мониторинг по времени последней успешной операции и по объёму перенесённых записей Оповещение приходит до того, как расхождение увидит бухгалтерия или клиент
Данные разошлись между системами Регулярная сверка объёмов и контрольных сумм по ключевым сущностям Отчёт о расхождениях с конкретными записями, а не «цифры почему-то разные»

Таблица прокручивается по горизонтали.

Порядок работы

Как проходит работа

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

  1. 01

    Разбор задачи

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

    На выходе: Схема обмена и оценка объёма работ

  2. 02

    Контракт обмена

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

    На выходе: Контракт обмена, смета и срок в договоре

  3. 03

    Доступы и песочница

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

    На выходе: Настроенные доступы и план проверок

  4. 04

    Прототип на реальных данных

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

    На выходе: Отчёт о сверке прототипа

  5. 05

    Промышленный обмен

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

    На выходе: Работающий обмен и журнал операций

  6. 06

    Приёмка на сбоях

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

    На выходе: Протокол приёмки по чек-листу

  7. 07

    Передача и сопровождение

    Отдаём документацию, спецификацию, тесты и доступы. Дальше — либо ваша команда ведёт обмен самостоятельно, либо мы сопровождаем и обновляем адаптеры.

    На выходе: Документация и исходный код

  8. Дальше — как удобно вам

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

    Обсудить задачу
Результат

Что вы получаете, кроме работающего обмена

Интеграция — это не только код, который синхронизирует данные. Если к обмену нельзя прикоснуться, посмотреть и передать другому разработчику, он остаётся риском, даже когда работает.

Работающий обмен

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

Контракт обмена

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

Спецификация

Описание интерфейсов в машинно-читаемом виде: OpenAPI для запросов, AsyncAPI для событий и очередей.

Журнал операций

Что ушло, что вернулось, что не прошло и почему. Неудачную операцию можно повторить вручную.

Мониторинг и алерты

Контроль времени последней успешной операции и объёмов переноса; оповещение, когда обмен встал.

Проверки сценариев сбоя

Тесты на недоступность сервиса, повторную доставку, частичный ответ и превышение лимита.

Документация для поддержки

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

Исходный код и доступы

Всё остаётся у вас: адаптеры, тесты, инфраструктурные настройки. Система работает и без нашего участия.

PHP 8.4 Laravel 12 MySQL PostgreSQL Redis RabbitMQ Docker Nginx REST GraphQL SOAP / XML Webhooks OAuth 2.0 JWT HMAC OpenAPI AsyncAPI SFTP CSV / XLSX Git PHP 8.4 Laravel 12 MySQL PostgreSQL Redis RabbitMQ Docker Nginx REST GraphQL SOAP / XML Webhooks OAuth 2.0 JWT HMAC OpenAPI AsyncAPI SFTP CSV / XLSX Git
Форматы работы

Четыре способа начать

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

Разовая интеграция

Нужна одна конкретная связка: сайт и 1С, CRM и телефония, оплата и учёт.

  • Контракт обмена и адаптер под конкретный сервис
  • Очередь, повторы и защита от дублей
  • Журнал операций и оповещение о простое
  • Документация и передача вашей команде

Ориентир по срокам называем после разбора: он зависит от того, документирован ли API и есть ли тестовый контур.

Чаще всего берут

Интеграционный контур

Систем больше двух, обмены влияют друг на друга и нужна общая наблюдаемость.

  • Единый слой обмена и адаптеры вместо связок «каждый с каждым»
  • Общая очередь, приоритеты и разбор застрявших операций
  • Сверка расхождений по ключевым сущностям
  • Дашборд обмена: объёмы, ошибки, задержки

Замена одного внешнего сервиса перестаёт быть проектом: меняется адаптер, остальное не трогаем.

Аудит существующего обмена

Обмен уже есть, но ломается, дублирует записи или непонятен никому, кроме автора.

  • Разбор текущей схемы и найденных расхождений
  • Список рисков: где теряются данные и откуда берутся дубли
  • План: что починить сразу, что можно оставить
  • Оценка стоимости и срока по каждому пункту

Если обмен проще переписать, чем ремонтировать, скажем прямо — и покажем, почему.

Публичное API для партнёров

Нужно открыть вашу систему наружу: для партнёров, франшиз, маркетплейсов или своих приложений.

  • Проектирование интерфейса и версионирование
  • Ключи, квоты и лимиты по клиентам
  • Песочница и документация для внешних разработчиков
  • Журнал обращений и понятные ошибки

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

Стоимость и сроки

От чего зависят цена и срок

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

  • Есть ли документация API и тестовый контур, или контракт придётся восстанавливать по факту
  • Сколько систем участвует: каждая связка — это свой контракт и свой набор сценариев сбоя
  • Направление обмена: односторонняя выгрузка проще двусторонней синхронизации с конфликтами
  • Объём и частота: десятки записей в день или десятки тысяч с пакетной обработкой
  • Требования к надёжности: журнал и оповещения обязательны, отказоустойчивый контур — дороже
  • Перенос накопленных данных: объём истории и качество справочников
  • Специфика сервиса: ЭЦП, закрытые протоколы, банковские шлюзы, ЭДО, нестандартные форматы
  • Сопоставление справочников: насколько чисто ведутся номенклатура, контрагенты и статусы
  • Требования к нагрузке и допустимому времени простоя обмена
  • Доступы: есть ли у нас серверы, админки и возможность видеть журналы сервиса

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

Как мы работаем

Шесть правил, которые не обсуждаются

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

Сначала контракт, потом код

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

Сбой — часть проектирования

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

Обмен видно снаружи

Журнал, метрики и оповещения входят в работу. Если про обмен нельзя ответить «что и когда не прошло», он не сдан.

Никаких чёрных ящиков

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

Ваш учёт остаётся вашим

Мы не заставляем бухгалтерию менять программу и переучиваться. Обычно выгоднее связать существующие системы, чем переносить учёт.

Честная оценка

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

Честное сравнение

Четыре способа получить интеграцию

У каждого варианта есть своя ситуация, в которой он разумен: штатный разработчик знает систему лучше нас, а no-code-коннектор иногда решает задачу за вечер. Таблицу мы составили так, чтобы это было видно, — иначе она была бы бесполезной.

Сравнение способов сделать интеграцию: своими силами, готовый коннектор, фрилансер, команда с договором
Критерий Своими силами Готовый коннектор / no-code Фрилансер Команда по договору
Кому подходит Интеграций мало, есть свободный разработчик и время Типовой сценарий, небольшие объёмы, нужен быстрый результат Бюджет ограничен, задача понятна и не критична к сбоям Обмен влияет на деньги, учёт и сроки, а сбой стоит дороже разработки
Что с ошибками и повторами Обычно делают минимум: очереди и повторы откладывают «на потом» Ограничены возможностями платформы: частичный успех и сложные повторы не настроить Как договорились: сценарии сбоя редко входят в объём работ Очередь, повторы, идемпотентность и dead-letter входят в объём по умолчанию
Документация и передача Пишут, если остаётся время между задачами по продукту Остаётся на стороне платформы, кастомную логику не описать Часто отсутствует: обмен существует в виде кода без описания Контракт обмена, спецификация, тесты и инструкция передаются вам
Что при изменении API сервиса Правит тот, кто свободен, в порядке общей очереди задач Ждём обновления платформы; свои поля и методы поддержать нельзя Зависит от доступности автора; иногда его уже нет Контрактные проверки падают раньше клиента, правится адаптер в рамках сопровождения
Кто отвечает за сбой Ваша команда, вместе с продуктом и остальными задачами Платформа отвечает за свой сервис, не за ваш обмен Ответственность ограничена договорённостью, часто устной Договор, фиксированная смета, приёмка по чек-листу и гарантийный период
Чем платите Временем разработчика, которое уходит с продукта Подпиской, которая растёт с объёмом операций Меньше на старте, но без гарантий и наблюдаемости Стоимостью работ, зафиксированной в договоре после контракта обмена

Таблица прокручивается по горизонтали.

Договор и фиксированная смета

Смета и срок фиксируются после контракта обмена и не растут по ходу работ без вашего согласия.

NDA до деталей

Подписываем соглашение о конфиденциальности до того, как вы покажете схемы, доступы и данные.

Приёмка на сбоях

Сдаём не «на успешном сценарии»: сервис отключается, событие дублируется, лимит превышается — намеренно.

Гарантийный период

Период и условия гарантии на обмен фиксируются в договоре; ошибки, найденные в этот срок, исправляем без доплат.

Код и документация — ваши

Передаём исходный код, спецификации, тесты и доступы. Никаких закрытых модулей и «звоните только нам».

Работаем без привязки

Если ваша команда хочет вести обмен сама, помогаем с передачей: разбор кода, журналов и типовых ошибок.

Все категории интеграций

Обмен редко ограничивается одной категорией: магазин обычно связан и со складом, и с платежами, и с маркетплейсами.

Вопросы и ответы

Частые вопросы об API-интеграциях

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

Что делать, если у сервиса нет документации по API?

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

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

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

Как вы защищаетесь от дублей при повторной доставке?

Каждая операция имеет ключ идемпотентности, который приходит от источника или формируется из номера сущности и версии. Получив повторно тот же ключ, система не создаёт новую запись, а возвращает результат предыдущей операции. Это обязательное требование, а не опция: сеть и очереди устроены так, что доставка «ровно один раз» невозможна, возможна только обработка повторов.

Что делать с лимитами запросов на стороне сервиса?

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

Как понять, что обмен работает, если у него нет интерфейса?

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

Можно ли сделать интеграцию, если у сервиса вообще нет API?

Иногда да, но это худший вариант и мы говорим об этом прямо. Если у сервиса есть выгрузка файлов, обмен строится на файлах: CSV, XLSX или XML по расписанию, с проверкой целостности и разбором частично загруженных файлов. Автоматизация через веб-интерфейс рассматривается как крайняя мера: она ломается от любого изменения вёрстки и не даёт гарантий. Если ни файлов, ни API нет, честнее изменить процесс, чем строить хрупкий обмен.

Нужно ли менять учётную систему или CRM?

Как правило нет. Эффективнее связать существующие системы и убрать ручной перенос данных, чем менять программу, к которой привыкла бухгалтерия и на которой построена отчётность. Исключение — случаи, когда система не имеет ни API, ни выгрузок и не развивается: тогда имеет смысл обсудить замену отдельно, но это уже другая задача.

Сколько стоит API-интеграция и как формируется цена?

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

Сколько времени занимает разработка интеграции?

Срок определяется на этапе контракта обмена и зависит от документированности API, наличия тестового контура, числа связок и требований к надёжности. Типовая связка по документированному REST API — это недели, а не месяцы; недокументированный протокол, обмен документами с ЭЦП или перенос многолетней истории могут занять существенно дольше. Часть работ — прототип и приёмка на сбоях — мы не сокращаем, потому что именно на них находятся проблемы.

У нас уже есть интеграция, но она работает плохо. Что вы делаете?

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

Кто отвечает за сбой на стороне внешнего сервиса?

Мы не можем отвечать за доступность чужого API, но отвечаем за то, как наш обмен переживает эту недоступность: операции не теряются, повторяются и видны в журнале, а ответственные получают оповещение. Если сервис изменил контракт без предупреждения, мы правим адаптер; доработки, вызванные изменениями на стороне провайдера, обсуждаются отдельно и обычно входят в сопровождение.

Как обеспечивается безопасность и доступы?

Работаем по NDA, если это требуется до обсуждения деталей. Доступы выдаются по принципу минимально необходимых прав, в идеале — к тестовому контуру, а не к промышленному. Токены и секреты хранятся в защищённом виде, не попадают в код и в логи, предусмотрена ротация. Подписи входящих вебхуков проверяются до обработки, а в журнале не хранятся платёжные и персональные данные в открытом виде.

Кому принадлежит код и что будет, если мы решим уйти?

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

Мы работаем со своими разработчиками. Можно ли сделать только часть работ?

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

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

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

Телефон
+7 (495) 368-39-51
Что будет после заявки
Свяжемся в рабочее время, зададим вопросы по системам, данным и ограничениям сервиса. Затем пришлём схему обмена, срок и стоимость. Если потребуется — подпишем NDA до обсуждения деталей.
Если обмен уже есть
Посмотрим текущую схему и журналы, покажем, где теряются данные и откуда берутся дубли, и предложим план: что починить точечно, а что проще переписать.

Заявка на разбор интеграции

Опишите системы, направление обмена и ограничения сервиса — вернёмся со схемой обмена, сроком и стоимостью.

Не передаём данные третьим лицам и не звоним с рекламой. NDA по запросу.