AI Sistemi Blog Draft Production

Blog AI Draft Sistemi Analizi

AI taslak ve blog yazımı sisteminin tüm bileşenleri, iş akışı, prompt kuralları ve Muzibu marka entegrasyonu.

Basit Anlatim (Herkes Icin)

Bu Sistem Ne Yapar?

Blog AI Draft sistemi, yapay zeka kullanarak otomatik blog yazilari uretir. Admin panelden bir butona basarak 25 adet blog taslagi (basliklari, alt baslik yapisi, SEO anahtar kelimeleri) olusturulur. Bunlardan begenilenleri secip "Blog Yap" dendiginde, yapay zeka her taslaktan 2000+ kelimelik profesyonel bir blog yazisi yazar, uzerine Leonardo AI ile gorseli de uretir.

25
Taslak / Istek
2000+
Kelime / Blog
1.0
Kredi / Blog

Nasil Calisiyor? (3 Adim)

Taslak Uretimi

Admin "Taslak Uret" butonuna tikladiginda, AI sektorunuze uygun 25 adet blog konusu onerir. Her oneri baslik, alt basliklar, SEO anahtar kelimeleri ve meta aciklama icerir.

Secim & Onay

Admin olusturdugu taslaklari inceler, begenmediklerini eleyip istediklerini secer. Sadece secilen taslaklar blog yazisina donusturulur.

Blog Yazimi + Gorsel

Secilen her taslak icin AI, 2000+ kelimelik SEO uyumlu blog yazar. Ardindan Leonardo AI ile konuya uygun gorsel otomatik uretilir. Yazilar direkt yayina alinir.

Muzibu Nerede Devreye Giriyor?

  • Firma adi min 3 kez gecer: Girisin ilk 200 kelimesinde, orta bolumde ve sonuc paragrafinda "Muzibu" ismi dogal sekilde kullanilir.
  • Platform verileri: "100.000+ telifsiz sarki", "2.000+ playlist", "~100 radyo kanali" gibi gercek veriler yazilara serpilir.
  • Sektore ozel icerik: Kafe, restoran, otel, magazaya ozel muzik onerileri uretilir.
  • CTA bolumu: Her yazinin sonunda Muzibu'ya yonlendiren iletisim bilgili cagri butonu eklenir.
  • Kurum ismi yasagi: MESAM, MSG gibi kurum adlari kullanilmaz, yerine "telif hakki kuruluslari" gibi genel ifadeler tercih edilir.

Teknik Detaylar (Gelistiriciler Icin)

Mimari Genel Bakis

Dosya Yapisi

Modules/Blog/
├── App/
│   ├── Http/Livewire/Admin/
│   │   └── BlogAiDraftComponent.php     # Admin UI
│   ├── Jobs/
│   │   ├── GenerateDraftsJob.php        # Taslak job
│   │   └── GenerateBlogFromDraftJob.php # Blog job
│   ├── Models/
│   │   └── BlogAIDraft.php              # Draft model
│   └── Services/
│       ├── CategoryBasedDraftGenerator  # Taslak uretici
│       ├── BlogAIContentWriter.php      # Blog yazici
│       ├── BlogAIBatchProcessor.php     # Batch tracker
│       └── TenantPrompts/
│           ├── TenantPromptLoader.php   # Dinamik loader
│           ├── DefaultPrompts.php       # Fallback
│           └── Tenants/
│               └── Tenant1001Prompts.php# MUZIBU OZEL
├── database/migrations/tenant/
│   └── create_blog_ai_drafts_table.php
└── routes/admin.php                     # /admin/blog/ai-drafts

Teknoloji Yigini

AI ProviderOpenAI (gpt-4o-mini)
Gorsel AILeonardo AI
Queueblog-ai (Redis)
Admin UILivewire + Alpine.js
CacheRedis (batch status)
DatabaseTenant-isolated
Temperature0.7 (Muzibu - kreatif)

Is Akisi Diyagrami

Faz 1: Taslak Uretimi

Admin Panel --> BlogAiDraftComponent::generateDrafts()
  | Credit kontrolu (1.0 kredi)
  --> GenerateDraftsJob (queue: blog-ai, timeout: 900s)
    --> CategoryBasedDraftGenerator::generateDrafts()
      | 5 kategori grubu olustur (dinamik)
      | Her grup icin OpenAI cagir (5 taslak)
      --> BlogAIDraft::create() x 25
  <-- Frontend polling (3-5s) ile taslaklar goruntulenir

Faz 2: Blog Yazimi

Admin secim yapar --> generateBlogs()
  | Credit kontrolu (secilen x 1.0)
  --> BlogAIBatchProcessor::procesSelectedDrafts()
    | Cache'te batch status olustur
    --> GenerateBlogFromDraftJob x N (unique lock: 30dk)
      | Slug/title duplicate kontrolu (%95+)
      --> BlogAIContentWriter::generateBlogFromDraft()
        | AI ile 2000+ kelime icerik uret
        | Blog::create() + Kategori assign
        | SEO settings olustur
        --> Leonardo AI gorsel uret
  <-- Progress bar ile takip (3s polling)

v2 Guncelleme: Muzibu Baglantisi Guclendirildi YENi

Onceki Sorunlar

  • CategoryBasedDraftGenerator::buildSimplePrompt() tamamen Ixtif icin hard-coded idi (forklift, transpalet yaziyordu)
  • buildGeneralGroups() genel Ixtif kategorileri donuyordu (Urun Rehberleri, Bakim vb.)
  • extractKeywords() "elektrikli X", "manuel X" formatinda keyword uretiyordu
  • Draft prompt'ta Muzibu baglantisi zorunlu degildi — genel muzik konulari uretilebiliyordu

Yapilan Duzeltmeler (3 Dosya)

1. CategoryBasedDraftGenerator.php — buildSimplePrompt()

Artik TenantPromptLoader uzerinden tenant'a ozel prompt yukluyor. Ixtif prompt'u sadece fallback olarak kaldi.

// ONCE: Hard-coded Ixtif prompt
$systemPrompt = "Sen Ixtif firmasi icin..."

// SIMDI: Tenant-aware prompt
$loader = app(TenantPromptLoader::class);
$tenantDraftPrompt = $loader->getDraftPrompt();
// Muzibu icin: Tenant1001Prompts::getDraftPrompt()
// + Grup context inject edilir
2. CategoryBasedDraftGenerator.php — buildGeneralGroups() + extractKeywords()

Muzibu icin muzik odakli 5 grup ve muzik odakli keyword uretimi eklendi.

// Muzibu Gruplari (5x5 = 25 taslak):
1. Sektore Ozel Muzik Rehberleri
2. Telif Hakki ve Yasal Muzik Kullanimi
3. Muzigin Isletmeye Etkisi
4. Kurumsal Muzik Yonetimi
5. Muzik Sistemi Kurulum ve Optimizasyon

// Keyword ornegi (eski vs yeni):
ONCE: "elektrikli kafe", "manuel kafe"
SIMDI: "kafe muzigi", "telifsiz kafe muzigi"
3. Tenant1001Prompts.php — getDraftPrompt()

Her basligin Muzibu ile dogal baglanti kurmasi artik ZORUNLU.

FORMUL: [Sektor/Isletme Problemi] + [Muzik Cozumu] = Muzibu'ya dogal gecis

IYIN ORNEKLER:
"Kafe Muzigi Secimi: Musteri Deneyimini Artirmanin 7 Yolu"
"Isletmenizde Telif Sorunuyla Karsilasmamak Icin Bilmeniz Gerekenler"
"Cok Subeli Isletmelerde Muzik Standardizasyonu Nasil Saglanir?"

KOTU ORNEKLER (YASAK):
"Muzigin Tarihcesi" (isletme baglantisi yok)
"En Iyi 10 Turk Pop Sarkisi" (Muzibu cozum degil)
"Gitar Calmayi Ogrenin" (bireysel, B2B degil)

Muzibu Prompt Kurallari Tenant1001Prompts.php

Yapilacaklar

  • 1. "Muzibu" firma adi minimum 3 kez kullanilmali
  • 2. Ilk 200 kelimede + Orta bolumde + Sonuc/CTA'da
  • 3. Platform verileri varyasyonlu kullanilmali (100.000+ sarki / yuz binden fazla parca / devasa kutuphanemiz)
  • 4. Her yazinin sonunda iletisim bilgili CTA
  • 5. Sektore ozel icerik (kafe, restoran, otel, magaza vb.)
  • 6. Zamansiz ifadeler: "gunumuzde", "modern isletmelerde"
  • 7. E-E-A-T uyumlu, profesyonel ama samimi ton

Yasaklar

  • 1. MESAM, MSG, MUYORBIR, MUYAP isimleri YASAK
  • 2. Spesifik yillar: "2023'te", "2024 icin" YASAK
  • 3. Spesifik fiyatlar: "ayda 299 TL" YASAK
  • 4. Rakip platform isimleri YASAK

Donusumler

  • "MESAM" → "telif hakki kuruluslari"
  • "2024'te" → "gunumuzde"
  • "299 TL" → "uygun fiyatli"

Ornek CTA Blogu (Her yazinin sonunda)

<h2>Muzibu ile Farki Yasayin</h2>
<p>Muzibu olarak, isletmenizin muzik ihtiyacini karsiliyoruz...</p>
<ul>
  <li><strong>Telefon:</strong> {contact_info.phone}</li>
  <li><strong>Email:</strong> {contact_info.email}</li>
  <li><strong>Web:</strong> {company_info.website}</li>
</ul>
<p>Hemen ucretsiz deneyin!</p>

Platform Veri Varyasyonlari

Tekrarlayan icerikleri onlemek icin, platform verileri farkli ifadelerle kullanilir:

VeriVaryasyon 1Varyasyon 2Varyasyon 3
Sarki sayisi100.000+ telifsiz muzikyuz binden fazla ozgun parcaTurkiye'nin en genis telifsiz arsivi
Playlist sayisi2.000+ hazir calma listesibinlerce hazir playlistprofesyonelce hazirlanmis playlistler
Radyo~100 radyo kanalikesintisiz radyo yayinlarionlarca tematik kanal
Yonetimmerkezi cok subeli yonetimtek noktadan tum subelerbulut tabanli yonetim paneli

Tenant Context (Muzibu - 1001)

'focus' => 'music_for_business'
'industry' => 'B2B Telifsiz Muzik Hizmeti'
'target_audience' => 'Isletme sahipleri, magaza
  mudurleri, otel/restoran yoneticileri'

'platform_data' => [
  'songs'     => '100.000+',
  'playlists'  => '2.000+',
  'albums'     => '2.000+',
  'radios'     => '98',
  'sectors'    => 'Kafe, Restoran, Otel,
    Magaza, AVM, Hastane, Spor Salonu...'
]

Ozellikler

TelifsizTelifsiz muzik kutuphanesi
PlaylistSektore ozel hazir playlistler
Cok SubeMerkezi cok subeli yonetim
AnonsAnons ve spot sistemi
ZamanlamaZamanlama ve otomasyon
ErisimMobil ve web erisim

Leonardo AI Gorsel Uretimi

Blog basligindan otomatik olarak sektor, duygu ve stil tespit edilerek gorsel uretilir.

Mekan Tespiti

  • "kafe" → cozy modern cafe
  • "restoran" → upscale restaurant
  • "otel" → luxury hotel lobby
  • "magaza" → modern retail store
  • "kuafor" → stylish hair salon
  • "spor" → energetic fitness center

Duygu/Atmosfer

  • Negatif → worried, tense, dramatic
  • Bilimsel → clean, analytical
  • Kurumsal → elegant, premium
  • Varsayilan → warm, inviting, positive

Gorsel Stili

  • Bilimsel → flat design / infographic
  • Yasal → cinematic photography
  • Rehber → foto + ilustrasyon
  • Varsayilan → warm photography
Negatif Kurallar: Metin, etiket, filigran, logo, ciplaklik, acik icerik, dini semboller (soyut hariç) YASAK

Kredi Yonetimi

IslemMaliyetAciklama
Taslak Uretimi1.0 kredi25 taslak = 1 kredi
Blog Yazimi1.0 krediHer blog = 1 kredi
Ornek Senaryo11 kredi25 taslak + 10 blog

Helper Fonksiyonlari

ai_can_use_credits(1.0)  // Yeterli kredi var mi?
ai_use_credits(1.0)      // Kredi kullan
ai_get_credit_balance() // Kalan bakiye

Database Semasi

blog_ai_drafts TENANT DB

KolonTipAciklama
idbigint PKPrimary key
topic_keywordstringBlog basligi / ana anahtar kelime
category_suggestionsjsonOnerilen kategori ID'leri [1, 2, 3]
seo_keywordsjsonSEO anahtar kelimeleri
outlinejsonH2/H3 yapisal tasarim
meta_descriptiontext150-160 karakter meta
is_selectedbooleanAdmin secti mi?
is_generatedbooleanBlog yazildi mi?
generated_blog_idFK → blogsUretilen blog ID'si

Guvenlik & Korunmalar

Duplicate Onleme

  • Taslak: Son 20 baslikla karsilastirma
  • Blog: Slug benzerlik %95+ = duplicate
  • Blog: Title benzerlik %95+ = duplicate

Concurrency

  • Unique lock: 30 dk / draft+tenant
  • Retry: 3 kez, 60s backoff
  • Job timeout: 900s (15 dk)

Konfigurasyonlar

config/ai.php

'enabled' => true
'default_provider' => 'openai'
'default_model' => 'gpt-4o-mini'

config/ai-tenants.php (1001)

'temperature' => 0.7 // kreatif
'module_availability' => [
  'music' => [1001],
  'blog'  => [1, 2, 3, 1001]
]

Tum Bilesenler

BilesenDosyaGorev
Admin UIBlogAiDraftComponent.phpTaslak uretim/secim arayuzu
Taslak JobGenerateDraftsJob.php25 taslak uretimi (queue)
Kategori GeneratorCategoryBasedDraftGenerator.phpDinamik kategori bazli taslak
Blog JobGenerateBlogFromDraftJob.phpTaslaktan blog yazimi (queue)
Blog WriterBlogAIContentWriter.phpIcerik uretimi + Leonardo AI
Batch TrackerBlogAIBatchProcessor.phpToplu islem progress takibi
Prompt LoaderTenantPromptLoader.phpTenant-specific prompt yukleme
Default PromptsDefaultPrompts.phpFallback prompt'lar
Muzibu PromptsTenant1001Prompts.phpMuzibu ozel prompt + marka kurallari
Draft ModelBlogAIDraft.phpTaslak veri modeli
Credit HelperCreditHelpers.phpKredi yonetim fonksiyonlari