Пример манифеста приложения
В качестве примера возьмем приложение «Проверка контрагентов» — оно обогащает карточки контрагентов CRM данными о надежности из внешнего сервиса: показывает индикатор риска в карточке, добавляет вкладку с подробным отчетом, отдельный отчет по всем контрагентам и перепроверяет контрагента при его создании.
Манифест приложения:
{
"schemaVersion": "alpha", // Версия формата манифеста (управляется системой)
"scopes": [ // Доступы: к каким областям API нужен доступ
{ "code": "crm", "permission": "read" } // Чтение данных CRM (контрагенты)
],
"placements": [ // Места встройки в интерфейсе
{
"code": "navigation.mainmenu.item", // Пункт в главном меню — раздел приложения
"content": {
"id": "main_menu", // Идентификатор места встройки в рамках приложения
"title": "Проверка контрагентов", // Подпись пункта меню
"icon": { "src": "https://app.example.com/static/icon.svg" }, // Иконка пункта
"iframe": { "src": "https://app.example.com/" } // Что открывается в разделе
},
"action": { "code": "do.nothing" } // По клику — открыть сам раздел
},
{
"code": "entity.detail.widget", // Виджет в карточке сущности
"props": {
"target": { "module": "crm", "model": "account" } // Карточка какой сущности — контрагент CRM
},
"content": {
"id": "reliability_badge",
"title": "Надёжность", // Заголовок виджета-индикатора
"height": 160, // Высота в % от ширины области (10–400)
"iframe": { "src": "https://app.example.com/widget/reliability" } // Индикатор риска
},
"action": { "code": "do.nothing" }
},
{
"code": "entity.detail.tab", // Вкладка в карточке сущности
"props": {
"target": { "module": "crm", "model": "account" } // Вкладка в карточке контрагента
},
"content": { "title": "Проверка" }, // Название вкладки
"action": { // По клику — показать содержимое во вкладке
"code": "show.tab--iframe",
"content": { "iframe": { "src": "https://app.example.com/tab/report" } } // Подробный отчёт
}
},
{
"code": "report", // Отдельный отчёт в разделе «Отчёты»
"props": {
"target": { "group": "crm" } // Группа отчётов, куда встроиться (CRM)
},
"content": {
"id": "risk_report",
"title": "Риски по контрагентам", // Название отчёта
"icon": { "src": "https://app.example.com/static/report.svg" }
},
"action": {
"code": "show.tab--iframe",
"content": { "iframe": { "src": "https://app.example.com/report/risks" } }
}
}
],
"settings": [ // Настройки приложения (общие для аккаунта)
{
"title": "Основные настройки", // Название группы настроек
"options": [
{
"id": "api_key", // Идентификатор параметра
"code": "input.text", // Тип поля — текстовое
"title": "API-ключ сервиса проверки",
"attrs": { "required": true, "placeholder": "Введите ключ" } // Атрибуты поля
},
{
"id": "check_level",
"code": "select", // Тип поля — выпадающий список
"title": "Уровень проверки",
"props": {
"variants": [ // Варианты выбора (минимум 1)
{ "title": "Базовая", "attrs": { "value": "basic", "selected": true } }, // Выбран по умолчанию
{ "title": "Расширенная", "attrs": { "value": "extended" } }
]
},
"attrs": { "required": true } // Обязательное поле
}
]
}
],
"user_settings": [ // Персональные настройки каждого пользователя
{
"title": "Персональные настройки",
"options": [
{
"id": "show_financials",
"code": "input.checkbox", // Тип поля — чекбокс
"title": "Показывать финансовые показатели в виджете надёжности",
"attrs": { "checked": true } // Значение по умолчанию — включено
}
]
}
],
"webhooks": [ // Исходящие вебхуки: на какие события подписано приложение
{
"event": {
"target": { "module": "crm", "model": "account" }, // Сущность, изменения которой отслеживаем
"action": "create" // Тип события: create | update | delete | any
},
"url": "https://app.example.com/webhooks/account-created", // Куда платформа отправит данные (перепроверить контрагента)
"user_id": "" // Пользователь для авторизации вебхука (можно пусто)
}
]
}