Мастер настройки для REST-only приложений
Мастер настройки REST-only приложений — это встроенная форма Битрикс24 для приложений без интерфейса. При разработке достаточно описать поля в формате JSON. Мастер настройки сам сформирует пошаговую форму, соберет данные и отправит их в указанный обработчик.
Используйте мастер настройки:
- если у приложения нет своего интерфейса,
- нужны простые настройки: ввод текста в строку, выбор варианта из списка,
- нужен интерфейс в стиле Битрикс24, без отдельного UI,
- данных от callback-обработчика события установки недостаточно.
Принцип работы мастера
Укажите параметр URL_SETTINGS при регистрации приложения в кабинете разработчика. Если параметр заполнен, после установки приложения пользователь увидит слайдер с формой настройки.
Жизненный цикл формы
- Пользователь устанавливает приложение.
- Битрикс24 делает POST-запрос на
URL_SETTINGS. - Приложение возвращает JSON-конфигурацию формы.
- Битрикс24 показывает форму в слайдере.
- При
updateForm: trueБитрикс24 повторно запрашиваетURL_SETTINGS. - Пользователь нажимает «Сохранить», и данные уходят на
form.action. - Приложение возвращает
successили список ошибок. При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 |
Пояснительный текст |
|
help |
Флаг отображения значка справки |
|
fields* |
Массив полей, подробное описание |
Параметр fields
Обязательные параметры отмечены *
|
Название |
Описание |
|
id* |
Идентификатор поля |
|
name* |
Имя поля, ключ в данных |
|
type* |
Тип поля:
|
|
label |
Подпись над полем |
|
placeholder |
Подсказка внутри поля |
|
value |
Значение по умолчанию |
|
items |
Список вариантов для |
|
updateForm |
Флаг обновления формы при изменении поля |
Если параметр updateForm равен true, Битрикс24 повторно запросит URL_SETTINGS и передаст в запросе текущие значения полей.
Это позволяет обновлять форму в процессе ее заполнения пользователем. Например, можно добавить новое поле со списком регионов в зависимости от выбранного значения в поле страна.
Параметры сохранения
Блок form описывает, куда отправлять данные и какие кнопки показать.
"form": {
"id": "config-form",
"action": "https://example.ru/save-handler.php",
"clientId": "local.123...",
"redirect": "/crm/",
"saveCaption": "Сохранить",
"cancelCaption": "Отмена"
}
Обязательные параметры отмечены *
|
Название |
Описание |
|
id* |
Идентификатор формы |
|
action* |
URL обработчика сохранения |
|
clientId* |
Идентификатор приложения client_id |
|
redirect |
Путь после успешного сохранения |
|
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",
"label": "Ваша страна",
"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": "local.6537665f598492.98090704",
"redirect": "/",
"saveCaption": "Подключить",
"cancelCaption": "Позже"
}
}
Обработчик URL_SETTINGS
Битрикс24 отправляет POST-запрос на URL_SETTINGS для получения конфигурации формы.
[
'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' => [
'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' => '***'
],
'saveform' => 'Y'
];
Пример чтения данных:
$data = $_POST['data'] ?? [];
$apiKey = $data['api-key'] ?? null;
$country = $data['country'] ?? null;
Успешный ответ
Успешный ответ сообщает Битрикс24, что данные сохранены. После этого слайдер закрывается. Если задан параметр form.redirect, будет выполнен переход по адресу в параметре.
header("HTTP/1.1 200 OK");
header("Content-Type: application/json");
echo json_encode(['status' => 'success']);
Ответ с ошибками
Если данные некорректны, верните HTTP 400 и список ошибок. Поле field должно совпадать со значением name в конфигурации.
header("HTTP/1.1 400 Bad Request");
header("Content-Type: application/json");
echo json_encode([
'status' => 'error',
'errors' => [
['field' => 'api-key', 'message' => 'Неверный формат API-ключа'],
['field' => 'country', 'message' => 'Страна обязательна']
]
]);
Битрикс24 показывает ошибки под соответствующими полями. Можно вернуть несколько ошибок для одного поля.
Пример обработчика для возврата статуса
<?php
$data = $_POST['data'] ?? [];
if (($data['api-key'] ?? null) === 'error')
{
header("HTTP/1.1 400 Bad Request");
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();
}
file_put_contents('./settings.json', json_encode($_POST));
header("HTTP/1.1 200 OK");
header("Content-Type: application/json");
echo json_encode(['status' => 'success']);
exit();
?>
Устаревший способ показа формы
Метод appform.show — альтернативный способ открытия формы через push-событие showForm.
Особенности:
- требуется активная сессия пользователя в Битрикс24, иначе событие теряется,
- нужен
access_tokenдля вызова от имени пользователя.
Пример вызова appform.show через PHP SDK
use Bitrix24\SDK\Core\Credentials\ApplicationProfile;
use Bitrix24\SDK\Services\ServiceBuilderFactory;
use Psr\Log\NullLogger;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\HttpFoundation\Request;
require_once __DIR__ . '/vendor/autoload.php';
$appProfile = ApplicationProfile::initFromArray([
'BITRIX24_PHP_SDK_APPLICATION_CLIENT_ID' => 'local.6537665f598492.98090704',
'BITRIX24_PHP_SDK_APPLICATION_CLIENT_SECRET' => 'client_secret',
'BITRIX24_PHP_SDK_APPLICATION_SCOPE' => 'crm,appform,placement',
]);
// Предполагается, что запрос пришел от Битрикс24 (placement)
$serviceBuilder = ServiceBuilderFactory::createServiceBuilderFromPlacementRequest(
Request::createFromGlobals(),
$appProfile,
new EventDispatcher(),
new NullLogger()
);
$config = [
'title' => 'Push-инициированная форма',
'version' => '1',
'steps' => [
[
'id' => 'step1',
'title' => 'API-ключ',
'fields' => [
['id' => 'key', 'name' => 'key', 'type' => 'input']
]
]
],
'form' => [
'id' => 'config-form',
'action' => 'https://example.ru/save.php',
'clientId' => 'local.6537665f598492.98090704',
'redirect' => '/'
]
];
try {
$serviceBuilder->core->call('appform.show', [
'config' => json_encode($config, JSON_THROW_ON_ERROR)
]);
} catch (\Throwable $e) {
// обработка ошибки
}
Основной способ — автоматический запрос к URL_SETTINGS после установки приложения. Метод appform.show устарел.