Пункт в меню настроек сайта и страницы LANDING_SETTINGS
Выберите инструмент для разработки с AI-агентом:
- используйте Битрикс24 Вайбкод, чтобы создать приложение для Битрикс24 по описанию задачи без знания языков программирования. Агент напишет код и разместит приложение на сервере без ручной настройки хостинга
- используйте MCP-сервер, чтобы разрабатывать интеграцию через REST API в своем проекте. Агент будет обращаться к официальной REST-документации
Scope:
landing
Виджет LANDING_SETTINGS добавляет пункт приложения в меню настроек сайта или страницы в режиме редактирования.
Используйте его, когда приложение работает со всем сайтом или страницей целиком. Например:
- проверяет метатеги и заголовки страницы перед публикацией
- отправляет страницу на внешнюю модерацию или согласование
Если действие относится к отдельному блоку, используйте LANDING_BLOCK_ или LANDING_BLOCK_*.
Место встраивания регистрируют методом landing.repo.bind или placement.bind. Удаляйте его тем же способом, которым регистрировали: методом landing.repo.unbind или placement.unbind. Методы работают только в контексте приложения, через вебхук место встраивания не зарегистрировать.
Место встраивания не отображается в интерфейсе, пока установка приложения не завершена. Проверьте установку приложения
Куда встраивается виджет
Код места встраивания
Место
LANDING_SETTINGS
Пункт в меню настроек сайта или страницы
Где находится в интерфейсе
Откройте сайт или страницу в режиме редактирования. В правом верхнем углу перейдите в Возможности сайта > Настройки. Пункты приложений выводятся в конце левого меню слайдера, новые выше старых. Подпись пункта — значение TITLE из регистрации: если оно пустое, пункт выводится без подписи, название приложения не подставляется.
Настройки сайта и настройки страницы открываются в одном слайдере, поэтому пункт приложения один на оба раздела. Пункт видят все, кто открыл слайдер настроек, даже без права на изменение настроек.
В настройках Главной страницы, сайта с типом VIBE, пункты приложений не выводятся.
Что получает обработчик
Данные передаются POST-запросом: часть параметров — в query-строке адреса обработчика, остальные — в теле запроса
Array
(
[DOMAIN] => example.bitrix24.ru
[PROTOCOL] => 1
[LANG] => ru
[APP_SID] => 0123456789abcdef0123456789abcdef
[APPLICATION_SCOPE] => crm,placement,landing
[APPLICATION_TOKEN] => xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
[AUTH_ID] => 6061e72600631fcd00005a4b00000001f0f1076700000000f69dd5fc643d9ce2fdbc1
[AUTH_EXPIRES] => 3600
[REFRESH_ID] => 50e00aa340631fcd00005a4b00000001f0f1071111116580a5b83c2de639ef28c12
[SERVER_ENDPOINT] => https://oauth.bitrix24.tech/rest/
[member_id] => abcdef1234567890abcdef1234567890
[status] => F
[PLACEMENT] => LANDING_SETTINGS
[PLACEMENT_OPTIONS] => {"SITE_ID":"12","LID":"30"}
)
Обязательные параметры отмечены *
Параметры в query-строке адреса обработчика
Параметр
тип
Описание
DOMAIN*
string
Адрес Битрикс24, на котором был вызван обработчик виджета
PROTOCOL*
string
Защищенный или незащищенный протокол HTTP:
0 — HTTP
1 — HTTPS
LANG*
string
Язык интерфейса пользователя Битрикс24, который вызвал виджет. Вы можете локализовать язык интерфейса в своем виджете, ориентируясь на это значение
APP_SID*
string
Идентификатор сессии приложения. Битрикс24 создает его заново при каждой отрисовке виджета и использует, чтобы связать js-библиотеку с окружением приложения
Параметры в теле POST-запроса
Параметр
тип
Описание
AUTH_ID
string
Авторизационный токен OAuth 2, выписанный для пользователя, вызвавшего виджет. Можно использовать для вызовов REST API от лица этого пользователя
AUTH_EXPIRES
integer
Время в секундах, после которого авторизационный токен станет неактуальным
REFRESH_ID
string
Refresh-токен OAuth 2, выписанный для пользователя, вызвавшего виджет. Можно использовать для обновления авторизационного токена от лица этого пользователя
SERVER_ENDPOINT*
string
Адрес сервера авторизации Битрикс24, необходимый для обновления токенов OAuth 2
APPLICATION_TOKEN*
string
Токен приложения. То же значение приходит в параметре application_token при вызове обработчиков событий. По нему обработчик виджета может проверить, что запрос пришел от Битрикс24
APPLICATION_SCOPE*
string
Список скоупов, выданных приложению, через запятую. Показывает, какие методы REST API доступны с полученным авторизационным токеном
member_id*
string
Уникальный строковый идентификатор Битрикс24, на котором был вызван обработчик виджета
status
string
Тип приложения, зарегистрировавшего обработчик данного виджета. Принимает значения:
L — локальное приложение
F — бесплатное тиражное приложение
S — подписное тиражное приложение
PLACEMENT*
string
Код точки встраивания. Вы можете использовать один и тот же URL обработчика для всех своих виджетов. Значение, которое Битрикс24 будет сообщать в параметре PLACEMENT, поможет определить, из какой именно точки встраивания был вызван ваш обработчик в каждом конкретном случае
PLACEMENT_OPTIONS
string
Дополнительные данные в виде JSON-строки, определяющие контекст выполнения виджета. Например, это может быть массив, содержащий числовой идентификатор элемента CRM, в карточке которого был вызван обработчик виджета, и так далее. Параметр PLACEMENT_OPTIONS вместе с параметром PLACEMENT позволяет точно определить, для какой именно точки встраивания и какого объекта был вызван обработчик виджета
Битрикс24 добавляет в PLACEMENT_OPTIONS ключ URI — путь с query-строкой той страницы, с которой открыт виджет. Он приходит для любой точки встраивания, вместе с ее собственными ключами. Ключа не будет, если браузер не передал заголовок Referer или виджет открыт со страницы другого домена.
Как разобрать контекст вызова
PLACEMENT_OPTIONS приходит JSON-строкой, а не массивом: перед использованием разберите ее на стороне обработчика. Состав ключей у каждой точки свой и описан в разделе PLACEMENT_OPTIONS этой страницы.
$placement = $_POST['PLACEMENT'] ?? '';
$options = json_decode($_POST['PLACEMENT_OPTIONS'] ?? '{}', true);
options = json.loads(request.form.get("PLACEMENT_OPTIONS", "{}") or "{}")
В B24JsSDK разбирать строку не нужно: свойство $b24.placement.options возвращает готовый объект, а $b24.placement.placement — код точки встраивания.
Что должен вернуть обработчик
Обработчик отвечает обычной HTML-страницей — Битрикс24 показывает ее во фрейме на месте виджета. Страница должна разрешать встраивание: если сервер приложения отдает заголовки X-Frame-Options или Content-Security-Policy, запрещающие фрейм, на месте виджета останется пустая область. Как это исправить, описано в статье Сайт не разрешает подключение.
PLACEMENT_OPTIONS
Значение PLACEMENT_OPTIONS передается как JSON-строка с контекстом вызова.
Для LANDING_SETTINGS в контекст передаются ключи:
Ключ
тип
Описание
SITE_ID
string
Идентификатор сайта, в настройках которого открыт виджет
LID
string
Идентификатор страницы, из редактора которой открыты настройки. Если настройки открыты без привязки к странице, приходит 0
URI
string
Путь с query-строкой страницы, из которой открыт виджет. Если адрес страницы определить не удалось, ключ не передается
По идентификаторам из PLACEMENT_OPTIONS обработчик получает данные сайта и страницы:
- сайт — методом landing.site.getList с фильтром по
ID, его дополнительные поля — методом landing.site.getadditionalfields
- страницу — методом landing.landing.getList с фильтром по
ID, ее метатеги и другие дополнительные поля — методом landing.landing.getadditionalfields
Если настройки открыты у Базы знаний или сайта группы, передайте в эти методы параметр scope, иначе они не найдут сайт. Значения описаны в статье Работа с типами сайтов и скоупами.
Примеры кода
Как использовать примеры в документации
cURL (OAuth)
JS (TS)
JS (UMD)
Python
PHP
BX24.js
PHP CRest
Go
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"fields": {
"PLACEMENT": "LANDING_SETTINGS",
"PLACEMENT_HANDLER": "https://your-domain.com/widgets/landing-settings-handler.php",
"TITLE": "Мои настройки"
},
"auth": "**put_access_token_here**"
}' \
https://**put_your_bitrix24_address**/rest/landing.repo.bind
// This snippet is an ES module: top-level await requires type="module" or a bundler.
// $b24 is an already-initialized SDK instance (see the SDK "Get started" guide).
import { Text } from '@bitrix24/b24jssdk'
import type { B24Frame } from '@bitrix24/b24jssdk'
declare const $b24: B24Frame
try {
const response = await $b24.actions.v2.call.make<boolean>({
method: 'landing.repo.bind',
params: {
fields: {
PLACEMENT: 'LANDING_SETTINGS',
PLACEMENT_HANDLER: 'https://your-domain.com/widgets/landing-settings-handler.php',
TITLE: 'Мои настройки',
},
},
requestId: Text.getUuidRfc4122()
})
// The payload is available only on a successful response
if (!response.isSuccess) {
console.error(response.getErrorMessages().join('; '))
} else {
const result = response.getData()!.result
console.info('Landing settings bound:', result)
}
} catch (error) {
// Thrown on transport or SDK failures (AjaxError, SdkError, etc.)
console.error(error)
}
<!-- Load the SDK (UMD build); it is exposed as the global B24Js -->
<script src="https://unpkg.com/@bitrix24/b24jssdk@1/dist/umd/index.min.js"></script>
<script>
async function bindLandingSettings() {
try {
// Initialize the SDK inside a Bitrix24 frame
const $b24 = await B24Js.initializeB24Frame()
const response = await $b24.actions.v2.call.make({
method: 'landing.repo.bind',
params: {
fields: {
PLACEMENT: 'LANDING_SETTINGS',
PLACEMENT_HANDLER: 'https://your-domain.com/widgets/landing-settings-handler.php',
TITLE: 'Мои настройки',
},
},
requestId: B24Js.Text.getUuidRfc4122()
})
// The payload is available only on a successful response
if (!response.isSuccess) {
console.error(response.getErrorMessages().join('; '))
return
}
const result = response.getData().result
console.info('Landing settings bound:', result)
} catch (error) {
// Thrown on transport or SDK failures (AjaxError, SdkError, etc.)
console.error(error)
}
}
document.addEventListener('DOMContentLoaded', bindLandingSettings)
</script>
from b24pysdk.errors import BitrixAPIError, BitrixSDKException
fields = {
"PLACEMENT": "LANDING_SETTINGS",
"PLACEMENT_HANDLER": "https://your-domain.com/widgets/landing-settings-handler.php",
"TITLE": "Мои настройки",
}
try:
bitrix_response = client.landing.repo.bind(fields=fields).response
result = bitrix_response.result
print(result)
except BitrixAPIError as error:
print(
"Ошибка Bitrix API",
f"error: {error.error}",
f"error_description: {error.error_description}",
sep="\n",
)
except BitrixSDKException as error:
print(f"Ошибка Bitrix SDK: {error.message}")
except Exception as error:
print(f"Непредвиденная ошибка: {error}")
try {
$response = $b24Service
->core
->call(
'landing.repo.bind',
[
'fields' => [
'PLACEMENT' => 'LANDING_SETTINGS',
'PLACEMENT_HANDLER' => 'https://your-domain.com/widgets/landing-settings-handler.php',
'TITLE' => 'Мои настройки',
],
]
);
$result = $response->getResponseData()->getResult();
echo 'Success: ' . var_export($result, true);
} catch (Throwable $e) {
error_log($e->getMessage());
echo 'Error binding landing settings: ' . $e->getMessage();
}
BX24.callMethod(
'landing.repo.bind',
{
fields: {
PLACEMENT: 'LANDING_SETTINGS',
PLACEMENT_HANDLER: 'https://your-domain.com/widgets/landing-settings-handler.php',
TITLE: 'Мои настройки'
}
},
function(result)
{
if (result.error()) {
console.error(result.error());
} else {
console.info(result.data());
}
}
);
require_once('crest.php');
$result = CRest::call(
'landing.repo.bind',
[
'fields' => [
'PLACEMENT' => 'LANDING_SETTINGS',
'PLACEMENT_HANDLER' => 'https://your-domain.com/widgets/landing-settings-handler.php',
'TITLE' => 'Мои настройки',
],
]
);
echo '<PRE>';
print_r($result);
echo '</PRE>';
// client и ctx уже созданы — см. раздел «SDK для Go»
res, err := client.Core().Call(ctx, "landing.repo.bind", b24.Params{
"fields": b24.Params{
"PLACEMENT": "LANDING_SETTINGS",
"PLACEMENT_HANDLER": "https://your-domain.com/widgets/landing-settings-handler.php",
"TITLE": "Мои настройки",
},
})
if err != nil {
return fmt.Errorf("landing.repo.bind: %w", err)
}
// Ответ приходит как json.RawMessage. При успехе result = true.
// Форма ответа описана на странице метода landing.repo.bind.
fmt.Printf("%s\n", res.Result)
Продолжите изучение
- Места встраивания в разделе Сайты: обзор методов
- Зарегистрировать место встраивания landing.repo.bind
- Удалить место встраивания landing.repo.unbind
- Получить дополнительные поля страницы landing.landing.getadditionalfields
- Получить дополнительные поля сайта landing.site.getadditionalfields
- Пункт редактирования блока LANDING_BLOCK_<CODE> и LANDING_BLOCK_*
- Методы BX24 SDK для виджетов