Открыть личный чат с пользователем: BXIM.openMessenger во фронте 1С-Битрикс
Когда это нужно
В коробочной связке «интранет» и модуль мгновенных сообщений посетитель или сотрудник часто переходит в чат из карточки пользователя, списка задач или кастомной кнопки. Вместо статической ссылки хочется повторить поведение штатного интерфейса: развернуть панель сообщений и сразу попасть в диалог с выбранным контактом. На стороне браузера для этого используют глобальный клиентский объект мессенджера — в документации и старых примерах он фигурирует как BXIM.
Минимальный вызов
Если сценарий веб-мессенджера уже инициализирован на странице, открыть приватный чат с пользователем с числовым идентификатором, например 2, можно так:
if (window.BXIM) {
BXIM.openMessenger(2);
}Число — это ID пользователя в сущности b_user, а не символьный код и не внешний логин. Для своих кнопок берите идентификатор из шаблона компонента, результата \CUser, ORM или скрытого поля, но не подставляйте произвольную строку.
Что должно быть загружено на странице
Объект BXIM появляется не во всех контекстах: его создаёт клиентский пакет модуля общения после инициализации интерфейса. Если скрипт подключили на «голой» посадочной без штатной шапки мессенджера, глобала может не быть — тогда сначала убедитесь, что в шаблоне сайта действительно выводится веб-мессенджер (или отдельно подключены нужные расширения модуля im для вашей редакции).
- Пользователь должен иметь право пользоваться чатом и быть в сценарии внешнего портала/интранета, где чат активен.
- Перед вызовом имеет смысл проверять не только факт наличия
window.BXIM, но и то, что нужный пользователь не совпадает с текущим (для личного диалога с самим собой клиент обычно бессмыслен).
Прикрутка к интерфейсу
Типичный паттерн — собственная кнопка «Написать» в списке людей или в карточке досье. В обработчик клика передаёте числовой ID, по возможности из серверно отрендеренного атрибута data-user-id, чтобы не парсить строки на клиенте. Если контент подгружается AJAX-ом с \Bitrix\Main\Engine\Controller, возвращайте в JSON уже готовый userId и только после вставки узла в DOM вешайте обработчик.
Серверная сторона и D7
Сам по себе вызов openMessenger относится к клиенту и не требует отдельного «D7-класса». Если задача звучит как «открыть чат из PHP», разделяйте уровни: на сервере подготавливаете права и данные (кому писать можно), на клиенте один раз инициализируете интерфейс и вызываете JS. Для фоновых сценариев (оповещения без браузера) смотрите REST или внутренние сервисы мессенджера в документации вашей версии продукта — это уже другая плоскость, не замена BXIM.openMessenger.
Ограничения и отладка
- В мобильной теме или упрощённом шаблоне панели может не быть — проверяйте фактическую верстку.
- При обновлении корпоративного портала названия глобалов и состав расширений меняются; держите smoke-тест на клик по кнопке после апдейта.
- Не путайте идентификатор приватного диалога в API мессенджера с ID пользователя: для высокоуровневой кнопки «написать пользователю» достаточно переданного в примерах числа пользователя.
Итог
Для быстрого открытия личного чата на странице с рабочим веб-мессенджером достаточно вызвать BXIM.openMessenger(<ID пользователя>), предварительно убедившись, что клиентский объект доступен. Все бизнес-ограничения («кому можно писать») по-прежнему задаются правами и шаблоном портала, а не одной строчкой JavaScript.
Не хотите копаться сами?
Починю за 1-3 дня. Без предоплаты — оплата по результату.
15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии