tg2max-relay: peresylka otchyotov report-shot v MAX (lichnyy akkaunt, vkmax)

This commit is contained in:
khadzhibekovpa
2026-09-17 17:17:18 +03:00
commit 36cf1060d7
11 changed files with 542 additions and 0 deletions
+72
View File
@@ -0,0 +1,72 @@
# 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 <chatId> # проверить отправку
```
Для «Избранного» в качестве `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** (`external: true`). Имя тома
привязано к UUID приложения report-shot
(`n51q832cjhizblqwbibgjxsc_report-shot-output`). Если report-shot будет
пересоздан с новым uuid — поправьте имя тома здесь и 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-ключей.