Изменить настройки Мессенжера Битрикс 24

от автора

Речь идет о коробке Битрикс 24

Задача была изменить дефолтные настройки Мессенжера (по факту не только его) у пользователей.

  1. Отключить отправку уведомлений на почту, по дефолту, у всех новых пользователей.

  2. Отключить чтобы при открытии чата в браузере не запускалось десктопное приложение. Причем даже если пользователь включит эту опцию она вернулась назад.

Храниться вся эта прелесть в таблице b_im_option_state в ней используются не ID пользователей а так называемых групп.
Таблица с этими группами b_im_option_group там уже есть привязка к Пользователю (По факту 1 пользователь одна группа).

Настройки эти создаются только тогда — когда настройки были первый раз изменены. До этого видимо применяются значения по умолчанию в самих скриптах обработчиках
В стиле «В базе ничего нет, значит будет так…»

  1. Вешаем обработчик на событие создания пользователя.

use \Bitrix\Main\EventManager; // После добавления нового Пользователя EventManager::getInstance()->addEventHandler("main", "OnAfterUserAdd", function(&$arFields) {     Loader::includeModule("im");     $userId = $arFields["ID"]; // Получаем массив со всеми настройками     $userSettings = CIMSettings::Get($userId); // Меняем только нужный параметр     $settings = $userSettings['settings']; // Выбираем общие настройки     $settings['notifySchemeSendEmail'] = false; // Устанавливаем параметр  // Сохраняем обратно     $res = CIMSettings::Set(         "settings", // Общие настройки         $settings,         $userId     );     \CIMSettings::ClearCache($userId);  });

2.Скрипт cron выполняющийся раз в день, устанавливает нужный параметр для всех новых пользователей и сбрасывает у всех кто его поменял. Можно было делать и через CIMSettings::Set. Но мне данный вариант понравился больше + хотел показать что можно и так. (Да, да в Битрикс работать с базой напрямую нельзя, мы про это помним … и скорбим).

$_SERVER["DOCUMENT_ROOT"] = "/home/bitrix/www"; require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");  global $DB;  $DB->Query("     UPDATE b_im_option_state     SET VALUE = 'N'     WHERE NAME = 'se|openDesktopFromPanel' AND VALUE = 'Y' ");

P.S. Кстати в новом мессенжере конкретно этой опции больше нет, в битрикс поняли что она тупая. Но пример я оставил, может кто будет так сносить другую настройку.


ссылка на оригинал статьи https://habr.com/ru/articles/940884/