Мастер настройки для REST-only приложений
Выберите инструмент для разработки с AI-агентом:
- используйте Битрикс24 Вайбкод, чтобы создать приложение для Битрикс24 по описанию задачи без знания языков программирования. Агент напишет код и разместит приложение на сервере без ручной настройки хостинга
- используйте MCP-сервер, чтобы разрабатывать интеграцию через REST API в своем проекте. Агент будет обращаться к официальной REST-документации
Мастер настройки REST-only приложений — это встроенная форма Битрикс24 для тиражных приложений без интерфейса. При разработке достаточно описать поля в формате JSON. Битрикс24 сам сформирует пошаговую форму, соберет данные и отправит их в указанный обработчик. Другие варианты установки тиражного приложения сравниваются в обзоре Обзор установки тиражных приложений.
Мастер настройки подходит, если:
- у приложения нет своего интерфейса
- нужны простые настройки: ввод текста в строку, выбор варианта из списка
- форма настроек должна выглядеть как интерфейс Битрикс24
- данных от callback-обработчика события установки недостаточно
Принцип работы мастера
Битрикс24 запрашивает форму настройки у приложения по адресу из параметра URL_SETTINGS. Укажите этот адрес в поле Настройки приложения при регистрации приложения в кабинете разработчика, в разделе REST-only. Тогда после установки приложения пользователь увидит слайдер с формой настройки.
Если URL_SETTINGS не заполнен, Битрикс24 не запросит конфигурацию и форма настройки не откроется.
Жизненный цикл формы
- Пользователь устанавливает приложение
- Битрикс24 делает POST-запрос на
URL_SETTINGSс параметромevent: OnAppSettingsInstall - Приложение возвращает JSON-конфигурацию формы
- Битрикс24 показывает форму в слайдере — панели, которая открывается поверх страницы Битрикс24
- Если пользователь выбирает вариант в поле
dropdown-listсupdateForm: true, Битрикс24 повторно запрашиваетURL_SETTINGSс параметромevent: OnAppSettingsChange - Пользователь нажимает Сохранить, и данные уходят на
form.action - Приложение возвращает
successили список ошибок. После успешного сохранения Битрикс24 закрывает слайдер, а если заданform.redirect— вместо этого переходит по этому адресу

Структура JSON-конфигурации
Конфигурация состоит из трех блоков:
- заголовок
- шаги с полями
- параметры сохранения
Заголовок
Заголовок задает название страницы настроек и версию конструктора.
{
"title": "Название мастера",
"version": "1"
}
Обязательные параметры отмечены *
|
Название |
Описание |
|
title* |
Заголовок в интерфейсе |
|
version |
Версия конструктора, |
Шаги
steps — массив шагов. Каждый шаг — отдельный блок формы со своим заголовком и полями.
{
"id": "step1",
"title": "API-ключ",
"description": "Введите ключ доступа",
"fields": [
{
"id": "api-key",
"name": "api-key",
"type": "input",
"label": "API-ключ",
"placeholder": "Введите API-ключ"
}
]
}
Обязательные параметры отмечены *
|
Название |
Описание |
|
id* |
Уникальный идентификатор шага |
|
title |
Заголовок шага |
|
description |
Пояснительный текст |
|
fields |
Массив полей шага, подробное описание |
Параметр fields
Обязательные параметры отмечены *
|
Название |
Описание |
|
id |
Идентификатор поля. Если не задан, Битрикс24 сгенерирует его сам |
|
name* |
Имя поля, ключ в данных |
|
type* |
Тип поля:
|
|
label |
Подпись над полем. Работает только у поля |
|
placeholder |
Подсказка внутри поля. Работает только у поля |
|
value |
Значение по умолчанию |
|
items |
Варианты для |
|
updateForm |
Флаг обновления формы при выборе варианта. Работает только у поля |
Форму можно менять, пока пользователь ее заполняет. Например, после выбора страны показать поле со списком ее регионов. Для этого задайте полю dropdown-list параметр updateForm: true: после выбора варианта Битрикс24 повторно запросит URL_SETTINGS и передаст в запросе текущие значения полей.
На такой запрос верните конфигурацию формы целиком. Битрикс24 строит форму заново по ответу, поэтому перенесите значения из data в параметры value полей, иначе введенные данные сбросятся.
Параметры сохранения
Блок form описывает, куда отправлять данные и какие кнопки показать.
{
"form": {
"id": "config-form",
"action": "https://example.ru/save-handler.php",
"clientId": "app.123...",
"redirect": "/crm/",
"saveCaption": "Сохранить",
"cancelCaption": "Отмена"
}
}
Обязательные параметры отмечены *
|
Название |
Описание |
|
id |
Идентификатор формы |
|
action* |
URL обработчика сохранения |
|
clientId* |
Идентификатор приложения client_id |
|
redirect |
Путь внутри Битрикс24, куда перейти после успешного сохранения, например |
|
saveCaption |
Подпись кнопки «Сохранить» |
|
cancelCaption |
Подпись кнопки «Отмена» |
Пример конфигурации
{
"title": "Storecove e-invoice connector",
"version": "1",
"steps": [
{
"id": "step1",
"title": "API-ключ",
"description": "Укажите ключ из личного кабинета Storecove",
"fields": [
{
"id": "api-key",
"name": "api-key",
"type": "input",
"label": "Storecove API-ключ",
"placeholder": "Введите API-ключ"
}
]
},
{
"id": "step2",
"title": "Страна",
"fields": [
{
"id": "country",
"name": "country",
"type": "dropdown-list",
"value": "RU",
"items": [
{ "value": "RU", "name": "Россия" },
{ "value": "DE", "name": "Германия" },
{ "value": "US", "name": "США" }
],
"updateForm": true
}
]
},
{
"id": "step3",
"title": "Реквизиты компании",
"fields": [
{
"id": "vat-id",
"name": "vat-id",
"type": "input",
"label": "VAT ID",
"placeholder": "Введите VAT ID"
}
]
}
],
"form": {
"id": "config-form",
"action": "https://example.ru/save.php",
"clientId": "app.6537665f598492.98090704",
"redirect": "/",
"saveCaption": "Подключить",
"cancelCaption": "Позже"
}
}
Обработчик URL_SETTINGS
Битрикс24 запрашивает конфигурацию формы POST-запросом на URL_SETTINGS, если у пользователя есть доступ к приложению. Данные приходят в формате application/x-www-form-urlencoded, в PHP они доступны в $_POST. Ниже структура запросов показана в JSON для наглядности. Параметр event показывает, зачем пришел запрос: OnAppSettingsInstall, OnAppSettingsDisplay или OnAppSettingsChange. Это не отдельные события, а сценарии запроса.
В ответ на запрос приложение должно вернуть JSON-конфигурацию формы. Если ответ корректный, Битрикс24 покажет форму в интерфейсе.
Сценарии вызова
В примерах объект auth сокращен.
OnAppSettingsInstall передается после установки приложения.
{
"event": "OnAppSettingsInstall",
"auth": {}
}
OnAppSettingsDisplay передается, когда пользователь вручную открывает настройки из карточки приложения. Чтобы пользователь увидел текущие значения, верните конфигурацию с сохраненными настройками в value полей.
{
"event": "OnAppSettingsDisplay",
"auth": {}
}
OnAppSettingsChange передается, когда пользователь изменяет значение поля с параметром updateForm: true. В запросе дополнительно передается объект data с текущими значениями полей.
{
"event": "OnAppSettingsChange",
"data": {
"api-key": "cc1107f4-...",
"country": "DE"
},
"auth": {}
}
Пример POST-запроса в PHP:
[
'event' => 'OnAppSettingsInstall', // или OnAppSettingsChange / OnAppSettingsDisplay
'data' => [ /* текущие значения полей */ ],
'auth' => [
'access_token' => '***',
'expires' => 1768385511,
'expires_in' => 3600,
'scope' => 'crm,bizproc,appform,user_brief,placement,catalog',
'domain' => 'some-domain.bitrix24.ru',
'server_endpoint' => 'https://oauth.bitrix24.tech/rest/',
'status' => 'F',
'client_endpoint' => 'https://some-domain.bitrix24.ru/rest/',
'member_id' => '***',
'refresh_token' => '***',
'user_id' => 431,
'client_id' => '***',
'application_token' => '***'
]
]
|
Название |
Описание |
|
event |
Сценарий запроса:
|
|
data |
Текущие значения полей формы. Передается для |
|
auth |
Данные авторизации |
Обработчик после сохранения
Когда пользователь нажимает Сохранить, Битрикс24 отправляет данные формы на адрес из поля form.action.
$_POST = [
'data' => [
'api-key' => 'cc1107f4-...',
'country' => 'DE',
// остальные поля по имени (name)
],
'auth' => [
// данные авторизации, как в запросе на URL_SETTINGS
]
];
Поля input, которые пользователь оставил пустыми, в data не передаются.
Пример чтения данных:
$data = $_POST['data'] ?? [];
$apiKey = $data['api-key'] ?? null;
$country = $data['country'] ?? null;
Успешный ответ
Битрикс24 считает данные сохраненными, если обработчик вернул корректный JSON с HTTP-статусом 200. Поле status Битрикс24 не проверяет. После успешного сохранения слайдер закрывается, а если задан параметр form.redirect — Битрикс24 вместо этого переходит по этому адресу.
http_response_code(200);
header("Content-Type: application/json");
echo json_encode(['status' => 'success']);
Ответ с ошибками
Если данные некорректны, верните HTTP-статус не 200, например 400, и массив errors. В каждой ошибке укажите в field значение name поля из конфигурации. Ошибку без field форма не покажет. Если массив errors пуст, Битрикс24 посчитает сохранение успешным даже при статусе не 200.
http_response_code(400);
header("Content-Type: application/json");
echo json_encode([
'status' => 'error',
'errors' => [
['field' => 'api-key', 'message' => 'Неверный формат API-ключа'],
['field' => 'country', 'message' => 'Страна обязательна']
]
]);
Битрикс24 показывает ошибки под соответствующими полями. Можно вернуть несколько ошибок для одного поля.
Пример обработчика для возврата статуса
Для примера нужны функция loadApplicationToken() вашего хранилища и каталог /var/app-data с правом записи для PHP.
Перед сохранением обработчик проверяет, что запрос пришел от Битрикс24: сравнивает auth.application_token с токеном, который приложение сохранило для этого member_id при установке. Форма открывается уже после установки, поэтому токен к этому моменту должен быть сохранен. Если его нет, запрос отклоните. Как получить и хранить токен, описано в статье Безопасность в обработчиках.
<?php
$data = $_POST['data'] ?? [];
$auth = $_POST['auth'] ?? [];
$memberId = (string)($auth['member_id'] ?? '');
// application_token, сохраненный при установке приложения для этого Битрикс24
$savedToken = loadApplicationToken($memberId); // функция вашего хранилища
if ($savedToken === '' || !hash_equals($savedToken, (string)($auth['application_token'] ?? '')))
{
http_response_code(403);
exit();
}
if (($data['api-key'] ?? null) === 'error')
{
http_response_code(400);
header("Content-Type: application/json");
echo json_encode([
'status' => 'error',
'errors' => [
[
'field' => 'api-key',
'message' => 'You input invalid value',
],
[
'field' => 'api-key',
'message' => 'You input invalid value 2',
],
],
]);
exit();
}
// храните настройки отдельно для каждого Битрикс24, вне публичного каталога сайта
if (file_put_contents('/var/app-data/settings-' . md5($memberId) . '.json', json_encode($data)) === false)
{
http_response_code(500);
header("Content-Type: application/json");
echo json_encode(['status' => 'error', 'errors' => [['field' => 'api-key', 'message' => 'Cannot save settings']]]);
exit();
}
http_response_code(200);
header("Content-Type: application/json");
echo json_encode(['status' => 'success']);
exit();
?>
Устаревший способ показа формы
Метод appform.show устарел. Он открывает форму через push-событие showForm. Основной способ — автоматический запрос к URL_SETTINGS после установки приложения.
Ограничения appform.show:
- нужна активная сессия пользователя в Битрикс24, иначе событие теряется
- нужен
access_tokenдля вызова от имени пользователя