The Daily Newsstand · Free, Always
Monday, October 5, 2026

Мультитенантный мост MAX Telegram: self‑hosted бот, к которому каждый подключает свой аккаунт

Translate

MAX — российский мессенджер, и многие вынуждены в нём сидеть (рабочие чаты, школы, госструктуры), но живут в Telegram. Готовых мостов мало, и почти все рассчитаны на одного пользователя: ты сам разворачиваешь сервер и подключаешь только себя.

Я сделал мост, у которого одно развёртывание обслуживает нескольких людей: каждый заходит в бота в Telegram, привязывает свой MAX‑аккаунт и получает свою отдельную супергруппу. Данные пользователей друг от друга изолированы.

Репозиторий: github.com/Balonchik1/multitenant‑max‑telegram‑bridge

Что умеет

  • Каждый диалог и группа из MAX получают свою тему в Telegram‑форуме

  • Текст, фото, видео, голосовые, документы, стикеры, альбомы, ответы, пересылки и правки идут в обе стороны. Удаление сообщения в MAX отмечается в Telegram, обратно удаление не передаётся: у Bot API нет такого события

  • Реакции в обе стороны

  • Опросы, контакты и записи о звонках приходят читаемым текстом, посты из MAX‑каналов тоже

  • После переподключения бот добирает пропущенные сообщения

Как это устроено

Библиотека pymax — неофициальный клиент протокола MAX. Бот держит по одному живому подключению на каждого пользователя, у каждого своя SQLite‑база и своя директория кэша. Пользователь сервер не видит: он общается только с Telegram‑ботом, который проводит его через вход (номер, SMS‑код, облачный пароль если нужен).

Несколько неочевидных вещей, на которые я наступил.

Реакции. MAX не присылает push‑событие о реакции в личных диалогах, поэтому направление MAX → Telegram работает через опрос раз в 30 секунд. Ещё MAX хранит эмодзи в полной форме с variation selector (❤️), а Telegram отдаёт без него (❤), и MAX отвергает такой вариант.

Перезапуск под systemd. При падении подключения к MAX на старте процесс завершался с кодом 0, и Restart=on-failure не срабатывал: бот молча лежал, пока я не заходил на сервер. Причём aiogram по умолчанию ставит свой обработчик SIGTERM и тихо заменяет мой, так что отследить штатную остановку не получалось, пока я не отключил handle_signals.

Альбомы с видео. sendMediaGroup у Telegram атомарный: одно видео неизвестного размера валит весь альбом. Теперь надёжные файлы идут группой, а сомнительные — отдельными сообщениями с откатом на превью.

Честно о рисках

  • Это неофициальный протокол. Он уже менялся под библиотекой не раз, и использование userbot‑подобного клиента формально может привести к блокировке аккаунта.

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

  • Облачный пароль 2FA по желанию пользователя запоминается в базе открытым текстом.

  • Один процесс и N живых подключений: для десятков пользователей хватит, для сотен нужна другая архитектура.

Установка

Python 3.12+, токен бота от BotFather, свой MAX‑аккаунт. Подробная инструкция, конфигурация и пример systemd‑юнита — в README репозитория. Есть набор тестов на pytest.

Что дальше

Если нашли баг или нужна фича — пишите в Issues на GitHub. Лицензия MIT.

View the original on Хабр →

KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.