Переезд из Telegram в бизнес-мессенджер: реально ли сделать без боли?
Казалось бы, что может быть не так с использованием публичного мессенджера для рабочей переписки? В России это Telegram, в других странах чаще всего WhatsApp* и Facebook Messenger*. По статистике за этот год 70% всех работников в России (источник) часть своей рабочей переписки ведёт в публичных мессенджерах, а значит и вы тоже, признайтесь.
Многие к этому привыкли, кто-то даже научился брать этот процесс под контроль и отличать своих от чужих по белым спискам, проверкам на причастность к организации через специальных ботов, выпуск корпоративных SIM-карт только для Телеграм и т.п. Очевидно, что никто не хочет, чтобы служебная информация осталась в руках бывших сотрудников или ещё хуже — регулярно ими читалась. Бесплатно, удобно, да есть риски, но с этим можно жить.
Но в этом году по вполне очевидным причинам, продиктованным вопросами национальной безопасности, такой способ рабочего общения был серьёзно ограничен — перестали работать звонки между пользователями иностранных публичных мессенджеров, которые мы так полюбили за их бесплатность и глобальный абонентский охват. По статистике операторов связи в сентябре и октябре количество GSM вызовов (т.е. через обычную сотовую связь) в России удвоилось. Напомним, что для совершения таких звонков нужно знать сотовые номера коллег и наконец-то начать тратить минуты, включенные в ваш тарифный план. Для небольшой компании из 20-30 сотрудников это терпимо, но для любой серьёзной организации (не забываем про 70% выше, они тоже страдают) это большая головная боль, как в технической плоскости (как сделать так, чтобы все сотрудники знали все сотовые номера коллег), так и в юридической (это же персональные данные получается, а для этого нужно согласие других коллег). Что делать? Обсудим дальше.
А ведь есть и другая проблема — все наши коммуникации сплелись в один большой клубок: рабочие, семейные, развлекательные, общественные. Как можно ответить на запрос коллеги в Телеграм, не прочитав последние новости в соседнем чатике или не ответив любимой или детям? Это не просто, для многих просто невозможно. Что приводит к постоянной смене контекста и заставляет переключаться с рабочих задач на другие, снижая нашу с вами эффективность (замечу, что происходит это в рабочие часы, естественно).
Давайте посмотрим правде в глаза — давно пора начать отделять инструменты для рабочего общения от всех остальных. Сейчас на дворе конец 2025 года и заставить всех коллег, особенно молодых, общаться через электронную почту уже не получится, они выросли со смартфоном в руках и искренне не понимают почему там нельзя отправить файл на 700 МБ или посмотреть личную переписку, не разгребая горы СПАМа и не рискуя кликнуть по фишинговой ссылке.
Поэтому в этой статье мы рассмотрим как добавить на главный экран смартфонов ваших сотрудников ещё одну иконку — иконку приложения, где будет только рабочее общение (со звонками, чатами, аватарками, конференциями и всем необходимым) и никаких отвлекающих или ограничивающих продуктивность факторов. Да, и ИБ и ИТ-специалистам такой подход очень понравится, ведь отдельным инструментом намного легче управлять, как говорится, разделяй и властвуй.
Требования к мессенджеру
Итак, вступление закончено, давайте сформулируем критерии актуальные на сегодняшний день, которые мы должны предъявить к рабочему чату, коммуникатору или мессенджеру (называйте как хотите, суть уже понятна):
- Функции мессенджера: поддержка личных и групповых чатов, каналов и прочих базовых вещей, типа пересылки файлов и сообщений.
- Функции UC (Unified Communications, объединённые коммуникации): адресная книга со списком сотрудников, профили с важными данными, такими как департамент, город, или ДР, статусы присутствия и возможность звонить друг другу. В идеале ещё хорошо бы иметь поддержку ВКС, чтобы собираться более чем вдвоём.
- Интеграция с ИТ-системами: минимально с AD/LDAP и Exchange, ибо вручную заводить и обслуживать сотни (или тысячи) учётных записей для всех пользователей компании (мы же не хотим никого оставить за бортом, в Telegram же все коллеги были доступны) никто в здравом уме не станет.
- Коробочная версия. Облакам нет доверия, причем не зависимо от юрисдикции. Как ни относись к Telegram, хранить критически важные рабочие переписки «где-то у соседей» — идея сомнительная. Пользователи мессенджера создают кучу файлов, гигабайты каждый день, а данные в облаках бесплатными не бывают, облачные мессенджеры потребуют оплаты всё больших тарифов с ростом хранилища. Поэтому решения, которые хорошо ловят на парковке, и прочие облачные сервисы — пролетают мимо, нужен полноценный self-hosted.
- Доступный API. В идеале — бесплатный API для работы с чатами. Telegram эту планку уже задал, и логично искать что-то сопоставимое, где можно без лицензий и доплат строить собственные интеграции.
- Простота развертывания. Не надо превращать установку в квест с Docker-ами, контейнерами, виртуалками и балансировщиками. Хочется просто взять готовый серверный дистрибутив, поставить его на свой хост и работать.
Отсутствие файловых ограничений. Telegram давно служит заменой файлообменника, и это удобно. Ограничения на общий объём или размер загружаемых файлов только мешают — нужно, чтобы система позволяла передавать материалы свободно, без искусственных потолков.
Почему Труконф?
У мессенджера Труконф есть несколько очевидных плюсов, которые сложно игнорировать:
- установка на своей сервер standalone-приложения без танцев с бубном 🥁. Поставил, запустил, работаешь.
- сервер использует всего один порт — а это резко упрощает настройку файрвола. Никаких десятков правил, маршрутов и исключений. Просто открыть один порт и забыть. А что так можно было?
- передача файлов работает без искусственных потолков: сколько нужно — столько отправляете, хоть используйте как корпоративный файлообменник. Ограничение только ваш SSD на сервере или NAS.
- в бесплатной версии доступен чат-API, до 300 пользователей мессенджера и безлимитные аудио/видеозвонки. Для старта — более чем.
Честное сравнение с конкурентами
Вы, дорогие читатели, можете открыть подборку на популярном ресурсе и сделать собственные выводы… А я собрал ключевые моменты, чтобы наглядно показать сильные и слабые стороны разных продуктов, а точнее их бесплатных версий:
При этом есть лайфхак: чтобы получить 300 пользователей, укажите корпоративный email и пользуйтесь на здоровье.
Тут хотелось бы вспомнить советский постер:
Что умеет API чатов в Труконф
В составе мессенджера Труконф поставляется отдельный сервис (служба) TrueConf Chatbot Connector, которая реализует связность внешних систем с нашим мессенджером. API работает поверх транспортного протокола WebSocket и не является привычным API как в Telegram (в ближайшем обновлении мы исправим это — появится HTTP REST API). API Труконф на базе WebSocket открывает множество интересных возможностей:
- мгновенные нотификации об ответах;
- поддержка постоянного соединения с сервером;
- использование стандартных TCP портов.
При этом, для разработчиков представлена удобная библиотека python-trueconf-bot, которая существенно упрощает создание ботов и взаимодействие с API чатов.
Итого, для переноса чатов из Telegram в Труконф нужно:
- Поддержка личных, групповых чатов и каналов.
- Отправка сообщений, в том числе: файлы, эмоджи и стикеры, аудио- и видеосообщения.
- Ответы (reply).
- Пересылка (forward).
- Упоминания (mention).
- Форматирование сообщений (чтобы успешно перенести в новый мессенджер).
Как спарсить чат в Telegram
С помощью бота
Самое первое, что приходит в голову, создать бота, который спарсит всю историю сообщений чата. К сожалению, в Telegram Bot API нет отдельного метода для получения всей истории переписки. То есть, бот может получить только новые сообщения чата (обновления), а это нам не подходит… Мы тут собрались переносить старое.
Кто старое помянет, тому глаз вон
С помощью MTProto API
Метод загрузки истории существует в MTProto API (messages.getHistory), но это клиентское API, и оно не входит в Bot API и следовательно недоступно ботам. К счастью, на Python существует библиотека Telethon, которая поддерживает авторизацию через токены ботов. Все бы ничего, но не бывает роз без шипов и нужно осознавать все риски работы через MTProto.
Для общения с MTProto API нам понадобятся специальные параметры — api_id и api_hash. Следуя официальной документации Telegram получить их не составит труда. Важно отметить, что получая таким образом доступ к API мы фактически создаем собственное приложение Telegram App, отличное от официального клиента. Это потенциально рискованный шаг потому что:
- Нарушение правил использования (Terms of Service, ToS) Telegram API может привести к блокировке учетной записи;
- выданные api_id и api_hash не подлежат изменению или удалению. Тем не менее, на безопасность аккаунта это напрямую не влияет, поскольку даже при наличии указанных параметров для работы через API необходимо пройти полноценную авторизацию с вводом номера телефона и одноразового кода (OTP).
Таким образом, боясь нарушить правила использования Telegram API, я продолжил поиски нормального решения для выгрузки чата без регистрации и смс.
С помощью Telegram Desktop
Я люблю Telegram за их стремление быть современными. Они действительно стараются быть user-friendly. Официально Telegram поддерживает все существующие платформы. В Telegram Desktop (не путать с Telegram for macOS) из коробки доступен экспорт любого чата.
Это мега-фича, которая "решит все твои проблемы". Потому что нам не надо будет придумывать велосипед, продумывать логику парсинга чата, выгрузки всех мемчиков, аудиосообщений и подобного. Команда Telegram все сделала за нас – для нас.
Экспорт чата Telegram
После установки и авторизации в Telegram Desktop у вас отобразится привычный список чатов. Для экспорта выполните:
- Откройте нужный чат. Неважно какой – личный, групповой или канал.
- В правом верхнем углу нажмите Еще (кнопка с тремя точками) и выберите Экспорт истории чата:
У вас откроется окно Настройки экспорта. Выставьте формат JSON и при необходимости:
- отметьте типы медиа подлежащие выгрузки;
- ограничьте размер файлов, чтобы не скачивалось все в подряд;
- настройте диапазон времени сообщений.
Важно отметить, что экспорт чата будет производиться в режиме реального времени. Все файлы будут скачиваться в указанную папку (по умолчанию в Downloads/Telegram Desktop). После начала экспорта вы можете продолжить пользоваться приложением, экспорт будет производиться в фоновом режиме. Если вы выбрали диапазон дат, то приложение будет "идти" к выбранной дате обрабатывая все сообщения от начала. Выглядит как недоработка со стороны Telegram, но как есть…
Анализ бэкапа
По завершению экспорта вам будет доступна папка с названием ChatExport_Date, например, ChatExport_2025-09-11. Содержимое папки может отличаться в зависимости от настроек экспорта. Приведу типовый пример содержимого папки:
Основным файлом, который нас интересует, является result.json. В нем аккумулирована вся информация о чате. Рассмотрим его содержимое подробнее.
result.json
Файл содержит всего 4 объекта:
- name. Имя чата.
- type. Тип чата.
- id. Внутренний (цифровой) идентификатор чата.
- messages. Сообщения.
Нас более всего интересует содержимое объекта messages. Он содержит массив объектов сообщений:
Команда Telegram очень хорошо продумала структуру бэкапа. Я создал групповой чат, наполнил его разными типами сообщений: текст, сжатая картинка, файл, аудиосообщение, видеосообщение и т.д., и начал исследовать, как Telegram будет сохранять информацию о таких сообщениях в result.json. Можно ли вообще будет спарсить этот файл? Насколько это будет легко или сложно? Вот что получилось:
- Каждый объект сообщения в result.json содержит обязательные поля: id, type, date, date_unixtime.
- В зависимости от типа сообщения service или message Telegram определяет автора сообщения: для служебных сообщений: actor, actor_id, а для обычных сообщений чата: from, from_id.
- Любое сообщение чата имеет поля: text, text_entities.
А дальше? А дальше в зависимости от типа сообщения количество полей будет разным. Приведу "схематичный" пример отличий:
Текстовое сообщение
Сжатая картинка
Файл
Видеосообщение
Другие типы сообщений приводить не буду, чтобы не перегружать статью. Вы можете сделать это сами. Главное, что стало понятно – Telegram сделал все, чтобы их бэкап можно было использовать для дальнейшей обработки в других системах.
Перенос чата в Труконф
Перед написанием кода, я провел аналитическую работу и составил для себя план действий, который и описывается в данном разделе
Как уже упоминал выше, API Труконф поддерживает практически все, что есть в Telegram. Нет только видео- аудиосообщений, но это не беда. Как показывает опыт, не все пользователи Telegram этим пользуются. Не зря Пашка Дуров придумал монетизировать отключение голосовых и видеосообщений.
Я же в своей жизни пользуюсь голосовухами, поэтому ниже покажу как я решил данную проблему с Труконф.
Адаптация форматирования сообщений
По моему скромному мнению Telegram самый богатый мессенджер в плане разновидности форматирования. Тут тебе и цитаты, и сворачивающиеся цитаты, моноширинный текст и автоматическое распознавание кода, спойлеры. К сожалению не все это поддерживают (привет, WhatsApp и VK Messenger), в том числе и Труконф.
Ниже мой план по адаптации телеграмовского форматирования:
Голосовые сообщения
Труконф поддерживает открытие некоторых файлов во встроенном просмотрщике. Telegram пишет голосовые сообщения в формате .ogg, но этот формат не поддержан в Труконф. Поэтому пришла идея подружить две системы и отправлять голосовые из Telegram в Труконф как видео .mp4 со статической картинкой. Сделать это очень просто используя ffmpeg:
Видеосообщения (кружочки)
Кружочки Telegram сохраняются как video.mp4 с добавлением индекса: video.mp4, video (2).mp4. Это неудобно при просмотре чата в Труконф – нет контекста. Будем переименовывать его в что-то осмысленное, как у аудиосообщений – audio_1@16-07-2025_15-20-31.ogg, только для видео – video_message@16-07-2025_15-20-31.mp4.
Написание кода
Писать код я буду на Python. Да, многие «трушные» программисты не в восторге от этой змеи из-за её скорости, но в нашей задаче это совершенно не критично. Ваши аргументы с радостью почитаю в комментариях под катом.
Выбор языка во многом определило наличие готовой библиотеки python-trueconf-bot. С ней не нужно возиться с настройкой WebSocket-соединения: достаточно создать экземпляр
и можно сразу отправлять сообщения через
Те, кто хоть раз работал с «сырым» WebSocket и ручной обработкой JSON, поймут, насколько это удобно.
Ну что ж, приступим! Подробно на самой библиотеке я останавливаться не буду — у неё есть отличная документация с примерами. Если вы знакомы с aiogram, то разберётесь моментально: логика очень похожа.
Забегая вперёд, я не стану приводить полный разбор кода — лишь выделю ключевые моменты. Полный листинг, как обычно, можно найти на GitHub.
Текстовые сообщений с форматированием
Первое, что я сделал, это написал функцию build_content_from_text_entities, которая собирает текст с поддерживаемым форматированием в API Труконф (HTML, Markdown).
Здесь Telegram тоже порадовал, т.к. он в result.json длинные сообщения с форматированием разбивает на группы. Я предпочел использовать поле text_entities вместо text, потому что в объектами словарей становится весь текст, даже \n, что существенно упростило парсинг:
Чтобы собрать из данного массива новое сообщение, нужно пройтись по нему циклом, проверив type задать правильный стиль для text:
Ответ на сообщение (reply)
При ответе на сообщение в result.json добавляется ключ reply_to_message_id, который содержит ID сообщения, на которое отвечали. В Труконф API при отправке сообщения мы получаем message_id, поэтому нетрудно сопоставить айдишники:
и при наличии ключа reply_to_message_id вытягивать айдишник перенесенного сообщения.
Отправка сообщений в чат
Здесь все просто. У нас есть массив сообщений в result.json и мы пройдемся обычным циклом for. Поскольку в каждом объекте сообщения может быть разное кол-во полей, я начал анализировать какой тип сообщения нужно обработать вначале. Все типы файлов, за исключением изображений отправленный с сжатием, имеют поле file и отличить их можно только по media_type. Также каждое сообщение содержит поля text и text_entities, а в связи с тем что API чатов Труконф пока не имеет возможности отправить подпись к файлу, то я решил отправлять подписи отдельным текстовым сообщением следующим сразу после отправки файла. Таким образом выстроилась правильная очередность обработки сообщений:
1) Проверяем, содержит ли объект сообщения параметр photo? Если да, то отправляем сообщение:
2) Если .get(photo) == False, то двигаемся дальше и обрабатываем сообщения по media_type:
В match-case порядок не важен, т.к. сработает только ветка соответствующая media_type.
3) В конце проверяем, если ли подпись if message["text_entities"], если да, то генерируем сообщение с адаптированным форматированием в HTML и отправляем сообщение (либо ответ на сообщение).
Выводы
Ограничения на звонки, сложности с использованием GSM в корпоративной среде и общая тенденция к ужесточению требований к коммуникациям показывают, что привычные инструменты уже не всегда удовлетворяют потребности бизнеса. Поэтому вопрос перехода на собственный мессенджер — это скорее вопрос зрелости инфраструктуры, чем радикальное решение.
На деле переехать с Telegram не так сложно, как может казаться. Главное — понимать базовые потребности компании. Корпоративный инструмент должен обеспечивать привычный набор функций мессенджера: личные и групповые чаты, каналы, пересылку файлов и сообщений. Но этим всё не ограничивается — для полноценной работы необходимы возможности уровня UC: единая адресная книга, профили сотрудников, статусы присутствия и корпоративные звонки. Желательно также иметь встроенную ВКС, чтобы проводить встречи с несколькими участниками.
Не менее важна интеграция с ИТ-системами. Подключение к AD/LDAP и Exchange позволяет автоматически создавать и обслуживать учётные записи, избавляя администраторов от работы «вручную» и сохраняя привычный уровень доступности сотрудников, который раньше обеспечивал Telegram.
Если проект понравился, то поставьте звездочку на GitHub. Также в репозитории вы найдете подробнейший мануал, по полному переезду из Telegram в TrueConf Messenger. Чтобы вы не парились с формированием конфиг файла (а он там есть) и регистрацией пользователей, то были подготовлены дополнительные скрипты, упрощающие взаимодействие с проектом. О том, как с ними работать описано в инструкции.
Спасибо, что дочитали статью до конца. Надеюсь, материал окажется полезным на практике!
Компания Meta* Platforms Inc. (владелец Facebook* и WhatsApp*) признана экстремистской организацией и запрещена на территории Российской Федерации.