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. | Открыть |
| Пункт выпадающего меню генератора документов | См. страницу документации | Меню генератора документов. | Открыть |
| Пункт выпадающего меню верхней кнопки дизайнера роботов | См. страницу документации | Верхнее меню в дизайнере роботов CRM. | Открыть |
| Пункт выпадающего меню в туннелях продаж | См. страницу документации | Выпадающее меню в туннелях продаж. | Открыть |
| Пункт левого меню CRM-аналитики | См. страницу документации | Левое меню CRM-аналитики. | Открыть |
| Пункт выпадающего меню верхней кнопки CRM-аналитики | См. страницу документации | Верхнее меню CRM-аналитики. | Открыть |
Задачи
| Виджет | Код или семейство placement | Где используется | Документация |
|---|---|---|---|
| Пункт контекстного меню списка | См. страницу документации | Контекстное меню задачи в списке. | Открыть |
| Вкладка в карточке задачи | TASK_VIEW_TAB | Отдельная вкладка внутри задачи. | Открыть |
| Правая панель карточки задачи | См. страницу документации | Блок в правой колонке задачи. | Открыть |
| Ссылка в верхней части карточки задачи | См. страницу документации | Верхняя часть карточки задачи. | Открыть |
| Пункт основного выпадающего меню | См. страницу документации | Меню над списком задач. | Открыть |
| Пункт меню около настроек роботов | См. страницу документации | Дизайнер роботов задач. | Открыть |
Рабочие группы и проекты
| Виджет | Код или семейство placement | Где используется | Документация |
|---|---|---|---|
| Пункт основного выпадающего меню проекта | См. страницу документации | Меню рабочей группы или проекта. | Открыть |
| Пункт выпадающего меню над списком задач | См. страницу документации | Верхнее меню списка задач проекта. | Открыть |
| Пункт меню около настроек роботов | См. страницу документации | Дизайнер роботов проекта. | Открыть |
Профиль пользователя, календарь и телефония
| Раздел | Виджет | Код или семейство placement | Документация |
|---|---|---|---|
| Профиль пользователя | Пункт контекстного меню в профиле | См. страницу документации | Открыть |
| Профиль пользователя | Пункт контекстного меню верхней кнопки профиля | См. страницу документации | Открыть |
| Календарь | Виджет в календаре | См. страницу документации | Открыть |
| Телефония | Вкладка в карточке звонка | См. страницу документации | Открыть |
| Телефония | Пункт меню в аналитике звонков | См. страницу документации | Открыть |
| Телефония | WebRTC | См. страницу документации | Открыть |
Мессенджер
| Виджет | Код или семейство placement | Где используется | Документация |
|---|---|---|---|
| Виджет над полем ввода | См. страницу документации | Панель над полем ввода сообщения. | Открыть |
| Виджет для сайдбара | IM_SIDEBAR | Пункт приложения в сайдбаре чата. | Открыть |
| Пункт контекстного меню сообщения | См. страницу документации | Контекстное меню конкретного сообщения. | Открыть |
| Коллекция смайлов | См. страницу документации | Пользовательская коллекция смайлов. | Открыть |
Контакт-центр, универсальные виджеты и пользовательские поля
| Раздел | Виджет | Код или семейство placement | Документация |
|---|---|---|---|
| Контакт-центр | Виджет в контакт-центре | См. страницу документации | Открыть |
| Универсальные виджеты | Виджет в виде ссылки со слайдером | REST_APP_URI | Открыть |
| Универсальные виджеты | Невидимый виджет на каждой странице | PAGE_BACKGROUND_WORKER | Открыть |
| Пользовательские поля | Зарегистрировать новый тип пользовательских полей | См. страницу документации | Открыть |
Коды встройки лучше сверять с конкретной страницей документации перед использованием: часть мест поддерживает разные варианты для лидов, сделок, контактов, компаний, счетов, предложений и смарт-процессов.
Когда регистрировать
Виджеты удобно регистрировать при установке приложения через 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, а основную работу запускать только при нужном условии.
Источники
- Официальная документация: механизм встройки виджетов
- Официальная документация: placement.bind
- Официальная документация: placement.unbind
- CRM: пункт контекстного меню в списке элементов
- CRM: пункт выпадающего меню над списком элементов
- CRM: вкладка в детальной карточке элемента
- CRM: кнопка над таймлайном карточки элемента
- CRM: пункт выпадающего меню верхней кнопки карточки элемента
- CRM: пункт контекстного меню дела в карточке элемента
- CRM: пункт выпадающего меню генератора документов
- CRM: пункт выпадающего меню верхней кнопки дизайнера роботов
- CRM: пункт выпадающего меню в туннелях продаж
- CRM: пункт левого меню CRM-аналитики
- CRM: пункт выпадающего меню верхней кнопки CRM-аналитики
- Задачи: пункт контекстного меню списка
- Задачи: вкладка в карточке задачи
- Задачи: правая панель карточки задачи
- Задачи: ссылка в верхней части карточки задачи
- Задачи: пункт основного выпадающего меню
- Задачи: пункт меню около настроек роботов
- Рабочие группы: пункт основного выпадающего меню проекта
- Рабочие группы: пункт выпадающего меню над списком задач
- Рабочие группы: пункт меню около настроек роботов
- Профиль пользователя: пункт контекстного меню в профиле
- Профиль пользователя: пункт контекстного меню верхней кнопки профиля
- Календарь: виджет в календаре
- Телефония: вкладка в карточке звонка
- Телефония: пункт меню в аналитике звонков
- Телефония: WebRTC
- Мессенджер: виджет над полем ввода
- Мессенджер: виджет для сайдбара
- Мессенджер: пункт контекстного меню сообщения
- Мессенджер: коллекция смайлов
- Контакт-центр: виджет в контакт-центре
- Универсальные виджеты: виджет в виде ссылки со слайдером
- Универсальные виджеты: невидимый виджет на каждой странице
- Пользовательские поля: регистрация нового типа пользовательских полей