← Назад к кейсам

Кейсы

Расширение поиска по чатам в Bitrix24

Как доработать поиск чатов, чтобы находить диалоги по тексту сообщений и названиям вложенных файлов.

Штатный поиск чатов удобен, когда помнишь название диалога или участника. Но если нужно найти чат по фразе из старого сообщения или по имени вложенного файла, стандартного поиска может не хватить.

Задача

Нужно было расширить поиск в мессенджере Bitrix24: оставить привычный интерфейс, но добавить возможность находить чаты по содержимому сообщений и названиям файлов.

Найти чат по тому, что в нём обсуждали

В рабочих чатах часто помнят не название диалога, а часть обсуждения: фразу из сообщения, номер документа, название файла или формулировку задачи.

Поэтому поиск должен был находить:

  • пользователей;
  • обычные чаты;
  • открытые чаты;
  • каналы;
  • чаты задач;
  • чаты по названию;
  • чаты по участникам;
  • чаты по тексту сообщений;
  • чаты по названиям вложенных файлов.

Главное требование — не делать отдельную страницу поиска. Пользователь должен искать там же, где уже привык искать чаты.

Поиск должен остаться в привычном интерфейсе

Доработка была рассчитана на коробочный Bitrix24 и штатный интерфейс мессенджера. Отдельно нужно было учесть поиск из задач, потому что в этом контексте нужны именно чаты задач, а не все личные и групповые диалоги подряд.

То есть поиск должен был работать в привычном интерфейсе, но учитывать контекст: обычный поиск чатов — отдельно, поиск чатов задач — отдельно.

Проблема

Штатный поиск хорошо закрывает простые сценарии, но не помогает, когда пользователь помнит только содержимое переписки или название вложенного файла.

В задачах нужны только рабочие обсуждения

Отдельная проблема — поиск в контексте задач. Там пользователю обычно нужен чат конкретной задачи или похожие рабочие обсуждения по задачам, а не обычные личные переписки.

Поэтому в доработке понадобился отдельный режим: если поиск открыт из задач, результаты ограничиваются чатами задач.

Решение

Я сделал локальный модуль, который подменяет штатный провайдер поиска недавних чатов на кастомный. Внешне пользователь остаётся в том же интерфейсе, но серверная логика поиска становится шире.

Свой провайдер вместо штатного поиска

В стандартном запросе поиска используется штатная сущность поиска недавних чатов. Клиентская часть доработки заменяет её на кастомную сущность, а дальше запрос обрабатывается провайдером из локального модуля.

Так удалось не переделывать весь интерфейс мессенджера. Доработка встраивается в существующий механизм поиска и возвращает результаты в ожидаемом для интерфейса формате.

Провайдер собирает результаты из нескольких источников: пользователи, чаты, участники чатов, сообщения и вложенные файлы. Затем результаты объединяются, сортируются и возвращаются обратно в интерфейс.

Поиск по сообщениям и файлам

Для поиска по сообщениям модуль проверяет обычные пользовательские сообщения и исключает технические записи: системные уведомления, пустые сообщения и служебные события.

Если пользователь вводит несколько слов, поиск пытается найти сообщения, где встречаются эти слова. Такой подход удобен для рабочих фраз, номеров документов и коротких описаний.

Для файлов используется похожая логика: модуль ищет совпадения в названиях файлов, которые были прикреплены к сообщениям в чатах.

Поиск чата Bitrix24 по названию файла, прикреплённого к сообщению
Пример поиска по названию вложенного файла: пользователь вводит часть имени файла, а в результатах появляется чат, где этот файл был отправлен.

В итоге чат можно найти не только по названию или участнику, но и по тому, что реально обсуждалось внутри.

Открытие чата сразу у найденного сообщения

Если чат найден по тексту сообщения или по вложенному файлу, модуль сохраняет ID найденного сообщения в данных результата.

При клике по найденному чату интерфейс пытается открыть диалог сразу рядом с найденным сообщением. Если ID сообщения нет, чат открывается обычным способом.

Это важная часть доработки: найти нужный чат мало, нужно ещё быстро попасть в место, где было найдено совпадение.

Отдельный режим для чатов задач

Для поиска из задач добавлен отдельный режим. Клиентская часть определяет, что поиск открыт в контексте задач, и передаёт это в серверный провайдер.

В этом режиме провайдер ограничивает результаты чатами задач. Это нужно, чтобы в поиске по задачам не появлялись личные диалоги, обычные групповые чаты и лишние результаты.

Результат

Поиск чатов стал полезнее для реальной работы: теперь можно искать не только по названию диалога, но и по содержимому переписки и вложенным файлам.

Чаты стали находиться по содержимому

Пользователь продолжает работать в стандартном интерфейсе мессенджера, но получает более широкий поиск.

После доработки можно:

  • найти чат по словам из сообщения;
  • найти чат по названию прикреплённого файла;
  • открыть чат рядом с найденным сообщением;
  • искать чаты задач отдельно от обычных чатов;
  • сохранять привычный интерфейс без отдельной страницы поиска.

Результаты дополнительно сортируются так, чтобы выше были более актуальные чаты: с непрочитанными сообщениями и более свежей активностью.

Что важно учесть при внедрении

Доработка зависит от внутреннего устройства мессенджера и EntitySelector. После обновлений Bitrix24 могут измениться ID штатного провайдера, структура AJAX-запросов, компоненты мессенджера или способ открытия чата.

Поэтому после обновления портала нужно отдельно проверять, что подмена провайдера работает, поиск уходит в кастомную сущность, а клик по результату открывает нужный чат.

Ещё один момент — нагрузка. Поиск по сообщениям и именам файлов выполняется шире, чем обычный поиск по названию чата. На больших порталах такие доработки нужно тестировать на реальном объёме данных и при необходимости ограничивать лимиты.

Ядро Bitrix24 при этом не менялось. Доработка вынесена в локальный модуль, поэтому её проще отключить, проверить или адаптировать после обновления.