📊 Blog AI Cron & Image Generation Analizi

📅 Tarih: 2025-11-19 | 🎯 Sistem: Multi-Tenant Blog AI | 👤 Analiz Kapsamı: Cron Jobs, Draft Generation, Blog Creation, Image Integration

🔄 Sistem Akışı - Nasıl Çalışıyor?

1️⃣ Cron Job Tetiklemesi

Zamanlanmış Görev (Crontab)

Çalışma Sıklığı: Her 5 dakikada bir (*/5 * * * *)

Script: blog-cron.sh

Komut: php artisan generate:tenant-blogs

Log: storage/logs/blog-cron.log

2️⃣ Tenant Tarama (GenerateTenantBlogs Command)

Adım 1: Tüm Tenant'ları Getir

Sistemdeki tüm tenant'lar taranır. Her tenant için:

  • Tenant context başlatılır (tenancy()->initialize($tenant))
  • Blog AI aktif mi kontrol edilir (blog_ai_enabled setting)
  • Günlük blog sayısı alınır (blog_ai_daily_count)

Adım 2: Saat Kontrolü (ŞU AN DİSABLED - TEST MODE)

⚠️ ÖNEMLİ: Bu kontrol şu an test modda bypass edilmiş!

Normal Mantık: Günlük blog sayısına göre aktif saatler hesaplanır.

Örnek: 4 blog/gün ise → 06:00, 12:00, 18:00, 00:00 saatlerinde çalışır

Şu Anki Durum: Her çalışmada blog üretmeye çalışır!

Adım 3: Draft Pool Kontrolü

Kullanılabilir draft sayısı kontrol edilir:

  • Draft Yok (0): Önce draft üretimi başlatılır (100 draft)
  • Draft Var: Random 1 draft seçilir ve blog oluşturulur
  • Draft Azaldı (≤10): Blog oluşturulduktan sonra 100 yeni draft üretilir

3️⃣ Draft Üretimi (GenerateDraftsJob)

Queue İşlemi

Queue: blog-ai

Timeout: 15 dakika

Retry: 3 deneme

Üretim Sayısı: 25 draft (CategoryBasedDraftGenerator - sabit)

CategoryBasedDraftGenerator Mantığı

  • Blog kategorilerini çeker
  • Her kategori için 5 farklı draft konusu üretir
  • AI ile outline, meta description, SEO keywords oluşturur
  • Toplamda 25 draft database'e kaydedilir

4️⃣ Blog Oluşturma (GenerateBlogFromDraftJob)

Duplicate Check (Önemli!)

Blog oluşturulmadan önce 2 kontrol yapılır:

  • Draft Kontrolü: is_generated flag kontrol edilir
  • Benzerlik Kontrolü: Mevcut blog başlıklarıyla %85+ benzerlik varsa skip edilir

Bu sayede duplicate blog oluşması engellenir.

AI Content Generation (BlogAIContentWriter)

Iterative Generation Yaklaşımı:

  • Outline Oluştur: 4-5 H2 başlık belirlenir
  • Her Bölümü Genişlet: Her H2 için 500-600 kelimelik detaylı içerik üretilir
  • H3 Alt Başlıklar: Her H2'ye 3-4 alt başlık eklenir
  • FAQ Üret: 10 soru-cevap oluşturulur
  • HowTo Üret: 7 adımlı rehber hazırlanır

Toplam Kelime: Minimum 2000+ kelime (her bölüm 500-600 kelime)

Validation & Retry Mekanizması

AI response'u şu kriterlere göre kontrol edilir:

  • Kelime Sayısı: Minimum 1500 kelime (yoksa retry)
  • Firma Adı: En az 1 kez kullanılmalı (yoksa retry)
  • Boş Alan: Title ve content dolu olmalı (yoksa retry)

Max Retry: 3 deneme

5️⃣ Image Generation (MediaManager)

Tenant-Aware Configuration

Setting: blog_ai_blog_fotograflar_nereden_uretilsin

  • 0 (Stock Photo): Ücretsiz stock photo kullanılır (Pexels, Unsplash, Pixabay)
  • 1 (AI Generated): DALL-E ile yapay zeka görsel üretilir

Stock Photo Stratejisi

Provider Sırası: Pexels → Unsplash → Pixabay

Arama Terimi: Blog başlığından basit prompt oluşturulur

Örnek: Blog başlığı = "Forklift Bakımı" → Query = "Professional blog featured image about: Forklift Bakımı"

Orientation: Landscape (yatay görsel)

Fallback: İlk provider başarısız olursa diğerine geçer

Media Attach & Metadata

Görsel indirilir ve blog'a eklenir:

  • Collection: featured_image
  • Alt Text: Blog başlığı
  • Title: Blog başlığı + " - Ana Görsel"
  • Custom Properties: Provider, photographer, cost, dimensions

⚠️ Not: Inline images (içerik içi görseller) disabled. Sadece 1 featured image kullanılıyor.

🚨 Tespit Edilen Sorunlar & Eksiklikler

1. Cron Zamanlaması Çelişkisi Yüksek Öncelik

Sorun: Crontab her 5 dakikada çalıştırıyor ama GenerateTenantBlogs komutunda saat bazlı kontrol var.

Sonuç: Test mode nedeniyle şu an saat kontrolü bypass edilmiş. Her 5 dakikada blog üretmeye çalışıyor!

Risk: Gereksiz API çağrıları, kredi tüketimi, duplicate blog riski

Çözüm:

  • Crontab'ı saatlik yap: 0 * * * * (her saat başı)
  • Test mode'u kapat, saat kontrolünü aktif et
  • Ya da saat kontrolünü tamamen kaldır ve cron zamanlamasına güven

2. Draft Count Parametresi Kullanılmıyor Orta Öncelik

Sorun: GenerateDraftsJob'a count parametresi geçiliyor (100) ama CategoryBasedDraftGenerator sabit 25 draft üretiyor.

Beklenen: 100 draft

Gerçek: 25 draft

Sonuç: Draft pool hızla tükenebilir, sürekli yeni draft üretimi gerekir

Çözüm:

  • CategoryBasedDraftGenerator'ı count parametresini kabul edecek şekilde güncelle
  • Ya da sabit 25 draft yeterli ise GenerateDraftsJob parametresini kaldır

3. Queue Worker Kontrolü Yüksek Öncelik

Sorun: blog-ai queue'u kullanılıyor ama worker çalışıyor mu bilinmiyor.

Risk: Job'lar queue'da bekler ama işlenmez!

Kontrol:

  • php artisan queue:work --queue=blog-ai komutu çalışıyor mu?
  • Supervisor veya systemd ile queue worker tanımlandı mı?
  • Queue job'ları işleniyor mu log'lardan kontrol et

4. Stock Photo API Key Kontrolü Yok Orta Öncelik

Sorun: MediaManager stock photo provider'larını kullanırken API key kontrolü yapmıyor.

Risk: API key yoksa veya hatalıysa görsel alınamaz, blog görselsiz kalır

Beklenen:

  • Provider kullanılmadan önce API key varlığı kontrol edilmeli
  • Key yoksa next provider'a geçmeli
  • Hiç key yoksa kullanıcıya uyarı gösterilmeli

5. Credit Tüketimi Takibi Düşük Öncelik

Sorun: Draft generation credit tüketimi loglanıyor mu?

Kontrol:

  • GenerateDraftsJob credit düşüyor mu?
  • 1 draft = kaç kredi?
  • 25 draft üretimi = kaç kredi tüketimi?

Beklenen: Draft generation da credit tüketmeli (şu an sadece blog generation credit düşüyor)

6. Inline Images Disabled Düşük Öncelik

Durum: İçerik içi görseller (H2 sonrası) disabled.

Sebep: Kullanıcı sadece 1 featured image istemiş.

Not: Gelecekte aktif edilmek istenirse BlogAIContentWriter'da generateInlineImages() metodu mevcut.

✨ İyileştirme Önerileri

1. Cron Zamanlamasını Düzelt Yüksek Öncelik

Önerilen Crontab:

0 */6 * * * → Her 6 saatte bir (günde 4 blog)

veya

0 0,6,12,18 * * * → Sadece 00:00, 06:00, 12:00, 18:00 saatlerinde

Test Mode'u Kapat: GenerateTenantBlogs'da saat kontrolünü aktif et

2. Draft Pool Yönetimini Optimize Et Orta Öncelik

Strateji:

  • Minimum threshold: 20 draft (şu an 10)
  • Regeneration count: 50 draft (şu an 100, ama sadece 25 üretiliyor)
  • CategoryBasedDraftGenerator'ı dinamik count ile güncelle

3. Queue Monitoring Ekle Yüksek Öncelik

Araçlar:

  • Laravel Horizon (Redis queue için)
  • Queue failed jobs monitoring
  • Slack/Email notification (job fail olduğunda)

4. Stock Photo Fallback Mekanizması Orta Öncelik

Akış:

  • Pexels API dene → Başarısız ise Unsplash'a geç
  • Unsplash başarısız ise Pixabay'a geç
  • Hiçbiri çalışmazsa placeholder image kullan
  • Her başarısız deneme log'lansın

5. Analytics & Metrics Düşük Öncelik

Takip Edilmesi Gerekenler:

  • Günlük kaç blog üretildi?
  • Ortalama blog kelime sayısı?
  • Hangi provider'dan kaç görsel alındı?
  • Toplam credit tüketimi (draft + blog)
  • Failed job oranı
  • Duplicate skip oranı

✅ Çalışan Sistemler (İyi Noktalar)

Duplicate Prevention ✓

Blog oluşturulmadan önce benzerlik kontrolü yapılıyor. %85+ benzer başlık varsa skip ediliyor.

Tenant-Aware Architecture ✓

Her tenant kendi database'inde çalışıyor. Context switching doğru yapılmış.

Iterative Content Generation ✓

Blog içeriği adım adım oluşturuluyor (outline → sections → FAQ → HowTo). Kaliteli ve uzun içerik üretiliyor.

Multi-Provider Stock Photo ✓

3 farklı ücretsiz provider (Pexels, Unsplash, Pixabay) destekleniyor. AI image (DALL-E) opsiyonel.

Queue-Based Processing ✓

Ağır işlemler (draft generation, blog creation) queue'da işleniyor. Ana thread bloklanmıyor.

SEO Optimization ✓

Meta description, alt text, title, SEO keywords otomatik oluşturuluyor.

Credit System ✓

Blog oluşturma öncesi credit kontrolü yapılıyor. Yetersiz credit varsa işlem durduruluy or.

📊 Sistem İstatistikleri

5 dk
Cron Çalışma Sıklığı
25
Draft Üretim Sayısı (Sabit)
2000+
Min. Blog Kelime Sayısı
20 dk
Blog Generation Timeout
3
Queue Retry Sayısı
1.0
1 Blog = Kredi
10
FAQ Soru Sayısı
7
HowTo Adım Sayısı

🎯 Öncelikli Yapılacaklar

1. Test Mode'u Kapat ve Cron'u Düzelt Acil

GenerateTenantBlogs komutunda saat kontrolünü aktif et. Crontab'ı saatlik yap.

Beklenen Sonuç: Günde sadece belirlenen saatlerde blog üretilir (kredi tasarrufu)

2. Queue Worker Kontrolü Yap Acil

blog-ai queue worker'ının çalıştığından emin ol. Supervisor/systemd config kontrol et.

Beklenen Sonuç: Job'lar queue'da beklemez, hemen işlenir

3. Draft Count Parametresini Düzelt Orta

CategoryBasedDraftGenerator'ı dinamik count parametresi alsın.

Beklenen Sonuç: İhtiyaca göre 25-100 arası draft üretilebilir

4. Stock Photo API Key Validation Ekle Orta

MediaManager'da provider kullanılmadan önce API key kontrolü yap.

Beklenen Sonuç: Görsel alamama durumu minimize edilir

5. Failed Job Monitoring Ekle Düşük

Queue failed table'ı izle, başarısız job'larda bildirim gönder.

Beklenen Sonuç: Sorunlar hızlıca fark edilir