lerk

Интеграции3 мин чтения

Зеркало двух мессенджеров: читаю рабочие чаты там, где удобно

В рабочих чатах нам навязали MAX. Я его до конца не ставил: зачем ещё один мессенджер, если есть нормальный. Потом приложение убрали из App Store, и на iPhone его скачать нельзя. Канал связи стал обязательным, а скачать его уже нельзя.

Дмитрий

Обложка поста про зеркало между двумя мессенджерами

Идея#

Рабочая переписка никуда не делась, а пользоваться ей на iPhone стало неудобно. Ставить обходные клиенты не хотелось, поэтому решил не бороться с мессенджером, а перенести переписку туда, где я и так живу весь день.

Получилось сервис-зеркало: всё, что приходит в рабочий чат в MAX, появляется в Telegram. Отвечаю там же, а сервис отправляет ответ обратно.

Читаю и пишу там, где удобно. MAX с той стороны живёт своей жизнью.

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

Схема простая. Сервис состоит из бота, воркера и двух хранилищ, а путь сообщения выглядит так:

  1. клиент pymax получает сообщение из MAX;
  2. сообщение попадает в очередь ARQ на Redis, так всплески не теряются;
  3. воркер отправляет его в Telegram и записывает в PostgreSQL, что оно уже ушло;
  4. в обратную сторону ответ из 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 на телефоне не нужно. Переписка остаётся в двух местах, но смотреть приходится в одном.

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

Расскажите о задаче

Пара фраз и ссылка на сайт, если он уже есть. Отвечаю сам: задам вопросы, назову срок и цену.

Заказать похожее

Ещё посты