Кастомизация интерфейса CRM в Битрикс24: BX.UI, JX и Placement API
Команда SellUs разрабатывает приложения и кастомизации для Битрикс24 с 2017 года: Helper, AutoHub, Page2Bitrix24. Ниже разбираем инструменты, которыми пользуемся сами при разработке под клиента. Подробнее о команде.
Стандартный интерфейс Битрикс24 покрывает 80% задач. Остальные 20% требуют кастомизации: добавить кнопку в список контактов, встроить дополнительную вкладку в карточку сделки, показать собственный виджет в боковой панели.
Это статья для разработчиков и технических директоров. Разберём инструменты: BX.UI, JX-компоненты, Placement API. Покажем примеры кода и расскажем что именно можно изменить в интерфейсе CRM без нарушения требований маркетплейса.
Три уровня кастомизации
Перед тем как писать код: определитесь на каком уровне нужна кастомизация.
Уровень 1. Placement API (рекомендуемый)
Битрикс24 предоставляет официальные «точки встраивания» (placement): места в интерфейсе куда приложение может добавить свой элемент. Кнопки, панели, вкладки. Это официальный способ, поддерживается маркетплейсом.
Уровень 2. BX.UI компоненты
JavaScript-фреймворк Битрикс24 для построения UI. Позволяет создавать диалоги, попапы, формы в стиле системного интерфейса. Используется совместно с Placement API.
Уровень 3. JX Framework
Более низкоуровневый слой. Управление DOM, события, AJAX-запросы. Используется когда BX.UI не хватает.
Placement API: что и куда можно встроить
Placement: это именованная точка в интерфейсе. Приложение регистрирует обработчик для конкретного placement, и система показывает элемент приложения в нужном месте.
CRM_LEAD_LIST_MENU и CRM_CONTACT_LIST_MENU
Добавляют пункт в контекстное меню строки списка (правый клик или три точки рядом со строкой). Позволяют добавить действие над конкретным лидом или контактом из списка.
Регистрация в REST API:
POST https://your-domain.bitrix24.ru/rest/placement.bind
placement = CRM_CONTACT_LIST_MENU
handler = https://your-app.ru/handler.php
title = Моё действиеПри клике: Битрикс24 вызывает handler с параметрами: ID контакта, ID пользователя, данные из строки.
CRM_DEAL_DETAIL_TAB и CRM_CONTACT_DETAIL_TAB
Добавляют вкладку в карточку сделки или контакта. Вкладка загружает iframe с вашим приложением. Передаются параметры: ID сущности, тип.
Это самый распространённый способ встроить дополнительный функционал: расчёт маржинальности, история взаимодействий из внешней системы, карта доставки.
CRM_DEAL_DETAIL_ACTIVITY
Блок в ленте активности карточки сделки. Позволяет добавить собственный тип активности: лог из телефонии, событие из внешней системы.
CALL_CARD
Панель в карточке звонка (при входящем/исходящем вызове). Показывает данные о клиенте из внешней базы прямо во время разговора.
CRM_ROBOTDESIGNER_TRIGGER и CRM_ROBOTDESIGNER_ROBOT
Добавляют кастомные триггеры и роботы в конструктор автоматизации. Это мощный placement для создания собственных действий в воронке.
Регистрация placement: пример кода
Регистрация через REST API (PHP):
$result = CRest::call('placement.bind', [
'PLACEMENT' => 'CRM_CONTACT_LIST_MENU',
'HANDLER' => 'https://your-app.ru/menu-handler.php',
'TITLE' => 'Проверить в базе',
'DESCRIPTION' => 'Проверяет контакт во внутренней базе данных',
'GROUP_NAME' => 'Мои действия',
'ICON' => 'https://your-app.ru/icon.png',
]);Обработчик menu-handler.php получает POST-запрос с параметрами:
PLACEMENT_OPTIONS[entityId] = 123 // ID контакта
PLACEMENT_OPTIONS[entityTypeId] = 3 // тип сущности CRM
AUTH[access_token] = ... // токен для REST-запросовBX.UI: компоненты для кастомного UI
BX.UI: это набор JavaScript-компонентов которые повторяют визуальный стиль Битрикс24. Используйте их чтобы ваш интерфейс выглядел нативно.
Диалоговое окно
var dialog = new BX.UI.Dialog({
title: 'Проверка контакта',
width: 600,
content: '<div id="my-content">Загрузка...</div>',
buttons: [
new BX.UI.Dialog.Button({
text: 'Применить',
color: BX.UI.Button.Color.SUCCESS,
onclick: function() {
// действие
dialog.close();
}
}),
BX.UI.Dialog.ButtonSet.CANCEL,
],
});
dialog.show();Попап-уведомление
BX.UI.Notification.Center.notify({
content: 'Контакт найден в базе: Иванов Иван',
type: 'success',
autoHideDelay: 4000,
});Выпадающий список (Popup Menu)
Используется для контекстных меню и выпадающих панелей:
var popup = new BX.PopupMenu(
'my-popup-' + id,
node,
[
{ text: 'Открыть в CRM', onclick: function() { /* ... */ } },
{ text: 'Отправить письмо', onclick: function() { /* ... */ } }
],
{ autoHide: true, closeByEsc: true }
);
popup.show();JX Framework: работа с DOM и событиями
JX (JavaScript eXtended): более низкоуровневый слой. Полезен для:
AJAX-запросы к REST API из JS
BX.ajax.runAction('crm.contact.get', {
data: { id: contactId }
}).then(function(response) {
var contact = response.data;
console.log(contact.NAME, contact.LAST_NAME);
}).catch(function(error) {
console.error(error);
});Подписка на события CRM
Битрикс24 генерирует JavaScript-события при изменении данных в интерфейсе:
// Подписаться на сохранение карточки сделки
BX.addCustomEvent('CRMObjectEditorSaved', function(event) {
var entityId = event.id;
var entityType = event.entityTypeName; // 'deal', 'contact', etc.
// ваш код
});Работа с BX.SidePanel
SidePanel: боковая панель Битрикс24. Открывает ваш iframe без перехода на новую страницу:
BX.SidePanel.Instance.open('https://your-app.ru/detail/?id=' + contactId, {
width: 800,
animationDuration: 300,
label: {
text: 'Детальная информация',
bgColor: '#4CAF50',
},
});Что не стоит делать
Ряд подходов технически работает но нарушает правила маркетплейса или создаёт проблемы при обновлениях:
Изменение HTML-структуры системных элементов через document.querySelector и подобные методы. Работает сегодня. Ломается после обновления системы.
Monkey-patching BX.CRM.* методов. Официально не поддерживается.
Классы вида crm-entity-stream-* не документированы и меняются без предупреждения.
Всегда использовать Placement API + BX.UI + REST API. Это официальные интерфейсы которые поддерживаются командой Битрикс24.
Примеры приложений SellUs
За 9 лет работы с Битрикс24 мы разработали несколько приложений использующих описанные механизмы:
- Helper: набор инструментов для ускорения работы менеджеров в CRM. Использует Placement API для встройки кнопок и панелей в карточки сделок и контактов.
- AutoHub: автоматизация интеграций. Использует
CRM_ROBOTDESIGNER_ROBOTдля добавления кастомных роботов в конструктор автоматизации Битрикс24. - Page2Bitrix24: подключение внешних сайтов к CRM. Использует BX.SidePanel и CALL_CARD placement для показа данных о посетителе сайта во время звонка.
Если нужно разработать кастомизацию под конкретный бизнес-процесс: напишите нам, опишем архитектуру и оценим сроки.
Частые вопросы
Можно ли протестировать кастомизацию без публикации в маркетплейсе Битрикс24?+
Да, для тестирования публикация в маркетплейсе не нужна. Локальное приложение или обработчик placement можно зарегистрировать и проверить на конкретном тестовом портале, публикация в маркетплейсе требуется только если планируется распространять решение на другие компании.
Сломается ли моя кастомизация при следующем обновлении Битрикс24?+
Если сделано через официальные интерфейсы (Placement API, BX.UI, REST API), риск минимальный: команда Битрикс24 поддерживает обратную совместимость этих механизмов. Риск возникает, если использовать неофициальные обходные пути вроде прямой манипуляции DOM или внутренних CSS-классов, именно поэтому в статье они выделены отдельно как то, чего делать не стоит.
Нужен ли отдельный сервер для обработчика placement?+
Да, обработчик placement — это внешний URL, куда Битрикс24 отправляет запросы, он должен быть физически размещён где-то за пределами самого портала: на собственном сервере, облачном хостинге или бессерверной платформе. Логика приложения выполняется там, а не внутри Битрикс24.
В чём разница между кастомизацией через Placement API и локальным приложением?+
Placement API — это конкретный механизм встраивания элемента в интерфейс (кнопка, вкладка, панель). Локальное приложение — это более широкое понятие: способ регистрации и распространения кастомизации в рамках одного портала. На практике локальное приложение обычно и использует Placement API как один из инструментов. Подробный разбор регистрации приложений и прав доступа: [как расширить Битрикс24 своим приложением](/blog/lokalnoe-prilozhenie-bitrix24/).
Можно ли использовать BX.UI и JX внутри приложения на React или Vue?+
Технически можно подключить BX.UI и JX как обычные JavaScript-библиотеки внутри современного фронтенд-стека, но они изначально спроектированы для работы без сборщиков и фреймворков. Для приложения на React или Vue чаще проще использовать только официальный REST API для получения данных, а интерфейс строить средствами самого фреймворка, обращаясь к BX.UI только там, где нужно визуально повторить нативный стиль Битрикс24.
Сколько стоит разработка кастомизации интерфейса CRM?+
Зависит от сложности: простая кнопка через Placement API с несложным обработчиком — это разработка на несколько часов, полноценное приложение с несколькими точками встраивания, боковыми панелями и кастомными роботами уже требует недель работы. Точную оценку можно получить только после описания конкретной задачи.
Применить к вашей отрасли
Аудит-чеклист Битрикс24
Проверьте текущую настройку CRM перед разработкой кастомизации: 50 параметров.
Helper: инструменты для менеджеров
Готовое приложение SellUs с кастомными placement в карточках сделок и контактов.
AutoHub: интеграции Битрикс24
Кастомные роботы и триггеры для конструктора автоматизации Битрикс24.
Разработаем приложение или кастомизацию под ваш Битрикс24
От встраивания кнопки в список контактов до полного приложения с боковыми панелями и кастомными роботами. Разработка через официальные API маркетплейса.
Обсудить проект по вашей задаче
Оставьте контакты: перезвоним в течение 2 часов в рабочее время.