Tenant 1001 AI

Akilli Muzik Asistani

Tenant 1001 icin ozel tasarlanmis, sarki onerisi, playlist yonetimi, subscription kontrolu ve tikla-cal action button sistemi ile donatilmis yapay zeka asistani

Tarih
16.12.2025
Tenant
1001
Versiyon
v3.0
Durum
Planlandi

Sistem Mimarisi

Shop AI'dan Miras Alinan Yapi

Backend Katmanlari

  • Controller: Tenant1001AIController (tenant 1001 check)
  • Context Builder: Tenant1001ContextBuilder (Song, Album, Playlist context)
  • AI Service: Ayni multi-provider fallback chain
  • Conversation: AIConversation + AIMessage (feature_slug: 'tenant1001-assistant')

Frontend Katmanlari

  • Alpine Store: Alpine.store('tenant1001AI') - muzik odakli
  • Widget: Player entegreli floating widget
  • Action Buttons: Tikla-cal, favoriye ekle, paylas
  • Markdown: marked.js + custom Tailwind renderer

Multi-Provider Fallback Chain

GPT-5-mini
Primary
GPT-4o-mini
Fallback 1
Claude Haiku
Fallback 2
DeepSeek
Fallback 3

Temel Ozellikler

1 Akilli Muzik Onerileri

AI, tenant 1001 veritabanindaki sarki, album, artist, playlist, tur ve sektor verilerini kullanarak kullaniciya ozel oneriler sunar. Context-aware: hangi sayfada olduguna gore farkli oneriler.

Sarki Onerileri
  • Benzer sarkilar (ayni tur)
  • Ayni artist'in diger sarkilari
  • Ayni albumden sarkilar
  • Populer sarkilar
Album & Artist
  • Artist'in tum albumleri
  • Benzer artist'ler
  • Yeni cikan albumler
  • One cikan albumler
Playlist & Radyo
  • Tematik playlist'ler
  • Sektore ozel playlist'ler
  • Radyo istasyonlari
  • Kullanici playlist onerileri

Context Turleri (Sayfa Bazli)

song_id
Sarki detay sayfasi
album_id
Album sayfasi
playlist_id
Playlist sayfasi
genre_id / sector_id
Tur/Sektor sayfasi

2 Action Button System (Tikla-Cal)

AI sadece metin yanit vermez, kullanicinin tek tikla aksiyon alabilecegi butonlar da dondurur. Sarki calma, favoriye ekleme, playlist'e ekleme, paylasma ve daha fazlasi.

AI Yaniti:
"Size Tarkan - Kuzu Kuzu sarkisini oneririm. 2000'lerin hit'i!"
AI Yaniti:
"Chill Cafe radyosu tam size gore! Sakin, akustik muzikler."

Desteklenen Action Turleri

play_song: Sarkiyi cal
play_album: Albumu cal
play_playlist: Playlist baslat
play_radio: Radyoyu ac
add_favorite: Favoriye ekle
add_to_playlist: Playlist'e ekle
share: Sosyal paylasim
navigate: Sayfaya git

3 Subscription & Premium Yonetimi

AI, kullanicinin uyelik durumunu bilir ve buna gore yanit verir. Mevcut Subscription modulu ile tam entegre calisir. Dinamik cycles, trial sistemi, device limit bilgisi dahil.

Uye Olmayan (Guest)
auth()->guest() = true

"Merhaba! Sinirsiz muzik dinlemek icin uye olabilirsiniz. {trial_days} gun ucretsiz deneme firsatini kacirmayin!"

trial_days: DB'den dinamik
Trial Kullanici
isTrialActive() = true | Kalan: {days_remaining} gun

"Deneme sureniz {days_remaining} gun sonra bitiyor! Muzik keyfiniz kesintisiz devam etsin, simdi Premium'a gecin."

days_remaining: daysRemaining() ile hesaplaniyor
Suresi Dolmus Uye
isExpired() = true | has_used_trial = true

"Uyeliginiz sona erdi. Reklamsiz, yuksek kaliteli muzik icin Premium'a gecin!"

Premium Kullanici
isPremium() = true | Kalan: {days_remaining} gun | Cihaz: {device_count}/{device_limit}

"Premium uyeliginiz {days_remaining} gun daha gecerli. Su anda {device_count}/{device_limit} cihaz kullaniyorsunuz. Keyifli dinlemeler!"

Tum degerler: Subscription + DeviceService'den dinamik

Kullanilacak Subscription Verileri

User Model Metodlari:
  • isPremium() - Premium mi?
  • isTrialActive() - Trial doneminde mi?
  • hasActiveSubscription() - Aktif abonelik var mi?
  • has_used_trial - Trial kullanildi mi?
Subscription Model:
  • daysRemaining() - Kalan gun
  • getCycleLabel() - "Aylik", "Yillik"
  • status - active/trial/expired
  • current_period_end - Bitis tarihi

Dinamik Degerler (DB'den Cekilecek)

Trial Suresi
SubscriptionPlan->trial_days
Ornek: 7 gun, 14 gun
Plan Fiyatlari
SubscriptionPlan->billing_cycles
Aylik: 99 TL, Yillik: 999 TL
Cihaz Limiti
SubscriptionPlan->device_limit
Ornek: 3 cihaz, 5 cihaz
Plan Isimleri
SubscriptionPlan->name
"Premium", "Business"
Cycle Etiketleri
billing_cycles->label
"Aylik", "Yillik", "6 Aylik"
Ozellik Listesi
SubscriptionPlan->features
Reklamsiz, HD Ses, vs.
Not: Tum degerler Tenant1001SubscriptionHelper uzerinden dinamik cekilecek. Hardcoded deger kullanilmayacak. Plan degisirse AI otomatik guncel bilgi verecek.

4 Akilli Sohbet Yetenekleri

AI'nin Yanit Verebilecegi Sorular

  • "Bana rock sarkilari oner"
  • "Romantik playlist var mi?"
  • "Tarkan'in albumleri hangileri?"
  • "Cafe icin uygun radyo?"
  • "Premium ne avantajlar sagliyor?"
  • "Uyelikgim ne zaman bitiyor?"
  • "Kac cihaz kullanabiliyorum?"
  • "Huzunlu sarkilar dinlemek istiyorum"

Mood & Aktivite Bazli Oneriler

:) Mutlu
Pop, Dance, Party playlist'leri
:( Huzunlu
Slow, Akustik, Duygusal sarkilar
! Spor/Enerji
Workout, Hip-Hop, EDM
~ Rahatlaci
Chill, Ambient, Lo-Fi

Implementasyon Adimlari

1

Tenant1001AIController Olustur

Modules/AI/app/Http/Controllers/Api/Tenant1001AIController.php

  • tenant1001AssistantChat() - Ana chat endpoint
  • Tenant Check: tenant()->id === 1001
  • Validation: message, song_id, album_id, playlist_id, genre_id, sector_id
  • Session: IP-based, sessionStorage sync
  • History: Son 10 mesaj context'e ekle
  • Response: message + actions array
2

Tenant1001ContextBuilder Service

app/Services/AI/Context/Tenant1001ContextBuilder.php

  • buildSongContext(song_id) - Sarki + artist + album
  • buildAlbumContext(album_id) - Album + tum sarkilar
  • buildPlaylistContext(playlist_id) - Playlist + sarkilar
  • buildGenreContext(genre_id) - Tur + populer sarkilar
  • buildSectorContext(sector_id) - Sektor + playlist'ler
  • buildGeneralContext() - Tum turler, radyolar
3

Tenant1001SubscriptionHelper

app/Services/AI/Helpers/Tenant1001SubscriptionHelper.php

getUserSubscriptionContext($user): array
|- is_guest: bool
|- is_premium: bool
|- is_trial: bool
|- has_used_trial: bool
|- days_remaining: int
|- plan_name: string ("Premium", "Trial", null)
|- cycle_label: string ("Aylik", "Yillik")
|- expiry_date: string (formatted)
|- device_count: int (aktif cihaz sayisi)
|- device_limit: int (max cihaz limiti)
+- subscription_plans: array (tum planlar + fiyatlar)
4

Muzik Asistani Prompt

Ozel sistem prompt'u - Muzik odakli personality

## KIMLIK

Sen Tenant 1001'in muzik asistanisin. Kullanicilara sarki, album, playlist oneriyorsun.

## KURALLAR
  • Her yantta uygun action butonlari dondur
  • Kullanicinin uyelik durumuna gore yanit ver
  • Premium avantajlarini dogal sekilde tanit
  • Sadece muzik konularinda yanit ver
## CONTEXT

Mevcut sarki/album/playlist bilgisi, kullanici subscription durumu, tum sarki/tur listesi...

5

Action Button Response Format

AI yanitlarina action array ekleme

{
  "success": true,
  "data": {
    "message": "Size **Tarkan - Kuzu Kuzu** sarkisini oneririm!",
    "actions": [
      {
        "type": "play_song",
        "label": "Hemen Cal",
        "icon": "fa-play",
        "color": "green",
        "params": { "song_id": 123 }
      },
      {
        "type": "add_favorite",
        "label": "Favoriye Ekle",
        "icon": "fa-heart",
        "color": "pink",
        "params": { "type": "song", "id": 123 }
      },
      {
        "type": "navigate",
        "label": "Sanatciyi Gor",
        "icon": "fa-user",
        "color": "purple",
        "params": { "url": "/artist/tarkan" }
      }
    ],
    "session_id": "...",
    "conversation_id": 456
  }
}
6

Frontend Alpine.js Store

public/themes/muzibu/js/ai/tenant1001-ai-chat.js

  • Alpine.store('tenant1001AI') - Muzik AI store
  • sendMessage() - API'ye mesaj gonder
  • renderActions() - Butonlari render et
  • executeAction(action) - Buton click handler
  • Player entegrasyonu: muzibuApp() ile haberlesme
  • Context sync: Sarki degisince context update
7

Widget Entegrasyonu

Floating widget + Player entegrasyonu

  • Floating Widget: Sag alt kose (player'in ustunde)
  • Bubble Messages: Muzik temalari ("Bugun ne dinleyelim?")
  • Auto Context: Calan sarki context'e otomatik ekle
  • Quick Actions: Populer turler, radyolar
  • Theme: Purple/pink gradient
  • Mobile: Player ile cakisma engeli

API Endpoint'leri

Method Endpoint Aciklama Auth
POST /api/ai/v1/tenant1001-assistant/chat Ana chat endpoint Opsiyonel
GET /api/ai/v1/tenant1001-assistant/history Sohbet gecmisi Opsiyonel
GET /api/ai/v1/tenant1001/subscription-status Kullanici uyelik bilgisi Sanctum
DELETE /api/ai/v1/tenant1001/conversation/{id} Sohbeti sil Session

Ek Ozellikler

AI Playlist Olusturma

Kullanici "bana chill playlist olustur" dediginde, AI otomatik olarak 15-20 sarkilik kisisellestirilmis playlist olusturur ve kaydetme secenegi sunar.

Action: create_playlist -> PlaylistService.createPlaylistWithSongs()

Dinleme Gecmisi Analizi

SongPlay tablosundan kullanicinin dinleme gecmisini analiz ederek kisisellestirilmis oneriler sunar. "En cok dinlediklerim" ve "Son dinlediklerim" context'e eklenir.

Model: SongPlay -> user_id + song_id + played_at

Kurumsal Hesap Destegi

MuzibuCorporateAccount entegrasyonu. Kurumsal kullanicilar icin ozel yanitlar, sektore ozel playlist onerileri, toplu hesap bilgisi.

Check: MuzibuCorporateService.isMember()

Infinite Queue Entegrasyonu

QueueRefillController ile entegre. AI'nin onerdigi sarkilari queue'ya ekleme, radyo baslatma, playlist'i queue'ya aktarma.

Actions: add_to_queue, play_next

Sosyal Paylasim

AI'nin onerdigi sarki/album/playlist'i WhatsApp, Twitter, Facebook'a paylasma. Web Share API + fallback URL kopyalama.

Action: share -> web-share.js entegrasyonu

Device Management

Kullanicinin aktif cihazlarini gosterme, cihaz limitini aciklama, "baska cihazdan cik" butonu ile DeviceService entegrasyonu.

Service: DeviceService.getActiveDevices()

Dosya Haritasi

httpdocs/Modules/AI/
app/Http/Controllers/Api/
PublicAIController.php GUNCELLE (tenant1001AssistantChat ekle)
app/Services/Tenant/
Tenant1001ContextBuilder.php YENI
Tenant1001SubscriptionHelper.php YENI
Tenant1001PromptService.php YENI
Mevcut: Tenant2ProductSearchService.php, Tenant2PromptService.php
routes/
api.php GUNCELLE (tenant1001 routes ekle)
Mevcut: /shop-assistant/chat, /assistant/chat
httpdocs/ (Frontend)
public/themes/muzibu/js/ai/
tenant1001-ai-chat.js YENI
resources/views/themes/muzibu/components/
ai-chat-widget.blade.php YENI
resources/views/themes/muzibu/layouts/
app.blade.php GUNCELLE (widget include)

Dosya Detaylari

Dosya Tam Yol Tip Aciklama
PublicAIController.php Modules/AI/app/Http/Controllers/Api/ GUNCELLE tenant1001AssistantChat() metodu ekle
Tenant1001ContextBuilder.php Modules/AI/app/Services/Tenant/ YENI Muzik context builder (song, album, playlist)
Tenant1001SubscriptionHelper.php Modules/AI/app/Services/Tenant/ YENI Dinamik subscription bilgileri
Tenant1001PromptService.php Modules/AI/app/Services/Tenant/ YENI Muzik asistani system prompt
api.php Modules/AI/routes/ GUNCELLE tenant1001-assistant routes ekle
tenant1001-ai-chat.js public/themes/muzibu/js/ai/ YENI Alpine.js store + action handlers
ai-chat-widget.blade.php resources/views/themes/muzibu/components/ YENI Floating chat widget UI
app.blade.php resources/views/themes/muzibu/layouts/ GUNCELLE Widget include + JS load
5
Yeni Dosya
3
Guncellenecek
4
Modules/AI icinde
2
Frontend (JS+Blade)

Ilerleme Takibi

Genel Ilerleme
0 / 33 Gorev

Backend (Controller, Service, Helper)

Tenant1001AIController.php olustur
tenant1001AssistantChat() metodu
Tenant ID === 1001 kontrolu
Request validation
Tenant1001ContextBuilder.php olustur
buildSongContext()
buildAlbumContext()
buildPlaylistContext()
buildGenreContext()
buildSectorContext()
buildGeneralContext()
Tenant1001SubscriptionHelper.php olustur
getUserSubscriptionContext()
getSubscriptionPlans()
getDeviceInfo()

API Routes & System Prompt

/api/ai/v1/tenant1001-assistant/chat route
/api/ai/v1/tenant1001-assistant/history route
Muzik Asistani System Prompt
Action Button JSON response formati

Frontend (Alpine.js, Widget)

tenant1001-ai-chat.js Alpine store
sendMessage() fonksiyonu
renderActions() fonksiyonu
executeAction() click handler
Player entegrasyonu (muzibuApp)
Floating Widget blade component
Auto context (calan sarki)

Ek Ozellikler

AI Playlist olusturma (create_playlist)
Dinleme gecmisi analizi (SongPlay)
Infinite Queue entegrasyonu

Test Senaryolari

Guest kullanici senaryosu
Trial kullanici senaryosu
Premium kullanici senaryosu
Action butonlari calisiyor mu

Ozet & Sonraki Adimlar

7
Dosya
Controller, Service, Helper, JS, Blade
8+
Action Turu
play, favorite, share, navigate...
%100
Tenant-Aware
Sadece Tenant 1001'de calisir

Dosya Isimlendirme (Tenant1001 Konvansiyonu)

  • Tenant1001AIController.php
  • Tenant1001ContextBuilder.php
  • Tenant1001SubscriptionHelper.php
  • tenant1001-ai-chat.js
  • Alpine.store('tenant1001AI')
  • feature_slug: 'tenant1001-assistant'