Proje: Okul Platform · Hub: Okul Platform — Architecture
Customer.io
Config: config/services.php → customerio.*
İki bağımsız servis:
B2CService (app/Integrations/CustomerIO/Services/B2CService.php)
- Veliler (User) için
importUser(User)— Kişiyi CIO’ya gönderbatchImportUsers(Collection)— TopludispatchDeleteUser(int)— Sil- Feature flag:
config('services.customerio.b2c_enabled')
B2BService (app/Integrations/CustomerIO/Services/B2BService.php)
- Okul sahipleri/okullar için
importSchool(School, importUsers)— Okulu “object” olarak CIO’ya gönder- CIO’da B2B için Person + Object + Relationship yapısı kullanılıyor
- Feature flag:
config('services.customerio.b2b_enabled')
Paket: CustomerIO\Client — CustomerIO/ dizininde custom paket
- Batch API kullanıyor
- EU region:
track-eu.customer.io/cdp-eu.customer.io
OneSignal (Push Notification)
- Paket:
laravel-notification-channels/onesignal - Config:
services.onesignal.app_id,rest_api_key - Kullanım: User notifiable (hem B2C hem B2B)
UserNotificationIdmodeli — cihaz token’larını tutar
Infobip (SMS)
- Paket:
infobip/infobip-api-php-client - Servis:
app/Services/Sms/SmsService.php app()->singleton('sms', ...)— AppServiceProvider’da singleton- OTP gönderimi bu servis üzerinden
Typesense (Arama)
- Paket:
typesense/typesense-php+laravel/scout SchoolmodeliSearchabletrait’i ile indexleniyorSchool::toSearchableArray()— Typesense’e gönderilecek alanları tanımlar- Arama endpoint:
GET /api/search/schools(optional auth)
Sentry (Error Monitoring)
- Paket:
sentry/sentry-laravel AppServiceProvider→ Authenticated event’inde user context set edilir- Sentry’ye:
id,user_type_id,user_group_type_id,name
Sonitel (Telefon/Call)
packages/Sonitel/— Custom internal paketi- B2B’de gelen aramaları yönetir
POST /api/admin/call/b2b/forward— Aramayı yönlendirPOST /api/admin/call/b2b/hangup— Aramayı kapatInboundNumberPoolmodeli ile numara havuzu yönetimiSchoolInboundCallLog— Arama logları
Slack Logging
- Custom
SlackLogger(app/Logging/SlackLogger.php) - Rate limiting + retry mekanizması var
- Fallback: lokal dosyaya yazar (Slack down olursa)
- Belgeleme:
readmes/slack-logger.md
AWS S3 (Media)
- Paket:
league/flysystem-aws-s3-v3 - Medya yükleme:
app/Services/Media/MediaService.php
Related
- api-tech-stack — Tüm bağımlılık listesi
- api-queue-jobs — Async işler (CIO job’ları vs.)