Установить обработчик виджета placement.bind
Выберите инструмент для разработки с AI-агентом:
- используйте Битрикс24 Вайбкод, чтобы создать приложение для Битрикс24 по описанию задачи без знания языков программирования. Агент напишет код и разместит приложение на сервере без ручной настройки хостинга
- используйте MCP-сервер, чтобы разрабатывать интеграцию через REST API в своем проекте. Агент будет обращаться к официальной REST-документации
Scope:
placement,в зависимости от места встройкиКто может выполнять метод: администратор
Метод placement.bind добавляет обработчик встройки виджета.
Он может быть вызван в любой момент во время работы приложения, однако чаще всего, удобнее регистрировать свои виджеты во время установки приложения.
Важно учитывать, что пока установка приложения не завершена, зарегистрированные вами виджеты не будут доступны обычным пользователям в интерфейсе Битрикс24 - их смогут видеть только пользователи с административными правами.
Проверьте установку приложения.
Параметры метода
Обязательные параметры отмечены *
|
Название |
Описание |
|
PLACEMENT* |
Идентификатор требуемого места встройки виджета |
|
HANDLER* |
URL обработчика места встройки виджета |
|
TITLE |
Название виджета в интерфейсе. В зависимости от конкретного места встройки это может быть название вкладки в форме, название пункта меню и т.д. |
|
DESCRIPTION |
Описание виджета в интерфейсе. На практике не используется |
|
GROUP_NAME |
Позволяет объединять элементы пользовательского интерфейса для нескольких обработчиков одного и того же типа виджета в группу. Например, несколько пунктов выпадающего меню в верхней кнопке карточки CRM. Поддерживается только некоторыми типами виджетов |
|
LANG_ALL |
Массив параметров
|
|
OPTIONS |
Дополнительные параметры отображения виджета. Конкретные значения зависит от места встройки виджета. На текущий момент используется в виджетах для мессенджера, в виджете |
|
USER_ID |
Идентификатор пользователя Битрикс24, для которого будет доступен зарегистрированный виджет. Возможные значение можно получить с помощью метода user.get На текущий момент этот параметр поддерживается только виджетом При попытке регистрации места встраивания в прочих виджетах, вы получите ошибку |
Примеры кода
Как использовать примеры в документации
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"PLACEMENT":"PLACEMENT_CODE","HANDLER":"http://myapp.com/handler/?type=1","OPTIONS":{"errorHandlerUrl":"http://myapp.com/error/"},"TITLE":"title","DESCRIPTION":"description","GROUP_NAME":"group","LANG_ALL":{"en":{"TITLE":"title","DESCRIPTION":"description","GROUP_NAME":"group"},"ru":{"TITLE":"заголовок","DESCRIPTION":"описание","GROUP_NAME":"группа"}},"auth":"**put_access_token_here**"}' \
https://**put_your_bitrix24_address**/rest/placement.bind
try
{
const response = await $b24.callMethod(
"placement.bind",
{
"PLACEMENT": "PLACEMENT_CODE",
"HANDLER": "http://myapp.com/handler/?type=1",
"OPTIONS": {
"errorHandlerUrl": "http://myapp.com/error/"
},
"TITLE": "title",
"DESCRIPTION": "description",
"GROUP_NAME": "group",
"LANG_ALL": {
"en": {
"TITLE": "title",
"DESCRIPTION": "description",
"GROUP_NAME": "group",
},
"ru": {
"TITLE": "заголовок",
"DESCRIPTION": "описание",
"GROUP_NAME": "группа",
}
}
}
);
const result = response.getData().result;
if(result.error())
console.error(result.error());
else
console.info(result);
}
catch(error)
{
console.error('Error:', error);
}
try {
$response = $b24Service
->core
->call(
'placement.bind',
[
'PLACEMENT' => 'PLACEMENT_CODE',
'HANDLER' => 'http://myapp.com/handler/?type=1',
'OPTIONS' => [
'errorHandlerUrl' => 'http://myapp.com/error/'
],
'TITLE' => 'title',
'DESCRIPTION' => 'description',
'GROUP_NAME' => 'group',
'LANG_ALL' => [
'en' => [
'TITLE' => 'title',
'DESCRIPTION' => 'description',
'GROUP_NAME' => 'group',
],
'ru' => [
'TITLE' => 'заголовок',
'DESCRIPTION' => 'описание',
'GROUP_NAME' => 'группа',
]
]
]
);
$result = $response
->getResponseData()
->getResult();
if ($result->error()) {
error_log($result->error());
} else {
echo 'Success: ' . print_r($result->data(), true);
}
} catch (Throwable $e) {
error_log($e->getMessage());
echo 'Error binding placement: ' . $e->getMessage();
}
BX24.callMethod(
"placement.bind",
{
"PLACEMENT": "PLACEMENT_CODE",
"HANDLER": "http://myapp.com/handler/?type=1",
"OPTIONS": {
"errorHandlerUrl": "http://myapp.com/error/"
},
"TITLE": "title",
"DESCRIPTION": "description",
"GROUP_NAME": "group",
"LANG_ALL": {
"en": {
"TITLE": "title",
"DESCRIPTION": "description",
"GROUP_NAME": "group",
},
"ru": {
"TITLE": "заголовок",
"DESCRIPTION": "описание",
"GROUP_NAME": "группа",
}
}
},
function(result)
{
if(result.error())
console.error(result.error());
else
console.info(result.data());
}
);
require_once('crest.php');
$result = CRest::call(
'placement.bind',
[
'PLACEMENT' => 'PLACEMENT_CODE',
'HANDLER' => 'http://myapp.com/handler/?type=1',
'OPTIONS' => [
'errorHandlerUrl' => 'http://myapp.com/error/'
],
'TITLE' => 'title',
'DESCRIPTION' => 'description',
'GROUP_NAME' => 'group',
'LANG_ALL' => [
'en' => [
'TITLE' => 'title',
'DESCRIPTION' => 'description',
'GROUP_NAME' => 'group'
],
'ru' => [
'TITLE' => 'заголовок',
'DESCRIPTION' => 'описание',
'GROUP_NAME' => 'группа'
]
]
]
);
echo '<PRE>';
print_r($result);
echo '</PRE>';
Частые кейсы и сценарии
Обработка ответа
HTTP-статус: 200
{
"result": true,
"time": {
"start": 1712132792.910734,
"finish": 1712132793.530359,
"duration": 0.6196250915527344,
"processing": 0.032338857650756836,
"date_start": "2024-04-03T10:26:32+02:00",
"date_finish": "2024-04-03T10:26:33+02:00",
"operating_reset_at": 1705765533,
"operating": 3.3076241016387939
}
}
Возвращаемые данные
|
Название |
Описание |
|
result |
Возвращает результат добавления обработчика виджета. Возможные значения:
|
|
time |
Информация о времени выполнения запроса |
Обработка ошибок
HTTP-статус: 400, 403, 200
{
"error": "ERROR_ARGUMENT",
"error_description": "Argument 'PLACEMENT' is null or empty",
"argument": "PLACEMENT"
}
|
Название |
Описание |
|
error |
Строковый код ошибки. Может состоять из цифр, латинских букв и знака подчеркивания |
|
error_description |
Текстовое описание ошибки. Описание не предназначено для показа конечному пользователю в необработанном виде |
Возможные коды ошибок
|
Код |
Описание |
Статус |
|
|
Произошла попытка повторной регистрации обработчика виджета |
200 |
|
|
Не указано значение обязательного поля. Код обязательного поля возвращается в |
200 |
|
|
Current authorization type is denied for this method Application context required |
403 |
Статусы и коды системных ошибок
HTTP-статус: 20x, 40x, 50x
Описанные ниже ошибки могут возникнуть при вызове любого метода
|
Статус |
Код |
Описание |
|
|
|
Возникла внутренняя ошибка сервера, обратитесь к администратору сервера или в техническую поддержку Битрикс24 |
|
|
|
Возникла внутренняя ошибка сервера, обратитесь к администратору сервера или в техническую поддержку Битрикс24 |
|
|
|
Превышен лимит на интенсивность запросов |
|
|
|
Метод заблокирован из-за превышения лимита на ресурсоемкость запросов. Блокировка снимается автоматически через 10 минут |
|
|
|
Текущий метод не разрешен для вызова с помощью batch |
|
|
|
Превышена максимальная длина параметров, переданных в метод batch |
|
|
|
Неверный access-токен или код вебхука |
|
|
|
Для вызовов методов требуется использовать протокол HTTPS |
|
|
|
REST API заблокирован из-за перегрузки. Это ручная индивидуальная блокировка, для снятия необходимо обращаться в техническую поддержку Битрикс24 |
|
|
|
REST API доступен только на коммерческих планах |
|
|
|
У пользователя, с чьим access-токеном или вебхуком был вызван метод, не хватает прав |
|
|
|
Манифест недоступен |
|
|
|
Запрос требует более высоких привилегий, чем предоставляет токен вебхука |
|
|
|
Предоставленный access-токен доступа истек |
|
|
|
Пользователь не имеет доступа к приложению. Это означает, что приложение установлено, но администратор портала разрешил доступ к этому приложению только конкретным пользователям |
|
|
|
Публичная часть сайта закрыта. Чтобы открыть публичную часть сайта на коробочной установке отключите опцию «Временное закрытие публичной части сайта». Путь к настройке: Рабочий стол > Настройки > Настройки продукта > Настройки модулей > Главный модуль > Временное закрытие публичной части сайта |
Обработчик виджета
Итак, успешный вызов метода placement.bind позволил вам зарегистрировать обработчик виджета. Важно, чтобы указанный вами параметр HANDLER_URL указывал на реальный и доступный URL.
Важно
Требуется, чтобы URL обработчика был обязательно доступен из внешней сети. Ссылки на localhost, локальные домены и аналогичные способы обращения к локальному вебсерверу не годятся. Проверяйте доступность указанного вами URL с помощь специальных сервисов, контролирующих доступность сайтов!
Обращаясь к вашему обработчику, Битрикс24 передаст в него POST-message, содержащий информацию о контексте виджета, например, идентификатор сделки, если виджет встраивается в карточку сделки в CRM и т.д.
Примеры таких данных вы найдете в описаниях конкретных мест встройки виджетов.
Продолжите изучение
- Места для встройки виджетов
- Получить список доступных приложению мест встраивания placement.list
- Удалить зарегистрированный обработчик места встраивания placement.unbind
- Взаимодействие с UI: обзор методов