tg2max-relay: peresylka otchyotov report-shot v MAX (lichnyy akkaunt, vkmax)
This commit is contained in:
@@ -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-ключей.
|
||||
Reference in New Issue
Block a user