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, если доступны
- Маршрутизация ответов: inline-reply на конкретный пузырь → отправителю этого сообщения; обычный ответ → последнему личному диалогу (бот-каналы с отрицательным
chatIdне перехватывают адресата) - Невидимый маркер на исходящих iMessage от приложения — пересылки и подтверждения не считаются ответом пользователя
- Улучшено чтение текста из
chat.db(attributedBody, повторная проверка пустых строк) - Настройка «Подтверждение ответа в iMessage» в Настройки → Ответы в MAX
Экспериментальная функция. Протокол MAX непубличный; поведение может измениться.
Двусторонний мост для личных чатов: MAX → iMessage → быстрый ответ → MAX.
- В Настройки → Пересылка укажите получателя iMessage (телефон или Apple ID).
- В Настройки → Ответы в MAX включите «Разрешить ответы в MAX через iMessage».
- Выдайте Full Disk Access (Полный доступ к диску) для Max2iMessage — без этого Mac не сможет прочитать входящий ответ из Messages.
- После пересылки уведомления ответьте в iMessage с iPhone или Apple Watch (Quick Reply).
- Текст отправится в MAX:
- при ответе на конкретный пузырь (inline-reply) — автору этого сообщения;
- при обычном сообщении в чат — последнему пересланному личному диалогу (в пределах окна ответа, по умолчанию 10 мин).
- Опционально: включите Подтверждение ответа в 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)
- Скачайте Max2iMessage-v1.7-macos.zip из Releases
- Распакуйте архив и перетащите Max2iMessage.app в папку «Программы»
- При первом запуске macOS может заблокировать приложение — откройте Системные настройки → Конфиденциальность и безопасность и нажмите Всё равно открыть, либо щёлкните по
.appправой кнопкой → Открыть - Дальше следуйте разделу Первый запуск
Сборка подписана development-сертификатом и не проходит notarization Apple — это нормально для open-source релиза без платного Developer ID.
Требуется Xcode 16+.
- Откройте
Max2iMessage/Max2iMessage.xcodeprojв Xcode - Выберите target Max2iMessage
- Убедитесь, что в Signing & Capabilities указана ваша Development Team
- Соберите и запустите (
Cmd+R)
Каждый аккаунт MAX — отдельная сессия и свой получатель (телефон, Apple ID или email).
- В меню выберите Добавить аккаунт… (или в настройках нажмите +)
- Задайте название, например «Мама» или «Жена»
- В Настройки → Пересылка выберите канал и укажите получателя
- Нажмите Войти в MAX для этого аккаунта и авторизуйтесь в MAX (QR-код с телефона близкого человека)
- Повторите для каждого человека
В меню отображаются все аккаунты со статусом. Сообщения из каждого MAX пересылаются только своему получателю.
Совет для общего Mac: в Настройки → Формат сообщения выберите «Только уведомление» — на этом компьютере не будет сохраняться текст чужих переписок, уведомление получателю всё равно придёт.
В собранной версии (скачанной из Releases) режим приватности включён всегда и не отключается. Он нужен, если на одном Mac настроены аккаунты близких и вы не хотите, чтобы кто-то мог просмотреть их диалоги MAX или журнал приложения.
| Что делает | Подробнее |
|---|---|
| Скрывает MAX после входа | Интерфейс web.max.ru доступен только для авторизации; после входа окно закрывается |
| Нет журнала | Файл app.log не создаётся, пункт «Открыть логи» скрыт |
| Нет диагностики | Отключены chat_raw, pipeline_trace и просмотр MAX в настройках |
| Фоновая отправка | iMessage и Email отправляются в фоне, без активации Messages/Mail |
При запуске из Xcode (Debug-сборка) режим можно включать и выключать в Настройки → Приложение → Режим приватности — для отладки.
В Настройки → Пересылка для каждого аккаунта:
| Канал | Куда уходит | Что нужно |
|---|---|---|
| iMessage | Телефон или Apple ID на iPhone | Messages с iMessage |
| Адрес получателя | 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 — без задержки (мгновенная пересылка).
- В строке меню появится иконка Max2iMessage
- Откройте Настройки, выберите канал пересылки и укажите получателя (телефон, email или выбор из контактов)
- Нажмите Войти в MAX и авторизуйтесь на web.max.ru
- После входа статус аккаунта станет Online
- При первой отправке macOS запросит разрешение Automation для Messages и/или Mail — разрешите
| Разрешение | Зачем |
|---|---|
| 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/
- Приложение запускается как 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
