# πŸ“‘ TelecomKz Analytics Mapper & Visual Simulator Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ симулятор мобильного прилоТСния **ΠšΠ°Π·Π°Ρ…Ρ‚Π΅Π»Π΅ΠΊΠΎΠΌ (TelecomKz**, `kz.telecom.app`**)** для ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π° экранов, ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΈ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ Amplitude / ClickHouse. πŸ‘‰ ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ β€” Π² [PROJECT_DOCUMENTATION.md](PROJECT_DOCUMENTATION.md). --- ## ⚑ Быстрый старт ```bash npm install py -m pip install opencv-python numpy pillow websockets requests npm run dev ``` ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ **http://localhost:5173**. ВрСбования: Node.js 18+, Python 3.10+, Android-смартфон с Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½ΠΎΠΉ ΠΎΡ‚Π»Π°Π΄ΠΊΠΎΠΉ ΠΏΠΎ USB ΠΈ **ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ Π½Π° ΠΏΠ΅Ρ€Π΅Π΄Π½Π΅ΠΌ ΠΏΠ»Π°Π½Π΅** ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ TelecomKz. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈ Π±Π΅Π· Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°: экраны ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠ° Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ ΠΈΠ· `public/data/telecomkz_app_map.json`, Π° панСль свСрху чСстно ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Β«Π’Π΅Π»Π΅Ρ„ΠΎΠ½ Π½Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Β». --- ## 🧭 Π§Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ Π”Π²Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ° достовСрности, ΠΎΠ±Π° Π²ΠΈΠ΄Π½Ρ‹ Π² интСрфСйсС. **1. Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ** (`metrics.json` β†’ ΠΏΠΎΠ»Π΅ `source`) | Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ | Π§Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ | |---|---| | `clickhouse` | Числа Π²Ρ‹Π³Ρ€ΡƒΠΆΠ΅Π½Ρ‹ ΠΈΠ· ClickHouse Ρ‡Π΅Ρ€Π΅Π· `tools/fetch_clickhouse.py`. | | `demo` | **ДСмонстрационныС значСния.** Π­Ρ‚ΠΎ Π½Π΅ Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠ°. | Π’ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π»Π΅ΠΆΠΈΡ‚ `demo`. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ, скопируйтС `.env.example` Π² `.env`, ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ `CLICKHOUSE_HOST` ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅: ```bash py tools/fetch_clickhouse.py --days 30 ``` Π₯отспот, ΠΊΠ»ΡŽΡ‡Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅Ρ‚ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, **Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ Π²ΠΎΠΎΠ±Ρ‰Π΅** β€” Π² Ρ‚ΡƒΠ»Ρ‚ΠΈΠΏΠ΅ ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ «НСт Π΄Π°Π½Π½Ρ‹Ρ…Β». Ноль вмСсто этого читался Π±Ρ‹ ΠΊΠ°ΠΊ Β«Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ‚Β». **2. Π”ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€Π½ΠΎΡΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π° события** (`keyConfidence` Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ хотспота) | Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ | Π§Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ | |---|---| | `observed` | ΠšΠ»ΡŽΡ‡ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‡Π΅Π½ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΈΠ· прилоТСния. **Волько это β€” настоящий ΠΊΠ»ΡŽΡ‡.** | | `dom-attribute` | Взят ΠΈΠ· Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° `data-event` / `data-analytics` Π² DOM. | | `manual` | Π—Π°Π΄Π°Π½ Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠΎΠΌ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. | | `rule` | Π’Ρ‹Π²Π΅Π΄Π΅Π½ ΠΈΠ· подписи ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΏΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ `EVENT_RULES`. НС ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½. | | `guessed` | ВранслитСрирован ΠΈΠ· подписи, ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π½Π΅ сработало. НС ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½. | ⚠️ ΠšΠ»ΡŽΡ‡ΠΈ Π²ΠΈΠ΄Π° `PAYMENTS_CLICK` Π² поставляСмой Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠ΅ ΠΈΠΌΠ΅ΡŽΡ‚ статус `rule` β€” это **соглашСниС этого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π° Π½Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ прилоТСния**. Π Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ, снятыС с ΠΆΠΈΠ²ΠΎΠ³ΠΎ прилоТСния, выглядят ΠΈΠ½Π°Ρ‡Π΅: `HOMEPAGEPAYMENTS`, `OPENWINDOWPAYMENT`. Пока ΠΊΠ»ΡŽΡ‡ Π½Π΅ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Ρ‘Π½ Π² `observed`, join с ClickHouse Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π²Π΅Ρ€Π½Ρ‘Ρ‚. Π‘Π½ΡΡ‚ΡŒ настоящиС ΠΊΠ»ΡŽΡ‡ΠΈ: ```bash py tools/monitor_live_events.py --seconds 120 --map main_dashboard ``` ΠŸΠΎΡ‚Ρ‹ΠΊΠ°ΠΉΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π½Π° Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π΅ β€” ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΠΉΠΌΠ°Π½Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Π² Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΡƒ со статусом `observed`. --- ## πŸ›  Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ | Π‘ΠΊΡ€ΠΈΠΏΡ‚ | НазначСниС | |---|---| | `tools/telecom_cdp.py` | ΠžΠ±Ρ‰Π΅Π΅ ядро: ADB, поиск сокСта WebView, CDP-ΠΊΠ»ΠΈΠ΅Π½Ρ‚, гСомСтрия экрана. | | `tools/capture_screen.py` | Π‘Π½ΠΈΠΌΠΎΠΊ экрана со сшивкой всСй ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ + Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠ° хотспотов. | | `tools/live_auto_recorder.py` | Быстрая пСрСсборка хотспотов ΠΎΠ΄Π½ΠΎΠ³ΠΎ экрана ΠΏΠΎ ΠΆΠΈΠ²ΠΎΠΌΡƒ DOM. | | `tools/monitor_live_events.py` | ΠŸΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… событий Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠΈ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ наТатия. | | `tools/crawl_and_map_all.py` | Автообход Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² с Π·Π°Ρ…Π²Π°Ρ‚ΠΎΠΌ экранов ΠΈ событий. | | `tools/fetch_clickhouse.py` | Π’Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ ΠΈΠ· ClickHouse. | | `tools/map_screen_controls.py` | ΠžΠ±Ρ…ΠΎΠ΄ всСх ΠΊΠ½ΠΎΠΏΠΎΠΊ экрана: снятиС Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ + Π·Π°Ρ…Π²Π°Ρ‚ экранов, ΠΊΡƒΠ΄Π° ΠΎΠ½ΠΈ Π²Π΅Π΄ΡƒΡ‚. | | `tools/reclassify_hotspots.py` | ΠŸΠ΅Ρ€Π΅ΡΡ‡Ρ‘Ρ‚ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, дСдупликация ΠΈ чистка ΠΌΡ‘Ρ€Ρ‚Π²Ρ‹Ρ… ссылок Π±Π΅Π· Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°. | | `tools/rename_screen.py` | ΠŸΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ снятого экрана вмСстС с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈ ссылками. | | `tools/inspect_page.py` | Диагностика WebView (Amplitude, мосты, Vue, storage). | | `tools/device_status.py` | ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Β«Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ + WebView доступны». | Π‘ΠΊΡ€ΠΈΠΏΡ‚Ρ‹ Π² `tools/legacy/` Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ β€” см. `tools/legacy/README.md`. --- ## πŸ—ΊοΈ Π­ΠΊΡ€Π°Π½Ρ‹ ΠΈ Ρ€Π΅ΠΆΠΈΠΌΡ‹ ΡΡŠΡ‘ΠΌΠΊΠΈ | Π­ΠΊΡ€Π°Π½ | ΠœΠ°Ρ€ΡˆΡ€ΡƒΡ‚ / ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ | Команда | |---|---|---| | Π“Π»Π°Π²Π½Ρ‹ΠΉ | `/` | `py tools/capture_screen.py main_dashboard` | | Мои услуги | `/services` | `py tools/capture_screen.py services_screen` | | Π’Ρ€Π°Ρ„ΠΈΠΊ | `/detalization` | `py tools/capture_screen.py traffic_screen` | | ΠŸΠ»Π°Ρ‚Π΅ΠΆΠΈ | `/payments` | `py tools/capture_screen.py payments_screen` | | Заявки | `/appeals` | `py tools/capture_screen.py orders_screen` | | Π‘ΠΎΠΊΠΎΠ²ΠΎΠ΅ мСню | `/` (ΠΎΠ²Π΅Ρ€Π»Π΅ΠΉ) | `py tools/capture_screen.py side_menu --no-scroll` | | ΠœΡƒΠ·Ρ‹ΠΊΠ° | Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ экран | `py tools/capture_screen.py music_screen --native` | * `--no-scroll` β€” для ΠΎΠ²Π΅Ρ€Π»Π΅Π΅Π²: ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠ° Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π±ΠΎΠΊΠΎΠ²ΠΎΠ΅ мСню. * `--native` β€” для экранов Π±Π΅Π· WebView: Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠ° бСрётся ΠΈΠ· `uiautomator`. ΠŸΠΎΠ»Π½Ρ‹ΠΉ ΠΎΠ±Ρ…ΠΎΠ΄ экрана (ΠΊΠ»ΡŽΡ‡ΠΈ + экраны назначСния ΠΎΠ΄Π½ΠΈΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΎΠΌ): ```bash py tools/map_screen_controls.py payments_screen --via "ΠŸΠ»Π°Ρ‚Π΅ΠΆΠΈ" --capture-new ``` Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ сам возвращаСтся Π½Π°Π·Π°Π΄ **Π²Π½ΡƒΡ‚Ρ€ΠΈ WebView** (`history.back()`), Π° Π½Π΅ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ: Ρ‚Π° Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ запрос ΠΏΠΈΠ½-ΠΊΠΎΠ΄Π°. Π‘ΡŠΡ‘ΠΌΠΊΠ° **Π½Π΅ стираСт** ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Ρ‘Π½Π½Ρ‹Π΅ (`observed`) ΠΊΠ»ΡŽΡ‡ΠΈ β€” ΠΎΠ½ΠΈ пСрСносятся ΠΏΠΎ подписи элСмСнта. ΠŸΠ΅Ρ€Π΅ΡΡŠΡ‘ΠΌ бСзопасСн. --- ## 🌟 ВозмоТности - Мокап смартфона с ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΎΠΉ Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… экранов ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°ΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π΄Π΅Π»Π°ΠΌΠΈ. - Π’ΡƒΠ»Ρ‚ΠΈΠΏΡ‹ с ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠ°ΠΌΠΈ Amplitude/ClickHouse ΠΈ явной ΠΏΠΎΠΌΠ΅Ρ‚ΠΊΠΎΠΉ источника. - ВСпловая ΠΊΠ°Ρ€Ρ‚Π° ΠΊΠ»ΠΈΠΊΠΎΠ²; Π·ΠΎΠ½Ρ‹ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ сСрыми, Π° Π½Π΅ Β«Ρ…ΠΎΠ»ΠΎΠ΄Π½Ρ‹ΠΌΠΈΒ». - Π Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ с сохранСниСм **Π½Π° диск** (`Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΡƒ Π½Π° диск`), Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ Ρ„Π°ΠΉΠ»Π°. - Π—Π°Ρ…Π²Π°Ρ‚ экрана с Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°: сшивка вСдётся ΠΏΠΎ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΡΠΌΠ΅Ρ‰Π΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ, поэтому ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ хотспотов ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ с ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΎΠΉ пиксСль Π² пиксСль. - Π§Ρ‚Π΅Π½ΠΈΠ΅ DOM WebView Ρ‡Π΅Ρ€Π΅Π· Chrome DevTools Protocol ΠΈ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ Ρ‡Π΅Ρ€Π΅Π· `uiautomator` β€” Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Ρ‚ΡƒΠ»Π±Π°Ρ€Π° ΠΈ Ρ‚Π°Π±-Π±Π°Ρ€Π° ΠΈΠ·ΠΌΠ΅Ρ€ΡΡŽΡ‚ΡΡ, Π° Π½Π΅ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ константами.