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).
Telemax — мост между MAX и Telegram

Геолокация ушла из Telegram в MAX, а в ответ из MAX пришёл видеокружок. Оба выглядят так же, как в обычном чате Telegram.

Месяц без GitHub

Через пару дней после поста на Хабре GitHub скрыл мой аккаунт вместе с репозиторием. По ссылке из статьи читатели видели пустую страницу 404. Причиной стала чья-то жалоба. Дальше целый месяц разбирались, кто мы такие и что за код лежит в репозитории: аккаунт вернули только 18 сентября.

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

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

Что нового с поста на Хабре

Главное, что появилось с тех пор.

Боты MAX — прямо из Telegram

Боты в MAX живут на кнопках, и теперь эти кнопки приходят в Telegram и работают. Ссылки открываются, «Скопировать код» копирует, а нажатие кнопки с действием уходит боту от вашего имени. Найти нового бота можно из пульта по нику или ссылке max.ru/… и начать с ним чат одной кнопкой. Например, с GigaChat теперь можно переписываться и жать его кнопки, не открывая MAX.

Telemax — мост между MAX и Telegram

Служба безопасности MAX прислала уведомления о входе, и кнопка «Завершить все сессии» пришла вместе с ними — её можно нажать прямо в Telegram.

Telemax — мост между MAX и Telegram

GigaChat отвечает прямо в теме. «Новый ответ» и «Подсказки» — кнопки с действием: нажатие уходит боту, и он присылает новое сообщение. Ссылки открываются в браузере.

Групповые чаты

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

Пульт управления

Закреплённое сообщение с кнопками стало полноценной панелью. «Статус» показывает версию, связь с MAX и Telegram, когда прошли последние сообщения, занятость диска и памяти. Контакт в MAX можно найти по номеру или MAX ID. А можно просто поделиться в группе контактом из Telegram — мост найдёт человека в MAX по номеру и предложит начать чат.

Telemax — мост между MAX и Telegram

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

Telemax — мост между MAX и Telegram

«Статус» собирает всё в одной карточке: есть ли связь, когда шли сообщения, хватает ли серверу диска и памяти. Заходить на сервер для этого не нужно.

Надёжнее в мелочах

  • Длинное сообщение из Telegram доходит в MAX целиком: мост сам режет его на части по границе строки.
  • Альбом из нескольких фото удаляется целиком, без «хвостов».
  • Музыка в mp3 из Telegram доходит в MAX файлом.
  • Если что-то передать нельзя (кубик, история, игра), мост пишет об этом в тему, а не молчит.
  • Удаление темы в Telegram больше не трогает ваши сообщения у собеседника в MAX.
  • Пропущенное, пока мост был недоступен, догружается и не теряется.

Несколько номеров — один сервер

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

Обновления и безопасность

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

Telemax — мост между MAX и Telegram

Мост сам проверяет новые версии раз в сутки, а по команде /version — сразу. Если вышло обновление, приходит список изменений и кнопка «Обновить».

  • Откат при неудаче. Если новая версия не собралась или не запустилась, мост возвращается на прежнюю и пишет причину в группу.
  • Зеркало. Если GitHub недоступен, установка и обновления идут с резервного зеркала проекта. Подпись проверяется так же, зеркало — только транспорт.
  • Бережно к диску. Перед сборкой мост проверяет свободное место, а после успешного обновления чистит кэш старых сборок. Обычное обновление занимает пару минут.
  • Анонимные отчёты об ошибках. Если обновление сорвалось или мост упал, разработчику уходит отчёт: версия, шаг, текст ошибки, свободное место, версии ОС и Docker. Текста сообщений, названий чатов и номера телефона в нём нет. Отключается одной строкой TELEMETRY=off.
  • Вход в MAX — в личке бота. Код из SMS и пароль вводятся там и в группу не попадают. Сессия хранится на вашем сервере в зашифрованном виде.
  • Только своя группа. Бот отвечает только в вашей группе, а кнопки пульта и кнопки ботов срабатывают только у администраторов. Контейнер работает без прав root.
  • Защита сервера. Установщик предлагает поставить Fail2ban, по умолчанию — «да». Он банит тех, кто подбирает пароль к SSH, а ваш собственный IP заносит в белый список, чтобы случайно не запереть вас самих.

Как поставить

Нужен сервер на Ubuntu 22.04+ или Debian 12+. Подойдёт даже самый маленький VPS — установка проходит и менее чем на 1 ГБ памяти. На диске для первой сборки нужно около 3 ГБ свободного места.

  • Создайте бота у @BotFather и группу в Telegram с включёнными темами. Добавьте бота в группу администратором с правом «Управление темами».
  • На сервере от root выполните одну команду:
curl -fsSL https://raw.githubusercontent.com/Trollobot/Telemax/main/install.sh | bash
  • Установщик спросит токен бота, сам найдёт группу и проверит права. Если чего-то не хватает, он покажет, что именно и куда нажать.
  • Напишите боту в личку /login, введите номер MAX и код из SMS. Чаты начнут появляться в группе сами.
Telemax — мост между MAX и Telegram

Так группа выглядит сразу после установки: бот ставит аватарку, пишет, что подключён, и закрепляет пульт. Слева уже появились темы чатов MAX.

Если GitHub с сервера недоступен, та же установка есть на зеркале:

curl -fsSL https://zergont-gate.duckdns.org/install.sh | bash

Честно об ограничениях

  • Проект неофициальный. Мост работает с вашим аккаунтом MAX на ваш страх и риск.
  • Ваш сервер видит переписку. Это не сквозное шифрование: данные никуда не уходят, но сервер стоит защищать.
  • Вся группа видит всё. Любой участник группы в Telegram видит все ваши чаты MAX. Приглашайте туда осознанно.
  • Звонки — только уведомления. Поговорить через мост нельзя.
  • Людей не найти по нику. Так устроен сам поиск MAX: по нику находятся боты и каналы. Человека ищите по номеру или MAX ID.
  • Мини-приложения ботов открываются только в MAX. В Telegram их не запустить, а в следующем обновлении кнопка будет хотя бы открывать их в MAX.
  • Ограничения Telegram. Файл больше 50 МБ приходит текстовой заметкой: ботам больше не отправить. После перезапуска моста кнопки под старыми сообщениями ботов перестают работать — напишите боту ещё раз.
  • Разработчик один. Баги случаются, зато чинятся быстро: последний исправили в день сообщения о нём.

Обратная связь

Нашли баг или есть идея — пишите боту @TelemaxSvv_bot, отвечу там же. Код открыт на GitHub под лицензией AGPL-3.0, там же Issues и Discussions.

Если вы уже ставили Telemax после Хабра — просто нажмите «Обновить» в пульте, всё описанное приедет само.

Весь функционал бесплатный. Если пригодился — можно подогреть мотивацию разработчика: команда /donate прямо в боте.