Ç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
Sistemdeki tüm tenant'lar taranır. Her tenant için:
⚠️ Ö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!
Kullanılabilir draft sayısı kontrol edilir:
Queue: blog-ai
Timeout: 15 dakika
Retry: 3 deneme
Üretim Sayısı: 25 draft (CategoryBasedDraftGenerator - sabit)
Blog oluşturulmadan önce 2 kontrol yapılır:
Bu sayede duplicate blog oluşması engellenir.
Iterative Generation Yaklaşımı:
Toplam Kelime: Minimum 2000+ kelime (her bölüm 500-600 kelime)
AI response'u şu kriterlere göre kontrol edilir:
Max Retry: 3 deneme
Setting: blog_ai_blog_fotograflar_nereden_uretilsin
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
Görsel indirilir ve blog'a eklenir:
⚠️ Not: Inline images (içerik içi görseller) disabled. Sadece 1 featured image kullanılıyor.
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:
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:
Sorun: blog-ai queue'u kullanılıyor ama worker çalışıyor mu bilinmiyor.
Risk: Job'lar queue'da bekler ama işlenmez!
Kontrol:
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:
Sorun: Draft generation credit tüketimi loglanıyor mu?
Kontrol:
Beklenen: Draft generation da credit tüketmeli (şu an sadece blog generation credit düşüyor)
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.
Ö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
Strateji:
Araçlar:
Akış:
Takip Edilmesi Gerekenler:
Blog oluşturulmadan önce benzerlik kontrolü yapılıyor. %85+ benzer başlık varsa skip ediliyor.
Her tenant kendi database'inde çalışıyor. Context switching doğru yapılmış.
Blog içeriği adım adım oluşturuluyor (outline → sections → FAQ → HowTo). Kaliteli ve uzun içerik üretiliyor.
3 farklı ücretsiz provider (Pexels, Unsplash, Pixabay) destekleniyor. AI image (DALL-E) opsiyonel.
Ağır işlemler (draft generation, blog creation) queue'da işleniyor. Ana thread bloklanmıyor.
Meta description, alt text, title, SEO keywords otomatik oluşturuluyor.
Blog oluşturma öncesi credit kontrolü yapılıyor. Yetersiz credit varsa işlem durduruluy or.
GenerateTenantBlogs komutunda saat kontrolünü aktif et. Crontab'ı saatlik yap.
Beklenen Sonuç: Günde sadece belirlenen saatlerde blog üretilir (kredi tasarrufu)
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
CategoryBasedDraftGenerator'ı dinamik count parametresi alsın.
Beklenen Sonuç: İhtiyaca göre 25-100 arası draft üretilebilir
MediaManager'da provider kullanılmadan önce API key kontrolü yap.
Beklenen Sonuç: Görsel alamama durumu minimize edilir
Queue failed table'ı izle, başarısız job'larda bildirim gönder.
Beklenen Sonuç: Sorunlar hızlıca fark edilir