Проблематика вопроса
Аксиома: по умолчанию в коробочной версии Битрикс24 чаты с сообщениями не удаляются.
Чат можно скрыть. Но при этом он вместе с сообщениями остается существовать в таблицах базы данных Битрикс24. И пользователи-администраторы могут "вытащить" его содержимое.
При увольнении и даже удалении пользователя его чаты остаются в системе.
Каждый пользователь в своих чатах может удалить только собственные сообщения. При длительной переписке и большом количестве чатов - это долго и трудоемко.
Аксиома: в коробочной версии Битрикс24 отсутствует стандартный функционал (даже для администраторов) по удалению чатов и сообщений в чатах.
Сторонние разработчики предлагают собственные платные решения. Например, https://marketplace.1c-bitrix.ru/solutions/deha.chats/ (цена расширения на дату публикации статьи 30 000 рублей).
Тем не менее, есть возможность посмотреть, изменить, удалить сообщения в "ручном" режиме с ролью администратора. Некоторые чаты теряют актуальность и остаются в системе "мусором", некоторые переписки могут содержать служебную информацию, которую из системы надо также своевременно удалять в целях информационной безопасности. Понимание того, где размещены сообщения и чаты в Битрикс24 будет полезно и для создания собственных расширений.
Хранение сообщений чатов пользователей
Для операций над чатами и сообщениями в чатах необходимо получить доступ к трем таблицам: b_user, b_im_chat, b_im_message.
Все таблицы находятся в Администрировании по адресу: Настройки --> Производительность --> Таблицы.
Таблица b_user
Таблица хранит ID (уникального идентификатора) пользователей. Поиск удобно производить по фильтру. Добавьте необходимое поле, по которому вы сможете легко идентифицировать пользователя, или набор полей.
ID из таблицы b_user может быть критерием для поиска, удаления чатов и/или сообщений по автору чата/сообщений.
Таблица b_im_chat
Таблица хранит ID (уникального идентификатора) чатов.
Поле AUTHOR_ID - автор чата - будет соответствовать ID из таблицы b_user.
Таблица b_im_message
Таблица хранит все сообщения всех чатов системы. У каждой записи таблицы есть поля CHAT_ID, в котором хранится ID чата из таблицы b_im_chat и AUTHOR_ID, в котором хранится ID автора сообщения из таблицы b_user.
Зная ID чата, можно посмотреть сообщения всех пользователей в этом чате.
Зная ID автора сообщений, можно посмотреть сообщения пользователя во всех чатах.
Удаление чатов и сообщений в чатах пользователей
Теперь, когда мы понимаем, что и где хранится, решить задачу "по зачистке" достаточно просто. Она состоит из 3 этапов:
- удаление сообщений;
- удаление чата;
- удаление вложений (файлов) из чата (при необходимости, в данной статье пока не рассматривается).
Понадобится инструмент Администрирования по адресу Настройки --> Инструменты --> SQL запрос. И владение языком запросов.
Команда SELECT позволяет выбрать (посмотреть) записи таблиц. Результат будет как и при фильтрации таблиц.
Команда DELETE позволяет удалить записи.
Несколько примеров SELECT:
SELECT * FROM b_im_message WHERE CHAT_ID=19682
Выбрать (посмотреть) все сообщения из чата с ID 19682
SELECT * FROM b_im_message WHERE AUTHOR_ID=125
Выбрать (посмотреть) все сообщения пользователя с ID 125 (во всех чатах).
SELECT * FROM b_im_message WHERE AUTHOR_ID=125 AND CHAT_ID=19682
Выбрать (посмотреть) все сообщения пользователя с ID 125 в чате с ID 19682.
SELECT * FROM b_im_chat WHERE AUTHOR_ID=125
Выбрать (посмотреть) все чаты, созданные пользователем с ID 125.
Если изменить команду 'SELECT *' на 'DELETE' и выполнить запрос, то соответствующие записи из базы удалятся.
DELETE FROM b_im_message WHERE AUTHOR_ID=125 AND CHAT_ID=19682
Удалит сообщения пользователя с ID 125 в чате 19682
DELETE FROM b_im_message WHERE CHAT_ID=19682
Удалит все сообщения в чате с ID 19682
DELETE FROM b_im_chat WHERE CHAT_ID=19682
Удалит запись о чате с ID 19682
В зависимости от целей можно:
- удалить сообщения конкретного пользователя в конкретном чате;
- удалить сообщения всех пользователей в конкретном чате и затем удалить запись о чате;
- удалить сообщения конкретного пользователя во всех чатах;
- и масса других вариаций по другим критериям. Например, можно удалять сообщения за период или раньше/позже выбранной даты.