REST
Виджеты
Рабочая справка по REST-виджетам Bitrix24: placement.bind, placement.unbind, PLACEMENT, PLACEMENT_OPTIONS, CRM, задачи, мессенджер и универсальные виджеты.
Виджет REST — это способ встроить своё приложение в интерфейс Bitrix24: карточку CRM,
список задач, профиль пользователя, мессенджер, контакт-центр или другое место. Обычно
виджет регистрируют при установке приложения через placement.bind.
Общее понимание
Виджет привязывает URL приложения к конкретному месту интерфейса Bitrix24.
Что такое виджет
Bitrix24 открывает обработчик виджета в iframe, слайдере или другом интерфейсном месте. На URL обработчика передаётся контекст: где открыт виджет, кто его открыл и к какой сущности он относится.
Для простых внутренних инструментов виджет проще делать как локальное приложение:
страница приложения открывается внутри Bitrix24, получает контекст и дальше вызывает
REST-методы через BX24.callMethod().
placement
PLACEMENT — это код места встройки. Именно он передаётся в
placement.bind и говорит Битриксу, куда добавить приложение.
BX24.callMethod(
'placement.bind',
{
PLACEMENT: 'CRM_DEAL_DETAIL_TAB',
HANDLER: 'https://example.com/bitrix24/deal-tab.php',
TITLE: 'Мой виджет'
},
function (result) {
if (result.error()) {
console.error(result.error());
return;
}
console.log(result.data());
}
);
Когда один и тот же URL используется для нескольких виджетов, значение
PLACEMENT помогает понять, откуда именно был открыт обработчик.
Основные места встройки
Это не полный справочник всех параметров, а рабочая карта: куда можно встроить приложение и какую страницу документации открыть, когда нужен конкретный виджет.
CRM
| Виджет | Код или семейство placement | Где используется | Документация |
|---|---|---|---|
| Пункт контекстного меню в списке элементов | CRM_XXX_LIST_MENU, CRM_DYNAMIC_XXX_LIST_MENU | Контекстное меню элемента в списке CRM. | Открыть |
| Пункт выпадающего меню над списком элементов | CRM_XXX_LIST_TOOLBAR, CRM_DYNAMIC_XXX_LIST_TOOLBAR | Верхнее меню над списком лидов, сделок, контактов, компаний, счетов, предложений и смарт-процессов. | Открыть |
| Вкладка в детальной карточке элемента CRM | CRM_XXX_DETAIL_TAB, CRM_DYNAMIC_XXX_DETAIL_TAB | Отдельная вкладка внутри карточки CRM. | Открыть |
| Кнопка над таймлайном карточки элемента | CRM_XXX_DETAIL_ACTIVITY, CRM_DYNAMIC_XXX_DETAIL_ACTIVITY | Кнопка рядом с действиями над таймлайном CRM-карточки. | Открыть |
| Пункт выпадающего меню верхней кнопки карточки элемента | CRM_XXX_DETAIL_TOOLBAR, CRM_DYNAMIC_XXX_DETAIL_TOOLBAR | Верхнее меню действий в карточке CRM. | Открыть |
| Пункт контекстного меню дела в карточке элемента | CRM_XXX_ACTIVITY_TIMELINE_MENU, CRM_DYNAMIC_XXX_ACTIVITY_TIMELINE_MENU | Контекстное меню дела в таймлайне CRM. | Открыть |
| Пункт выпадающего меню генератора документов | CRM_XXX_DOCUMENTGENERATOR_BUTTON | Меню генератора документов. | Открыть |
| Пункт выпадающего меню верхней кнопки дизайнера роботов | CRM_XXX_ROBOT_DESIGNER_TOOLBAR | Верхнее меню в дизайнере роботов CRM. | Открыть |
| Пункт выпадающего меню в туннелях продаж | CRM_FUNNELS_TOOLBAR | Выпадающее меню в туннелях продаж. | Открыть |
| Пункт левого меню CRM-аналитики | CRM_ANALYTICS_MENU | Левое меню CRM-аналитики. | Открыть |
| Пункт выпадающего меню верхней кнопки CRM-аналитики | CRM_ANALYTICS_TOOLBAR | Верхнее меню CRM-аналитики. | Открыть |
Задачи
| Виджет | Код или семейство placement | Где используется | Документация |
|---|---|---|---|
| Пункт контекстного меню списка | TASK_LIST_CONTEXT_MENU | Контекстное меню задачи в списке. | Открыть |
| Вкладка в карточке задачи | TASK_VIEW_TAB | Отдельная вкладка внутри задачи. | Открыть |
| Правая панель карточки задачи | TASK_VIEW_SIDEBAR | Блок в правой колонке задачи. | Открыть |
| Ссылка в верхней части карточки задачи | TASK_VIEW_TOP_PANEL | Верхняя часть карточки задачи. | Открыть |
| Пункт основного выпадающего меню | TASK_USER_LIST_TOOLBAR, TASK_GROUP_LIST_TOOLBAR | Меню над списком задач. | Открыть |
| Пункт меню около настроек роботов | TASK_ROBOT_DESIGNER_TOOLBAR | Дизайнер роботов задач. | Открыть |
Рабочие группы и проекты
| Виджет | Код или семейство placement | Где используется | Документация |
|---|---|---|---|
| Пункт основного выпадающего меню проекта | SONET_GROUP_DETAIL_TAB | Меню рабочей группы или проекта. | Открыть |
| Пункт выпадающего меню над списком задач | TASK_GROUP_LIST_TOOLBAR | Верхнее меню списка задач проекта. | Открыть |
| Пункт меню около настроек роботов | TASK_ROBOT_DESIGNER_TOOLBAR | Дизайнер роботов проекта. | Открыть |
Профиль пользователя, календарь и телефония
| Раздел | Виджет | Код или семейство placement | Документация |
|---|---|---|---|
| Профиль пользователя | Пункт контекстного меню в профиле | USER_PROFILE_MENU | Открыть |
| Профиль пользователя | Пункт контекстного меню верхней кнопки профиля | USER_PROFILE_TOOLBAR | Открыть |
| Календарь | Виджет в календаре | CALENDAR_GRIDVIEW | Открыть |
| Телефония | Вкладка в карточке звонка | CALL_CARD | Открыть |
| Телефония | Пункт меню в аналитике звонков | TELEPHONY_ANALYTICS_MENU | Открыть |
| Телефония | WebRTC | WebRTC | Открыть |
Мессенджер
| Виджет | Код или семейство placement | Где используется | Документация |
|---|---|---|---|
| Виджет над полем ввода | IM_TEXTAREA | Панель над полем ввода сообщения. | Открыть |
| Виджет для сайдбара | IM_SIDEBAR | Пункт приложения в сайдбаре чата. | Открыть |
| Пункт контекстного меню сообщения | IM_CONTEXT_MENU | Контекстное меню конкретного сообщения. | Открыть |
| Коллекция смайлов | IM_SMILES_SELECTOR | Пользовательская коллекция смайлов. | Открыть |
Контакт-центр, универсальные виджеты и пользовательские поля
| Раздел | Виджет | Код или семейство placement | Документация |
|---|---|---|---|
| Контакт-центр | Виджет в контакт-центре | CONTACT_CENTER | Открыть |
| Универсальные виджеты | Виджет в виде ссылки со слайдером | REST_APP_URI | Открыть |
| Универсальные виджеты | Невидимый виджет на каждой странице | PAGE_BACKGROUND_WORKER | Открыть |
| Пользовательские поля | Зарегистрировать новый тип пользовательских полей | userfieldtype.add | Открыть |
Коды встройки лучше сверять с конкретной страницей документации перед использованием: часть мест поддерживает разные варианты для лидов, сделок, контактов, компаний, счетов, предложений и смарт-процессов.
Когда регистрировать
Виджеты проще регистрировать при установке приложения через BX24.install().
Пока приложение не установлено до конца, виджет обычно не отображается в интерфейсе.
Если приложение переустанавливается, проверьте, не создаются ли дубли привязок.
Для этого можно сначала вызвать placement.get или при необходимости
удалить старую привязку через placement.unbind.
Регистрация
Основной метод регистрации виджета — placement.bind.
placement.bind
BX24.install(function () {
BX24.callMethod(
'placement.bind',
{
PLACEMENT: 'CRM_DEAL_DETAIL_TAB',
HANDLER: 'https://example.com/bitrix24/deal-tab.php',
TITLE: 'Мой виджет'
},
function (result) {
if (result.error()) {
console.error(result.error());
BX24.installFinish();
return;
}
BX24.installFinish();
}
);
});
В HANDLER указывается URL страницы приложения, которую Bitrix24 откроет в
месте встройки. Для боевого приложения это должен быть доступный HTTPS-адрес.
placement.unbind
Если нужно убрать привязку, используется placement.unbind.
BX24.callMethod(
'placement.unbind',
{
PLACEMENT: 'CRM_DEAL_DETAIL_TAB',
HANDLER: 'https://example.com/bitrix24/deal-tab.php'
},
function (result) {
if (result.error()) {
console.error(result.error());
return;
}
console.log(result.data());
}
); PLACEMENT_OPTIONS
Когда Bitrix24 открывает обработчик виджета, в него передаются параметры контекста. Например, в карточке CRM обычно приходит ID элемента, а в мессенджере — данные диалога.
<?php
/**
* Получает параметры виджета.
*/
function fetchPlacementOptions(): array
{
$placement_options = $_REQUEST['PLACEMENT_OPTIONS'] ?? '{}';
$options = json_decode((string) $placement_options, true);
return is_array($options) ? $options : [];
}
$options = fetchPlacementOptions();
print_r($options);
В рабочих проектах первый шаг при разработке нового виджета — вывести весь
$_REQUEST и отдельно PLACEMENT_OPTIONS, чтобы увидеть
фактический контекст конкретного места встройки.
Примеры
Три частых места встройки: карточка CRM, сайдбар чата и невидимый worker.
CRM detail tab
BX24.callMethod(
'placement.bind',
{
PLACEMENT: 'CRM_DEAL_DETAIL_TAB',
HANDLER: 'https://example.com/bitrix24/deal-tab.php',
TITLE: 'Данные интеграции'
},
function (result) {
if (result.error()) {
console.error(result.error());
return;
}
console.log('CRM tab registered');
}
);
В обработчике вкладки нужно читать PLACEMENT_OPTIONS, чтобы получить ID
сущности CRM и загрузить данные именно по этой карточке.
<?php
/**
* Получает ID CRM-элемента из параметров виджета.
*/
function fetchCrmEntityIdFromPlacement(): int
{
$options = fetchPlacementOptions();
return isset($options['ID']) ? (int) $options['ID'] : 0;
}
$deal_id = fetchCrmEntityIdFromPlacement();
echo $deal_id; Background worker
PAGE_BACKGROUND_WORKER — невидимый виджет, который загружается на
страницах Bitrix24. Его нужно использовать аккуратно: тяжёлый обработчик может
замедлять интерфейс.
BX24.callMethod(
'placement.bind',
{
PLACEMENT: 'PAGE_BACKGROUND_WORKER',
HANDLER: 'https://example.com/bitrix24/background-worker.php',
OPTIONS: {
errorHandlerUrl: 'https://example.com/bitrix24/background-worker-error.php'
}
},
function (result) {
if (result.error()) {
console.error(result.error());
return;
}
console.log('Background worker registered');
}
); В таком обработчике лучше не выполнять тяжёлые запросы сразу при загрузке. Безопаснее сначала быстро загрузить минимальный JS, а основную работу запускать только при нужном условии.