Идея#
Рабочая переписка никуда не делась, а пользоваться ей на iPhone стало неудобно. Ставить обходные клиенты не хотелось, поэтому решил не бороться с мессенджером, а перенести переписку туда, где я и так живу весь день.
Получилось сервис-зеркало: всё, что приходит в рабочий чат в MAX, появляется в Telegram. Отвечаю там же, а сервис отправляет ответ обратно.
Читаю и пишу там, где удобно. MAX с той стороны живёт своей жизнью.
Как это устроено#
Схема простая. Сервис состоит из бота, воркера и двух хранилищ, а путь сообщения выглядит так:
- клиент pymax получает сообщение из MAX;
- сообщение попадает в очередь ARQ на Redis, так всплески не теряются;
- воркер отправляет его в Telegram и записывает в PostgreSQL, что оно уже ушло;
- в обратную сторону ответ из Telegram идёт тем же путём в MAX.
Запись в PostgreSQL нужна для идемпотентности: если воркер перезапустится посередине, сообщение не продублируется.
Стек#
- Python 3.11+;
- Telegram: aiogram 3 и обычный Bot API;
- MAX: клиент пользователя pymax, а не официальный Bot API. Сессия лежит на диске, вход нужен один раз по SMS или QR;
- очередь: ARQ и Redis;
- идемпотентность: PostgreSQL, таблица уже отправленных сообщений, чтобы ничего не ушло дважды;
- Docker Compose: бот, воркер, Redis и Postgres.
Что идёт и что нет#
Работают текст, ссылки, альбомы фото, видео и файлы. Файлы в обе стороны дожал совсем недавно. Историю не копирую: только то, что пришло после запуска.
Пока честно: голосовые не победил. Для MAX нет нормальных библиотек и API под голосовые сообщения.
Когда доделаю, напишу отдельно. Заодно держу в голове, что клиент пользователя зависит от того, как устроен сам мессенджер, поэтому за ним придётся приглядывать.
Итог#
Для меня результат такой: читаю и отвечаю из Telegram, а приложение MAX на телефоне не нужно. Переписка остаётся в двух местах, но смотреть приходится в одном.
Если у вас похожая задача, связать два мессенджера или вытащить рабочий чат туда, где вам удобно, это как раз то, что я делаю. Напишите, обсудим, что можно сделать на ваших платформах и где будут ограничения.





