# Breaking News Monitor - Kurulum Rehberi

RSS kaynaklarından son dakika haberlerini izleyen, AI ile öncelik analizi yapan, otomatik görsel oluşturan ve Telegram'a gönderen sistem kurulumu.

## 🎯 Özellikler

- ✅ **Çoklu RSS Kaynakları**: NTV Son Dakika + Anadolu Ajansı Güncel haberleri
- ✅ **AI Analiz**: Qwen AI ile haber önceliği/aciliyet tespiti (0-1 skor)
- ✅ **Akıllı Görsel Oluşturma**: 
  - RSS'de görsel varsa → Haberin kendi görseli + overlay tasarım
  - RSS'de görsel yoksa → Kırmızı arka planlı "SON DAKİKA" tasarımı
- ✅ **Telegram Entegrasyonu**: Kanalına/gruba otomatik gönderim
- ✅ **Tekrar Gönderim Kontrolü**: Aynı haber bir kez gönderilir
- ✅ **Maliyet Takibi**: AI kullanımı ve rate limiting
- ✅ **Otomatik Çalışma**: Her 5 dakikada scheduler ile kontrol

## 📋 Gereksinimler

- PHP 8.2+
- Laravel 11+
- Imagick PHP extension
- Telegram Bot API token
- Qwen AI API key (zaten mevcut)

## 🔧 Kurulum

### 1. Migration'ı Çalıştır

**ÖNEMLİ:** Database bağlantısı çalışır durumda olmalı!

`.env` dosyasında database ayarlarınızı kontrol edin:
```bash
DB_CONNECTION=mariadb
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=thedailybursa
DB_USERNAME=root
DB_PASSWORD=your_password
```

Database bağlantısı çalışır duruma geldikten sonra:

```bash
php artisan migrate
```

This migration şunları ekler:
- `news` tablosuna: `is_breaking`, `telegram_sent_at`, `source_id` (foreign key)
- `sources` tablosuna: `slug`, `rss_url`, `check_interval`, `is_active`, `priority`

**Not:** Eğer migration hatası alırsanız, önce mevcut tabloların yapısını kontrol edin:
```bash
php artisan db:show
php artisan db:table news
php artisan db:table sources
```

### 2. Telegram Bot Oluştur

1. [@BotFather](https://t.me/botfather) ile konuşun
2. `/newbot` komutu ile yeni bot oluşturun
3. Bot adı ve username belirleyin
4. **Bot Token**'ınızı alın (örn: `123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11`)

### 3. Telegram Kanal/Grup ID'si Alın

**Kanal için:**
1. Kanalınızı public yapın (geçici)
2. Kanal linkinden ID alın (örn: `@thedailybursa`)
3. Veya bot'u kanala admin olarak ekleyin ve ID kullanın (örn: `-1001234567890`)

**Grup için:**
```bash
# Bot'u gruba ekleyin, sonra:
curl https://api.telegram.org/bot<BOT_TOKEN>/getUpdates
```

Response'daki `chat.id` değerini kullanın.

### 4. .env Dosyasını Güncelleyin

```bash
# Telegram Configuration
TELEGRAM_BOT_TOKEN=123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11
TELEGRAM_CHANNEL_ID=@thedailybursa  # veya -1001234567890

# Qwen AI (zaten mevcut, kontrol edin)
QWEN_API_KEY=your_qwen_api_key
QWEN_API_URL=https://dashscope-intl.aliyuncs.com/compatible-mode/v1/

# AI Cost Tracking (zaten mevcut)
AI_COST_TRACKING=true
AI_DAILY_BUDGET=5.0
AI_MONTHLY_BUDGET=150.0
```

### 5. Font Kurulumu (Linux)

```bash
# DejaVu Sans Bold (önerilen)
sudo apt-get install fonts-dejavu-core

# Veya Liberation Sans
sudo apt-get install fonts-liberation
```

Font otomatik tespit edilir. Özel font kullanmak için:
1. `public/fonts/Roboto-Bold.ttf` dosyasını ekleyin
2. Veya `ImageGenerationService.php` içinde `$this->fontPath` değerini değiştirin

## 🧪 Test

### Bot Bağlantısını Test Et

```bash
php artisan tinker
```

```php
$telegram = new App\Services\TelegramService();
$telegram->sendTestMessage();
$telegram->getBotInfo();
```

### Görsel Oluşturmayı Test Et

```php
$imageService = new App\Services\ImageGenerationService();
$path = $imageService->generateBreakingNewsImage(
    'Test: Bursa\'da önemli gelişme',
    ['show_date' => true, 'source' => 'NTV']
);

echo "Image: " . $path;
```

### AI Breaking Detection Test

```php
$ai = new App\Actions\Qwen\AiTextGeneration(new App\Services\AI\CostTracker());
$result = $ai->detectBreakingNews(
    'Bursa\'da büyük deprem',
    'Bursa merkez üssü olmak üzere 6.5 büyüklüğünde deprem meydana geldi...'
);

print_r($result);
// ['is_breaking' => true, 'score' => 0.95, 'reasoning' => '...']
```

### Manuel Komut Çalıştır (Test Mode)

```bash
# Telegram'a göndermeden test et
php artisan news:monitor-breaking --test
```

### Canlı Çalıştır

```bash
# Telegram'a gönderir
php artisan news:monitor-breaking
```

## ⏰ Scheduler (Otomatik Çalıştırma)

Scheduler zaten eklenmiş durumda (`routes/console.php`):

```php
Schedule::command('news:monitor-breaking')->everyFiveMinutes();
```

Cron job kurulumu (sunucuda):

```bash
crontab -e
```

Ekle:
```
* * * * * cd /path/to/thedailybursa.com && php artisan schedule:run >> /dev/null 2>&1
```

Test:
```bash
php artisan schedule:list
```

## 📊 Monitoring

### Log'ları İzle

```bash
tail -f storage/logs/laravel.log | grep -i "breaking\|telegram\|rss"
```

### Breaking News İstatistikleri

```bash
php artisan tinker
```

```php
// Son 24 saatte tespit edilen breaking news
News::where('is_breaking', true)
    ->where('created_at', '>=', now()->subDay())
    ->count();

// Telegram'a gönderilen haberler
News::whereNotNull('telegram_sent_at')->count();

// AI maliyet
DB::table('ai_usage_logs')
    ->where('task_type', 'breaking_detection')
    ->sum('cost');
```

## 🎨 Görsel Özelleştirme

`app/Services/ImageGenerationService.php` dosyasında:

### Arka Plan Rengi Değiştir
```php
$image->fill('#DC2626'); // Kırmızı
// Değiştir:
$image->fill('#EA580C'); // Turuncu
$image->fill('#CA8A04'); // Sarı
```

### Boyut Değiştir
```php
$width = 1080;
$height = 1080;
// Değiştir:
$width = 1200;  // Twitter
$height = 675;
```

### Font Boyutu
```php
$font->size(80);  // "SON DAKİKA" metni
$font->size(50);  // Haber başlığı
```

## ⚙️ Yapılandırma

### AI Skor Eşiği Değiştir

`app/Actions/Qwen/AiTextGeneration.php` - `detectBreakingNews()` metodunda:

```php
return [
    'is_breaking' => $score >= 0.7, // 0.7'den 0.8 veya 0.6'ya değiştir
    'score' => $score,
    'reasoning' => $result['reasoning'] ?? 'No reasoning provided',
];
```

### Kontrol Sıklığı Değiştir

`routes/console.php`:

```php
// Her 5 dakika yerine 10 dakika
Schedule::command('news:monitor-breaking')->everyTenMinutes();

// Sadece gündüz saatlerde
Schedule::command('news:monitor-breaking')->everyFiveMinutes()->between('8:00', '23:00');
```

### Farklı RSS Kaynağı Ekle

```php
// Database'de source ekle
Source::create([
    'name' => 'Hürriyet',
    'slug' => 'hurriyet',
    'rss_url' => 'https://www.hurriyet.com.tr/rss/sondakika',
    'is_active' => true,
    'priority' => 9,
]);
```

Sonra `MonitorBreakingNewsCommand.php`'de loop ekle.

## 🔍 Troubleshooting

### Görsel Oluşturamıyor

```bash
# Imagick kurulu mu?
php -m | grep imagick

# Değilse:
sudo apt-get install php8.2-imagick
sudo systemctl restart php8.2-fpm
```

### Telegram Gönderemiyor

```bash
# Bot token doğru mu?
curl https://api.telegram.org/bot<TOKEN>/getMe

# Bot kanal/grupta admin mi?
# Kanala mesaj gönderme yetkisi var mı?
```

### RSS Parse Hatası

```bash
# XML geçerli mi test et:
curl https://www.ntv.com.tr/son-dakika.rss

# Log'lara bak:
tail -f storage/logs/laravel.log | grep "RSS"
```

### AI Cost Limit

```bash
# .env'de artır:
AI_DAILY_BUDGET=10.0  # $5'ten $10'a
AI_MONTHLY_BUDGET=300.0
```

## 📈 İyileştirme Önerileri

1. **Çoklu RSS Kaynakları**: `sources` tablosundan tüm aktif kaynakları döngüye al
2. **Kategori Bazlı Görsel**: Spor haberleri için mavi, ekonomi için yeşil tema
3. **Önem Seviyesi**: 0.7-0.8 "Önemli", 0.8-0.9 "Çok Önemli", 0.9+ "Acil" görselleri
4. **Admin Panel**: Breaking news onay/reddetme arayüzü
5. **Webhook**: RSS yerine push notification sistemi
6. **A/B Testing**: Farklı görsel tasarımları test et
7. **Analytics**: Telegram'daki engagement ölç

## 📞 Destek

Sorun yaşarsanız:
1. `storage/logs/laravel.log` dosyasını kontrol edin
2. `php artisan news:monitor-breaking --test` ile debug edin
3. `APP_DEBUG=true` ile detaylı hata mesajları alın

## 🎉 Başarılı Kurulum Kontrolü

```bash
# 1. Migration
php artisan migrate:status | grep breaking_news

# 2. Telegram
php artisan tinker
>>> (new App\Services\TelegramService())->getBotInfo()

# 3. Komut
php artisan news:monitor-breaking --test

# 4. Scheduler
php artisan schedule:list | grep breaking

# Hepsi ✅ ise hazırsınız!
```

---

**Not**: İlk çalıştırmada mevcut tüm RSS haberleri analiz edilecek. Yüksek skor alanlar Telegram'a gönderilecek. Ardından sadece yeni haberler işlenecek.
