Files
btgo-playwright/TELEGRAM_BOT_SETUP.md
2025-11-06 20:55:35 +02:00

381 lines
9.6 KiB
Markdown

# Telegram Trigger Bot - Setup Guide
## Prezentare
Telegram Trigger Bot permite declanșarea BTGO Scraper-ului de la distanță prin comenzi Telegram. Perfect pentru VM Windows 11.
**⚠️ IMPORTANT:** VM-ul Windows 11 TREBUIE să aibă:
- Remote Desktop session activă (sau user logat)
- Browser vizibil (HEADLESS=false)
- WAF-ul BT blochează browsere headless!
## Cum Funcționează
```
Tu (Telegram) → Bot → Rulează scraper → Trimite CSV-uri înapoi
```
## Setup Pas cu Pas
### 1. Configurare Bot Telegram
**Dacă ai deja bot pentru notificări:** Poți folosi același bot!
**Dacă NU ai bot:**
1. Deschide Telegram și caută **@BotFather**
2. Trimite `/newbot`
3. Alege nume pentru bot (ex: "BTGO Scraper Bot")
4. Copiază **token-ul** primit (ex: `123456789:ABCdefGHIjklMNOpqrs`)
### 2. Obține User ID-ul Tău
Ai nevoie de User ID pentru securitate (doar tu poți rula scraper-ul).
**Opțiunea A - Folosește bot existent:**
```bash
python get_telegram_chat_id.py
```
Vei vedea: `User ID: 123456789`
**Opțiunea B - Folosește @userinfobot:**
1. Caută `@userinfobot` în Telegram
2. Trimite `/start`
3. Copiază User ID-ul
### 3. Setup pentru Grup Telegram (RECOMANDAT)
**Avantaj:** Comenzi și rezultate în același grup - mai convenabil decât mesaje directe!
#### 3.1. Adaugă Bot-ul în Grup
1. **Deschide grupul Telegram** unde vrei să trimiți comenzi
2. **Adaugă bot-ul:**
- Click pe numele grupului → "Add Members"
- Caută bot-ul tău (ex: "BTGO Scraper Bot")
- Adaugă
3. **Configurare Privacy Mode (important!):**
Bot-ul trebuie să vadă comenzile din grup. Ai 2 opțiuni:
**Opțiunea A - Dezactivează Privacy Mode (RECOMANDAT):**
```
1. Deschide @BotFather în Telegram
2. Trimite /mybots
3. Selectează bot-ul tău
4. Bot Settings → Group Privacy → Turn OFF
```
Acum bot-ul vede toate mesajele care încep cu `/` (comenzi)
**Opțiunea B - Fă bot-ul Admin:**
```
1. În grup: Click nume grup → Administrators
2. Add Administrator → Selectează bot-ul
3. Permisiuni minime: nicio permisiune specială necesară
```
Admin bots văd toate mesajele automat.
#### 3.2. Obține Chat ID al Grupului
**Metoda 1 - Cu scriptul helper:**
```bash
python get_telegram_chat_id.py
```
- Trimite `/start` în grup
- Script-ul va afișa: `Chat ID: -1001234567890` (NEGATIV pentru grupuri!)
**Metoda 2 - Manual:**
1. Adaugă `@RawDataBot` în grupul tău temporar
2. Bot-ul va afișa informații despre grup
3. Copiază `chat.id` (va fi negativ, ex: `-1001234567890`)
4. Șterge `@RawDataBot` din grup
### 4. Configurare .env
Editează `.env` și adaugă:
```bash
# Bot token (același ca pentru notificări sau nou)
TELEGRAM_BOT_TOKEN=123456789:ABCdefGHIjklMNOpqrs
# User IDs autorizați (separați prin virgulă)
# DOAR acești useri pot rula /scrape din grup
TELEGRAM_ALLOWED_USER_IDS=123456789,987654321
# Chat ID GRUP pentru notificări automate + răspunsuri comenzi
# IMPORTANT: Negativ pentru grupuri! (ex: -1001234567890)
TELEGRAM_CHAT_ID=-1001234567890
```
**Securitate:**
- `TELEGRAM_ALLOWED_USER_IDS` = doar acești useri pot rula `/scrape` din grup
- Lasă gol dacă vrei ca oricine din grup să poată rula (nesigur!)
- Bot-ul verifică User ID-ul celui care trimite comanda, NU group ID-ul
### 4. Pornire Bot
**Opțiunea 1 - Manual (Test):**
```powershell
deployment\windows\scripts\run_telegram_bot_manual.ps1
```
**Opțiunea 2 - Windows Service (RECOMANDAT pentru VM):**
```powershell
# Deploy complet
deployment\windows\scripts\deploy.ps1
# SAU meniu interactiv
deployment\windows\scripts\menu.ps1
```
**Opțiunea 3 - Manual Python:**
```bash
.venv\Scripts\activate
python telegram_trigger_bot.py
```
**Bot-ul va afișa:**
```
Bot inițializat. Useri autorizați: [123456789]
Bot pornit. Așteaptă comenzi...
```
## Utilizare
### Comenzi Disponibile
**În grupul Telegram (sau DM către bot):**
```
/start - Pornește bot-ul și vezi comenzile
/scrape - ⭐ Rulează scraper-ul (2-3 minute)
/status - Vezi status sistem (ultima rulare, fișiere)
/help - Ajutor utilizare
```
**Securitate:** Doar userii din `TELEGRAM_ALLOWED_USER_IDS` pot rula comenzi!
### Flow Tipic în Grup
1. **Scrii în grup:** `/scrape`
2. **Bot răspunde:** "🤖 BTGO Scraper pornit... Așteaptă 2FA!"
3. **Pe VM:** Browser-ul se deschide, face login automat
4. **Pe telefon:** Aprobă notificarea George 2FA
5. **Scraper trimite fișiere:** Prin notificări automate (email + grup)
6. **Bot confirmă:** "✅ Finalizat! Fișierele au fost trimise automat."
**Notă:** Fișierele sunt trimise de **scraper** (`ENABLE_NOTIFICATIONS=true`), NU de bot. Bot-ul doar declanșează execuția și confirmă finalizarea.
### Exemplu Output în Grup
```
Tu: /scrape
Bot: 🤖 BTGO Scraper pornit...
Așteaptă 2FA pe telefon!
[După 2 minute - mesaje de la scraper prin notificări]
Bot: 📧 BTGO Scraper - Sold conturi actualizat
📄 solduri_2025-11-06.csv
📄 tranzactii_Colector_01.csv
📄 tranzactii_Antreprenor_04.csv
... (toate fișierele)
Bot: ✅ Scraper finalizat cu succes!
📧 Fișierele au fost trimise automat prin notificări.
```
**Important:** Mesajele cu fișiere vin din **scraper** (prin `notifications.py`), nu din bot! Bot-ul doar declanșează și confirmă.
## Setup VM Windows 11
### Cerințe Critice
**⚠️ Browser TREBUIE să fie vizibil!** WAF-ul BT blochează headless.
### Metoda Recomandată - Windows Service
```powershell
# Deploy ca serviciu Windows (auto-start, auto-restart)
deployment\windows\scripts\deploy.ps1
```
**Avantaje:**
- ✅ Pornire automată cu Windows
- ✅ Auto-restart la crash
- ✅ Management prin Services.msc
- ✅ Logging centralizat
- ✅ Nu necesită RDP conectată
**Management:**
```powershell
# Meniu interactiv
deployment\windows\scripts\menu.ps1
# SAU comenzi directe
deployment\windows\scripts\start_service.ps1
deployment\windows\scripts\stop_service.ps1
deployment\windows\scripts\restart_service.ps1
deployment\windows\scripts\status.ps1
```
### Alternativă - Task Scheduler
**Doar dacă nu vrei Windows Service:**
1. Deschide Task Scheduler
2. Create Task
3. **General:**
- Name: "BTGO Telegram Bot"
- Run only when user is logged on: ✅
4. **Triggers:**
- At log on (Specific user)
5. **Actions:**
- Action: Start a program
- Program: `C:\path\to\btgo-playwright\deployment\windows\scripts\run_telegram_bot_manual.ps1`
- Start in: `C:\path\to\btgo-playwright`
6. **Conditions:**
- Dezactivează "Start task only if computer is on AC power"
### Verificare Funcționare
```bash
# Pe VM, verifică că bot-ul rulează
tasklist | findstr python
# Ar trebui să vezi:
# python.exe 12345 Console 1 45,678 K
```
## Troubleshooting
### Bot nu răspunde la comenzi
**Cauză:** Token greșit sau bot nestartă.
**Soluție:**
```bash
# Verifică token-ul
python telegram_trigger_bot.py
# Ar trebui să vezi:
# Bot inițializat. Useri autorizați: [123456789]
```
### "⛔ Acces interzis!"
**Cauză:** User ID-ul tău nu e în `TELEGRAM_ALLOWED_USER_IDS`.
**Soluție:**
```bash
# Verifică User ID-ul tău
python get_telegram_chat_id.py
# Adaugă-l în .env
TELEGRAM_ALLOWED_USER_IDS=123456789
```
### "Access Denied" la scraping
**Cauză:** Browser-ul rulează în headless mode sau VM nu are GUI activă.
**Soluție:**
- Conectează-te prin RDP și LASĂ sesiunea deschisă
- Verifică `.env`: `HEADLESS=false`
- Asigură-te că desktop-ul Windows este vizibil
### Scraper timeout (> 10 minute)
**Cauză:** Probabil blocat la 2FA sau browser nu răspunde.
**Soluție:**
- Verifică logs pe VM: `logs\scraper_*.log`
- Mărește timeout în bot: `timeout=900` (15 min)
- Asigură-te că aprobați 2FA în < 2 minute
### Bot se oprește singur
**Cauză:** Sesiune RDP deconectată sau VM suspended.
**Soluție:**
- Folosește Task Scheduler pentru restart automat
- Configurează VM să nu intre în sleep/hibernate
- Verifică că desktop-ul rămâne activ
## Securitate
**⚠️ ATENȚIE:**
- Bot-ul are acces la credentials din `.env`
- `TELEGRAM_ALLOWED_USER_IDS` TREBUIE configurat!
- Nu partaja token-ul botului
- VM-ul trebuie securizat (firewall, VPN)
**Best Practices:**
```bash
# ✅ Bun - doar tu și admin
TELEGRAM_ALLOWED_USER_IDS=123456789,987654321
# ❌ Rău - oricine cu acces la bot
TELEGRAM_ALLOWED_USER_IDS=
# ✅ Bun - notificări separate de trigger
TELEGRAM_BOT_TOKEN=bot_trigger_token
TELEGRAM_CHAT_ID=group_chat_id
```
## Logs și Monitoring
**Logs bot:**
```
[2025-11-06 17:30:00] [INFO] Bot inițializat. Useri autorizați: [123456789]
[2025-11-06 17:30:05] [INFO] Mesaj de la username (ID: 123456789): /scrape
[2025-11-06 17:30:05] [INFO] Comandă /scrape primită
[2025-11-06 17:30:05] [INFO] Pornire scraper...
[2025-11-06 17:32:45] [INFO] Scraper finalizat cu succes
[2025-11-06 17:32:50] [INFO] Trimit: solduri_2025-11-06.csv
```
**Logs scraper:**
```
logs\scraper_2025-11-06.log
```
## Alternative Trigger Methods
### 1. HTTP API (simplă)
```python
from flask import Flask, request
app = Flask(__name__)
@app.route('/scrape', methods=['POST'])
def trigger_scrape():
# Verifică token secret
subprocess.run(['python', 'btgo_scraper.py'])
```
### 2. Cron Job (periodicitate fixă)
```
Task Scheduler → Daily la 9:00 AM
```
### 3. File Watcher
```python
# Detectează fișier "trigger.txt"
# Rulează scraper automat
```
## Performance
**Timpi tipici:**
- Bot startup: < 5 secunde
- Scraper execution: 2-3 minute
- File upload: 5-10 secunde
- **Total:** ~3-4 minute de la `/scrape` la fișiere primite
**Resource usage (VM):**
- RAM: 500MB (bot) + 800MB (browser)
- CPU: 5-10% idle, 30-40% during scrape
- Network: ~5MB download (CSV-uri)