# tg2max-relay Ретранслятор отчётов **report-shot** в мессенджер **MAX** от имени **личного аккаунта MAX** (без бизнес-бота). Работает в паре с [ReportEvryDay](https://gittea.khad1997pav.ru/khadzhibekovpa/ReportEvryDay) и **не изменяет** его: просто читает тот же docker-volume с PDF-отчётами и хвост лога (для предупреждений о сбоях). ## Как это работает ``` report-shot (тот же сервер) tg2max-relay writes /app/output/*.pdf ─volume─▶ видит новый otchet_YYYY-MM-DD.pdf writes report_shot.log шлёт файл+подпись в MAX (vkmax, личный аккаунт, wss ws-api.oneme.ru) строки ALERT_RE из лога → текстом ``` - `vkmax` (unofficial user-client MAX, GitHub main) — `send_message` / `send_file`. - Сессия MAX (`device_id` + `login_token`) получается один раз **на своём ПК** и переносится в переменные Coolify. На сервере ничего интерактивного не нужно. ## 1. Активация MAX-сессии (один раз, на Windows-ПК) ```powershell cd C:\scripts\tg2max-relay py -m venv .venv .\.venv\Scripts\activate pip install -r requirements.txt python -m app.login --phone +7999XXXXXXX # введите код из приложения/SMS MAX → сохранится max_session.json python -m app.login --chats # посмотреть chatId (для MAX_TARGET_CHAT) python -m app.login --test # проверить отправку ``` Для «Избранного» в качестве `MAX_TARGET_CHAT` используется собственный user id (скрипт подскажет его). ## 2. Deploy в Coolify (рядом с report-shot) Создано как приложение в том же проекте **Report** (build pack dockercompose). Переменные в **Variables**: | Переменная | Значение | |---|---| | MAX_DEVICE_ID | из шага 1 | | MAX_LOGIN_TOKEN | из шага 1 | | MAX_TARGET_CHAT | chatId (Избранное: свой user id) | | TZ | Europe/Moscow | compose монтирует volume отчётов **read-only** bind-путью хоста (`/var/lib/docker/volumes/_report-shot-output/_data` → `/watch`). Если report-shot пересоздан с новым uuid — поправьте путь (или задайте `REPORT_VOLUME_PATH` переменной) и сделайте redeploy. ## 3. Поведение - При первом запуске текущее содержимое volume помечается как отправленное (история не дублируется), шлётся только «🟢 на связи». - Каждый новый `otchet_*.pdf` (файл дописался и молчит ≥ poll_interval) → `send_file` с подписью «данные за <вчера>». - Строки `report_shot.log`, попадающие под `ALERT_RE` (сбои, неполный отчёт) → текстом в тот же чат. - Захлебнулся WS/MAX — ретраи 2× и переподключение в следующем цикле; сбой цикла не роняет контейнер. Без `MAX_DEVICE_ID/MAX_LOGIN_TOKEN/MAX_TARGET_CHAT` контейнер живёт, но сообщает в логе, что вход невозможен. ## Переменные См. `.env.example`. Всё опционально, кроме трёх MAX-ключей.