73 lines
3.7 KiB
Markdown
73 lines
3.7 KiB
Markdown
# 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-ключей.
|