Telemax — мост между MAX и Telegram
Telemax — это мост, который приносит переписку из MAX в Telegram: вы читаете и отвечаете в привычном мессенджере, а собеседники видят обычные сообщения в MAX. В августе я рассказывал о нём на Хабре. С тех пор проект пережил блокировку на GitHub и дорос до версии 1.2. Здесь — что изменилось и почему мостом стало можно пользоваться каждый день.
Зачем это нужно
У многих в MAX появились чаты, которые не перенесёшь: рабочие, школьные, домовые. Жить при этом хочется в одном мессенджере, а не держать два и проверять оба.
Telemax решает это без компромиссов по охвату. Он входит в ваш личный аккаунт MAX по номеру телефона, а не работает ботом. Поэтому в Telegram приходят все ваши чаты MAX, а не только те, куда добавили бота. Отвечаете вы из Telegram, а собеседник получает обычное сообщение от вас в MAX.
Как это устроено
На стороне Telegram у вас одна группа с темами, и каждый чат MAX становится в ней отдельной темой. Написали в тему — сообщение ушло в этот чат MAX. Ответили в MAX — ответ появился в теме.
Работает мост на вашем сервере, через вашего же бота Telegram. Облачных посредников нет: переписка идёт только между MAX, вашим сервером и Telegram. У сервера нет открытых портов и веб-панели, всё управление — из Telegram.
Передаётся почти всё, что бывает в переписке, в обе стороны:
- текст, фото, видео, файлы, голосовые и видеокружки;
- стикеры, в том числе анимированные;
- геолокация, контакты, опросы с голосованием;
- ответы на сообщения, пересылка, реакции, правки и удаление;
- уведомления о звонках (сам звонок — только в MAX).
Геолокация ушла из Telegram в MAX, а в ответ из MAX пришёл видеокружок. Оба выглядят так же, как в обычном чате Telegram.
Месяц без GitHub
Через пару дней после поста на Хабре GitHub скрыл мой аккаунт вместе с репозиторием. По ссылке из статьи читатели видели пустую страницу 404. Причиной стала чья-то жалоба. Дальше целый месяц разбирались, кто мы такие и что за код лежит в репозитории: аккаунт вернули только 18 сентября.
Мост за это время не остановился. Я поднял собственное зеркало проекта, и все обновления этого месяца выходили через него. С тех пор установка и обновления сами переключаются на зеркало, если GitHub недоступен. Подменить через него код нельзя: каждый релиз подписан, и мост проверяет подпись, откуда бы его ни скачал.
Урок простой: если проектом пользуются каждый день, ему нужен запасной путь, не зависящий от одной площадки.
Что нового с поста на Хабре
Главное, что появилось с тех пор.
Боты MAX — прямо из Telegram
Боты в MAX живут на кнопках, и теперь эти кнопки приходят в Telegram и работают. Ссылки открываются, «Скопировать код» копирует, а нажатие кнопки с действием уходит боту от вашего имени. Найти нового бота можно из пульта по нику или ссылке max.ru/… и начать с ним чат одной кнопкой. Например, с GigaChat теперь можно переписываться и жать его кнопки, не открывая MAX.
Служба безопасности MAX прислала уведомления о входе, и кнопка «Завершить все сессии» пришла вместе с ними — её можно нажать прямо в Telegram.
GigaChat отвечает прямо в теме. «Новый ответ» и «Подсказки» — кнопки с действием: нажатие уходит боту, и он присылает новое сообщение. Ссылки открываются в браузере.
Групповые чаты
- В теме видно, кто из участников написал сообщение.
- В карточке группы — список участников, и с любым можно открыть личный чат в одно нажатие.
- Когда кто-то входит или выходит, мост называет человека и даёт кнопку, чтобы ему написать.
- Правки из MAX помечаются значком со временем правки.
Пульт управления
Закреплённое сообщение с кнопками стало полноценной панелью. «Статус» показывает версию, связь с MAX и Telegram, когда прошли последние сообщения, занятость диска и памяти. Контакт в MAX можно найти по номеру или MAX ID. А можно просто поделиться в группе контактом из Telegram — мост найдёт человека в MAX по номеру и предложит начать чат.
Пульт закреплён в группе. Номер показан маской: карточку видят все участники, а кнопки срабатывают только у администраторов.
«Статус» собирает всё в одной карточке: есть ли связь, когда шли сообщения, хватает ли серверу диска и памяти. Заходить на сервер для этого не нужно.
Надёжнее в мелочах
- Длинное сообщение из Telegram доходит в MAX целиком: мост сам режет его на части по границе строки.
- Альбом из нескольких фото удаляется целиком, без «хвостов».
- Музыка в mp3 из Telegram доходит в MAX файлом.
- Если что-то передать нельзя (кубик, история, игра), мост пишет об этом в тему, а не молчит.
- Удаление темы в Telegram больше не трогает ваши сообщения у собеседника в MAX.
- Пропущенное, пока мост был недоступен, догружается и не теряется.
Несколько номеров — один сервер
На одном сервере можно держать несколько мостов, например для личного и рабочего номера. Та же команда установки на сервере с мостом открывает меню: обновить, перенастроить, поставить ещё один мост или удалить лишний. Перед удалением настройки сохраняются в резервную копию.
Обновления и безопасность
Мост обновляется кнопкой из Telegram, и каждое обновление проверяется по подписи. Релизы подписываются ключом разработчика, а мост проверяет подпись до того, как новые файлы попадут на диск. Подменить код по дороге не выйдет.
Мост сам проверяет новые версии раз в сутки, а по команде /version — сразу. Если вышло обновление, приходит список изменений и кнопка «Обновить».
- Откат при неудаче. Если новая версия не собралась или не запустилась, мост возвращается на прежнюю и пишет причину в группу.
- Зеркало. Если GitHub недоступен, установка и обновления идут с резервного зеркала проекта. Подпись проверяется так же, зеркало — только транспорт.
- Бережно к диску. Перед сборкой мост проверяет свободное место, а после успешного обновления чистит кэш старых сборок. Обычное обновление занимает пару минут.
- Анонимные отчёты об ошибках. Если обновление сорвалось или мост упал, разработчику уходит отчёт: версия, шаг, текст ошибки, свободное место, версии ОС и Docker. Текста сообщений, названий чатов и номера телефона в нём нет. Отключается одной строкой TELEMETRY=off.
- Вход в MAX — в личке бота. Код из SMS и пароль вводятся там и в группу не попадают. Сессия хранится на вашем сервере в зашифрованном виде.
- Только своя группа. Бот отвечает только в вашей группе, а кнопки пульта и кнопки ботов срабатывают только у администраторов. Контейнер работает без прав root.
- Защита сервера. Установщик предлагает поставить Fail2ban, по умолчанию — «да». Он банит тех, кто подбирает пароль к SSH, а ваш собственный IP заносит в белый список, чтобы случайно не запереть вас самих.
Как поставить
Нужен сервер на Ubuntu 22.04+ или Debian 12+. Подойдёт даже самый маленький VPS — установка проходит и менее чем на 1 ГБ памяти. На диске для первой сборки нужно около 3 ГБ свободного места.
- Создайте бота у @BotFather и группу в Telegram с включёнными темами. Добавьте бота в группу администратором с правом «Управление темами».
- На сервере от root выполните одну команду:
- Установщик спросит токен бота, сам найдёт группу и проверит права. Если чего-то не хватает, он покажет, что именно и куда нажать.
- Напишите боту в личку /login, введите номер MAX и код из SMS. Чаты начнут появляться в группе сами.
Так группа выглядит сразу после установки: бот ставит аватарку, пишет, что подключён, и закрепляет пульт. Слева уже появились темы чатов MAX.
Если GitHub с сервера недоступен, та же установка есть на зеркале:
Честно об ограничениях
- Проект неофициальный. Мост работает с вашим аккаунтом MAX на ваш страх и риск.
- Ваш сервер видит переписку. Это не сквозное шифрование: данные никуда не уходят, но сервер стоит защищать.
- Вся группа видит всё. Любой участник группы в Telegram видит все ваши чаты MAX. Приглашайте туда осознанно.
- Звонки — только уведомления. Поговорить через мост нельзя.
- Людей не найти по нику. Так устроен сам поиск MAX: по нику находятся боты и каналы. Человека ищите по номеру или MAX ID.
- Мини-приложения ботов открываются только в MAX. В Telegram их не запустить, а в следующем обновлении кнопка будет хотя бы открывать их в MAX.
- Ограничения Telegram. Файл больше 50 МБ приходит текстовой заметкой: ботам больше не отправить. После перезапуска моста кнопки под старыми сообщениями ботов перестают работать — напишите боту ещё раз.
- Разработчик один. Баги случаются, зато чинятся быстро: последний исправили в день сообщения о нём.
Обратная связь
Нашли баг или есть идея — пишите боту @TelemaxSvv_bot, отвечу там же. Код открыт на GitHub под лицензией AGPL-3.0, там же Issues и Discussions.
Если вы уже ставили Telemax после Хабра — просто нажмите «Обновить» в пульте, всё описанное приедет само.
Весь функционал бесплатный. Если пригодился — можно подогреть мотивацию разработчика: команда /donate прямо в боте.