Skip to content

ilcommm/Max2iMessage

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Max2iMessage

Max2iMessage

macOS menu bar app that forwards MAX messenger notifications to iMessage and Email.

⚠️ Разработка и поддержка временно приостановлены

Поддержка и разработка Max2iMessage временно приостановлены. В мессенджере MAX появилась возможность получать уведомления на iPhone без Mac: достаточно добавить web.max.ru на экран «Домой» через Safari и включить push-уведомления в веб-версии.

Инструкция: Как вернуть уведомления в мессенджере MAX на iPhone (iPhones.ru)

Репозиторий и последний релиз (v1.7) остаются доступными «как есть». Если официальная веб-версия MAX перестанет удовлетворять вашим задачам — напишите на ilcommm@gmail.com.


Нативное macOS-приложение (Menu Bar), которое отслеживает новые сообщения в веб-версии MAX и пересылает уведомления через iMessage и/или Email.

Все вычисления выполняются локально на вашем Mac. Пароли MAX не сохраняются.

Возможности

  • Несколько аккаунтов MAX — у каждого свой получатель
  • Пересылка в iMessage, Email или оба канала одновременно
  • Ручная авторизация через встроенный WKWebView
  • Событийный мониторинг входящих сообщений (перехват WebSocket, opcode 128)
  • Защита от дублей (персистентное хранение обработанных message ID)
  • Журнал событий в файле (только в Debug-сборке при выключенном режиме приватности)
  • Автопереподключение при сетевых ошибках
  • Автозапуск при входе в macOS (опционально)
  • Умная пересылка — настраиваемая задержка и пропуск уже просмотренных в MAX сообщений (на любом устройстве)
  • Настраиваемая задержка перед отправкой (0–60 с, по умолчанию 1.5 с)
  • Режим приватности — в собранной версии включён всегда: скрывает интерфейс MAX после входа, не пишет журнал
  • Формат пересылки — полный текст или только «Имя написал(а) в MAX» (на каждый аккаунт)
  • Фильтры: свои сообщения, групповые чаты, заглушённые чаты, вложения без текста
  • Ответы в MAX через iMessage (бета) — ответьте на пересланное уведомление с iPhone или Apple Watch, и текст уйдёт в MAX (последнему личному диалогу или автору пузыря при inline-reply)
  • Подтверждение ответа в iMessage — опциональное «Отправил сообщение … в MAX» после успешной отправки
  • Полное имя отправителя — в пересылке используется имя и фамилия из MAX, если доступны

Что нового в 1.7

  • Маршрутизация ответов: inline-reply на конкретный пузырь → отправителю этого сообщения; обычный ответ → последнему личному диалогу (бот-каналы с отрицательным chatId не перехватывают адресата)
  • Невидимый маркер на исходящих iMessage от приложения — пересылки и подтверждения не считаются ответом пользователя
  • Улучшено чтение текста из chat.db (attributedBody, повторная проверка пустых строк)
  • Настройка «Подтверждение ответа в iMessage» в Настройки → Ответы в MAX

Ответы в MAX через iMessage (бета)

Экспериментальная функция. Протокол MAX непубличный; поведение может измениться.

Двусторонний мост для личных чатов: MAX → iMessage → быстрый ответ → MAX.

  1. В Настройки → Пересылка укажите получателя iMessage (телефон или Apple ID).
  2. В Настройки → Ответы в MAX включите «Разрешить ответы в MAX через iMessage».
  3. Выдайте Full Disk Access (Полный доступ к диску) для Max2iMessage — без этого Mac не сможет прочитать входящий ответ из Messages.
  4. После пересылки уведомления ответьте в iMessage с iPhone или Apple Watch (Quick Reply).
  5. Текст отправится в MAX:
    • при ответе на конкретный пузырь (inline-reply) — автору этого сообщения;
    • при обычном сообщении в чат — последнему пересланному личному диалогу (в пределах окна ответа, по умолчанию 10 мин).
  6. Опционально: включите Подтверждение ответа в iMessage — после отправки в MAX придёт «Отправил сообщение … в MAX».
Условие Подробнее
Mac включён Max2iMessage запущен, сессия MAX Online
Только iMessage Email не поддерживает quick reply
Личные чаты Групповые чаты MAX по-прежнему фильтруются
Личный диалог vs бот Пересылки из бот-каналов не заменяют адресата ответа; приоритет у личных диалогов (положительный chatId)
Inline-reply Ответ на пузырь пересылки маршрутизируется к его отправителю, даже если после него пришли другие уведомления

Статус ответа отображается в menu bar и в настройках аккаунта («Ожидает ответ», «Ответ отправлен в MAX»).

Требования

  • macOS 15.6+
  • Для iMessage: приложение Messages с настроенным iMessage
  • Для Email: приложение Mail с настроенным исходящим аккаунтом
  • Аккаунт MAX (web.max.ru)

Установка (без Xcode)

  1. Скачайте Max2iMessage-v1.7-macos.zip из Releases
  2. Распакуйте архив и перетащите Max2iMessage.app в папку «Программы»
  3. При первом запуске macOS может заблокировать приложение — откройте Системные настройки → Конфиденциальность и безопасность и нажмите Всё равно открыть, либо щёлкните по .app правой кнопкой → Открыть
  4. Дальше следуйте разделу Первый запуск

Сборка подписана development-сертификатом и не проходит notarization Apple — это нормально для open-source релиза без платного Developer ID.

Сборка из исходников

Требуется Xcode 16+.

  1. Откройте Max2iMessage/Max2iMessage.xcodeproj в Xcode
  2. Выберите target Max2iMessage
  3. Убедитесь, что в Signing & Capabilities указана ваша Development Team
  4. Соберите и запустите (Cmd+R)

Несколько аккаунтов (семья, близкие)

Каждый аккаунт MAX — отдельная сессия и свой получатель (телефон, Apple ID или email).

  1. В меню выберите Добавить аккаунт… (или в настройках нажмите +)
  2. Задайте название, например «Мама» или «Жена»
  3. В Настройки → Пересылка выберите канал и укажите получателя
  4. Нажмите Войти в MAX для этого аккаунта и авторизуйтесь в MAX (QR-код с телефона близкого человека)
  5. Повторите для каждого человека

В меню отображаются все аккаунты со статусом. Сообщения из каждого MAX пересылаются только своему получателю.

Совет для общего Mac: в Настройки → Формат сообщения выберите «Только уведомление» — на этом компьютере не будет сохраняться текст чужих переписок, уведомление получателю всё равно придёт.

Режим приватности

В собранной версии (скачанной из Releases) режим приватности включён всегда и не отключается. Он нужен, если на одном Mac настроены аккаунты близких и вы не хотите, чтобы кто-то мог просмотреть их диалоги MAX или журнал приложения.

Что делает Подробнее
Скрывает MAX после входа Интерфейс web.max.ru доступен только для авторизации; после входа окно закрывается
Нет журнала Файл app.log не создаётся, пункт «Открыть логи» скрыт
Нет диагностики Отключены chat_raw, pipeline_trace и просмотр MAX в настройках
Фоновая отправка iMessage и Email отправляются в фоне, без активации Messages/Mail

При запуске из Xcode (Debug-сборка) режим можно включать и выключать в Настройки → Приложение → Режим приватности — для отладки.

Пересылка: iMessage и Email

В Настройки → Пересылка для каждого аккаунта:

Канал Куда уходит Что нужно
iMessage Телефон или Apple ID на iPhone Messages с iMessage
Email Адрес получателя Mail с исходящим аккаунтом
iMessage и Email Оба канала Оба приложения настроены

Получателя можно выбрать из контактов macOS (телефон или email).

Формат сообщения

В Настройки → Формат сообщения для каждого аккаунта:

  • Полный текстИмя: текст сообщения (по умолчанию, удобно если пользуетесь сами)
  • Только уведомлениеИмя написал(а) в MAX — текст сообщения не передаётся

Для Email тема письма: MAX: Имя отправителя.

Умная пересылка и задержка

По умолчанию включена в Настройки → Фильтры → Умная пересылка.

Если вы уже читаете чат в MAX (в браузере, на телефоне или в переписке с ботом), приложение не будет слать дублирующие уведомления. Перед отправкой оно ждёт заданное время (по умолчанию 1.5 с) и проверяет статус прочтения по данным протокола MAX:

  • mark / unread во входящем пакете сообщения (opcode 128)
  • уведомление о прочтении NOTIF_MARK (opcode 130) — приходит во все сессии, в том числе в скрытый WKWebView Max2iMessage

Задержка перед отправкой (0–60 с) настраивается в Настройки → Фильтры:

  • при умной пересылке — ожидание до проверки прочтения;
  • без умной пересылки — просто пауза перед отправкой;
  • 0 — без задержки (мгновенная пересылка).

Первый запуск

  1. В строке меню появится иконка Max2iMessage
  2. Откройте Настройки, выберите канал пересылки и укажите получателя (телефон, email или выбор из контактов)
  3. Нажмите Войти в MAX и авторизуйтесь на web.max.ru
  4. После входа статус аккаунта станет Online
  5. При первой отправке macOS запросит разрешение Automation для Messages и/или Mail — разрешите

Разрешения macOS

Разрешение Зачем
Automation → Messages Отправка iMessage через AppleScript
Automation → Mail Отправка Email через AppleScript
Full Disk Access Чтение входящих ответов iMessage (только для бета-функции «Ответы в MAX»)
Contacts ��ыбор получателя из контактов
Network Подключение к web.max.ru

Путь к логам (только если режим приватности выключен, например в Debug из Xcode): ~/Library/Logs/Max2iMessage/app.log

Данные приложения: ~/Library/Application Support/Max2iMessage/

Smoke-test чеклист

  • Приложение запускается как Menu Bar app (без иконки в Dock)
  • Меню показывает статус аккаунта и счётчики за сегодня
  • Окно «Войти в MAX» открывает web.max.ru и сохраняет сессию после перезапуска
  • В Release-сборке после входа окно MAX закрывается, повторно открыть интерфейс нельзя (пока Online)
  • После входа статус меняется на Online
  • Входящее сообщение MAX пересылается в выбранный канал (iMessage / Email) в заданном формате
  • Повторная отправка того же сообщения после рестарта не происходит
  • Фильтр «свои сообщения» не пересылает исходящие
  • «Умная пересылка»: прочитанное в MAX не уходит; непрочитанное — после задержки
  • Настраиваемая задержка работает (0 = мгновенно, 1.5 с = по умолчанию)
  • При отключении сети статус переходит в Reconnecting и восстанавливается
  • «Только уведомление» отправляет Имя написал(а) в MAX без текста сообщения
  • Режим «iMessage и Email» отправляет на оба канала
  • В Release-сборке app.log не создаётся, «Открыть логи» скрыт
  • В Debug из Xcode при выключенном режиме приватности события пишутся в app.log
  • Toggle автозапуска работает (Системные настройки → Общие → Объекты входа)
  • «Ответы в MAX (бета)»: пересылка → quick reply в iMessage → сообщение уходит в MAX (личный диалог или inline-reply на пузырь)
  • Бот-каналы между пересылкой и ответом не перехватывают адресата личного диалога
  • Подтверждение «Отправил сообщение … в MAX» (если включено в настройках)
  • Full Disk Access выдан, в настройках «Доступ к Messages: есть»

Архитектура

MenuBarView → AppState → AccountManager → AccountRuntime (per account)
                                              ├── MaxWebSession (WKWebView)
                                              ├── max-monitor.js (WS hook, send opcode 64)
                                              ├── DedupStore
                                              ├── MessageForwarder (AppleScript → Messages / Mail)
                                              ├── BridgeMessageMarker
                                              ├── LastReplyStore (inline-reply index)
                                              └── IMessagesDatabaseMonitor (chat.db, ответы)

Мониторинг сообщений: injected JS перехватывает WebSocket-пакеты страницы MAX и отправляет NOTIF_MESSAGE (opcode 128) и NOTIF_MARK (opcode 130) в Swift через WKScriptMessageHandler. Умная пересылка в AccountRuntime откладывает отправку и сверяет mark с позицией прочтения. Ответы (бета): IMessagesDatabaseMonitor ��итает входящий iMessage из ~/Library/Messages/chat.db, исходящие пересылки помечаются невидимым префиксом (BridgeMessageMarker), LastReplyStore хранит индекс пузырей для inline-reply; max-monitor.js отправляет текст обратно в MAX через WebSocket opcode 64.

Ограничения

  • Протокол MAX не является публичным API и может измениться
  • Для стабильной работы требуется активная сессия web.max.ru
  • Отправка iMessage зависит от приложения Messages и разрешения Automation
  • Отправка Email зависит от приложения Mail, настроенного исходящего аккаунта и разрешения Automation
  • Ответы в MAX (бета) требуют Full Disk Access, включённого Mac и работающей сессии MAX; ответ с часов идёт через iMessage на Mac, а не напрямую в MAX

Контакты

Developer: Ilya Kleshnin
Email: ilcommm@gmail.com

Лицензия

MIT

About

macOS menu bar app: forward MAX messenger notifications to iMessage (multi-account, local-only)

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors