Перейти к основному содержимому

Платформа интеграций

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

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

Манифест

Каждая интеграция описывается манифестом — это её паспорт и одновременно граница дозволенного.

ПолеЧто задаёт
aliasУникальный идентификатор в kebab-case
version, sdkVersionВерсия интеграции и требуемая версия SDK
name, descriptionЛокализованные название и описание для маркетплейса
categoryРаздел маркетплейса
developerКто разработал и с каким уровнем доверия
entryТочка входа
capabilitiesЧто интеграции разрешено делать
scopesК каким доменным данным она обращается
workerНужен ли фоновый исполнитель
billingПлатная ли она

Манифест проверяется дважды: в CI при сборке монорепозитория и на сервере при установке. Интеграция с невалидным манифестом не поедет дальше.

Возможности

Возможность (capability) — это разрешённая операция. Список закрытый: всё, чего в нём нет, недоступно.

ВозможностьЧто даёт
module.slot.renderВставить свой UI в слот существующего модуля
module.addons.menuДобавить пункт в меню дополнений раздела
ui.pageСвои страницы в /integrations/<alias>/*
ui.modalРегистрировать и открывать модалки
storage.read / storage.writeСобственное key-value хранилище
api.callВызывать доменное API ядра в пределах scopes
api.proxy.requestХодить на внешние хосты через прокси-шлюз
socket.connectСвои realtime-каналы
reports.form.registerСвои формы и показатели в отчётах
payments.method.registerСвой способ оплаты на кассе
backend.connectorСерверный коннектор: синхронизация, проверка, вебхуки
events.subscribe / events.emitПодписка на доменные события и собственные события

Области доступа

Возможность api.call сама по себе ничего не открывает — нужно ещё объявить область (scope): что именно интеграция читает и меняет.

Области заданы попарно чтение/запись по доменам: каталог, заказы, клиенты, продажи (только чтение), склад, сделки, планирование, отчёты (только чтение). Интеграция, объявившая catalog.read, не сможет записать в каталог, даже если очень захочет: проверка идёт на стороне ядра.

Где выполняется код

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

Сама работа идёт либо в воркере — изолированном фоновом исполнителе, либо на сервере — в коннекторе. Воркер не имеет прямого доступа ни к сети, ни к данным: он ходит через host-протокол, а тот сверяется с манифестом.

Внешние запросы

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

Установка

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

Типы разработчиков

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

Что дальше

Как написать свою интеграцию — в разделе SDK интеграций.