Vaysed · Telegram Bot · 2026

Lumos

Асинхронний Telegram-бот для моніторингу графіків відключень електроенергії

PythonaiogramMongoDBaiohttpcurl_cffi
Scroll to explore
Проблема

Чому існуючі рішення не працюють

Користувачі змушені страждати через фрагментованість і ненадійність публічних сервісів.

Нестабільні API

Сайти обленерго регулярно "падають" під навантаженням, а офіційні API повертають 5xx у пікові години.

Issue · 01

Незручний пошук

Складно щодня шукати свою чергу вручну через громіздкі таблиці та довідники адрес.

Issue · 02

Брак оперативності

Відсутність проактивних push-сповіщень — людина дізнається про відключення вже у темряві.

Issue · 03
Рішення

Один бот. Усе під контролем.

Lumos об'єднує дані з декількох обленерго в єдиний асинхронний сервіс із розумними сповіщеннями.

Миттєві Push-сповіщення

Бот опитує API за розкладом та надсилає повідомлення тільки коли графік справді змінився — без спаму.

Avatar
ЛЮМОС | ГРАФІКИ ВІДКЛЮЧЕНЬ
21:42
🔄 Оновлено графік на 13.05.2026 (15 год 30 хв)
Середа
🔢 Черга: 3.2
🔴 07:30 - 15:00 (7 год 30 хв)🔴 15:30 - 23:30 (8 год)

Розумні нагадування

Grace period і дедуплікація запобігають дублям та зайвим сповіщенням.

  • Grace period · 5 хв
  • State hashing
  • Дедуплікація

FSM Пошук

Багатокроковий пошук за адресою через скінченний автомат aiogram.

Місто
Вулиця
Будинок
Черга

Zero Downtime

Повністю асинхронна архітектура на asyncio з health-check на порту 8080.

99.9% uptime
/ healthz · 200 OK
Архітектура

Як це працює всередині

Чотири незалежних шари, які спілкуються через асинхронні черги та HTTP.

Client
Telegram
UsersInline-кнопкиPush API
Application
aiogram · aiohttp · :8080
FSM RouterSchedulersHealth-check
External APIs
Ivano-Frankivsk · Lviv
curl_cffiSOCKS5 proxyBS4 parser
Database
MongoDB · Motor
usersschedule_statereminders
Технічні виклики

Складні задачі та як ми їх вирішили

Три неочевидних інженерних виклики, що визначили архітектуру проєкту.

Challenge 01
Cloudflare WAF Blocking
Problem

Сайт обленерго блокував усі запити з Python (`requests`/`httpx`) як підозрілий трафік.

Solution
curl_cffi + impersonate=chrome120

Перейшли на curl_cffi з імітацією TLS-фінгерпринта Chrome 120 та маршрутизацію через SOCKS5-проксі. Bypass — 100%.

curl_cffiSOCKS5TLS fingerprint
Roadmap

Що було. Що далі.

Phase 1shipped

MVP — Ivano-Frankivsk

Перший реліз: парсинг API Прикарпаттяобленерго, базові команди /start, /search.

Telegram aiogram botMongo storageCron polling
Phase 2shipped

Scaling to Lviv + Smart Reminders

Додано Львівську область, FSM-пошук, дедуплікація сповіщень і grace period.

BS4 HTML parserState hashingSmart reminders
Phase 3in progress

Microservices + React Frontend

Розбиття на сервіси (notifier, parser, api-gateway) та публічний веб-інтерфейс.

FastAPI gatewayReact dashboardK8s deploy