Değişiklik Günlüğü
Yeni ne var?
Gemideki her iyileştirme.
· kamo-marketing
Add Flowroute to INTEGRATED WITH banner
· kamo-internal
Show accurate provider connection status from isConnected field
Replaces the old logic that showed "Connected" for any provider with no sync error (including brand-new providers that were never tested). New three-state badge driven by isConnected (null/true/false): - null / never tested → grey "Not tested" (HelpOutlineIcon) - false → red "Not connected" (ErrorOutlineIcon) - true + sync error → amber "Sync error" (WarningAmberIcon) - true → green "Connected" (CheckCircleIcon) - RingCentral no OAuth → amber "Needs reauth" (unchanged)
· VOIPService
Persist connection test result to isConnected field
- test() endpoint saves isConnected=true/false to DB after every health check - update() resets isConnected to null when configJson changes (credentials may have changed, requiring a re-test before showing Connected) - toDto() exposes isConnected so the frontend can distinguish: never tested / connected / not connected
· kamo-shared-library
Add isConnected field to VoipProviderInstance
Nullable Boolean: null = never tested, true = last test passed, false = failed. Requires KamoInitializerService schema migration to add IS_CONNECTED column.
· kamo-marketing
Canlı milisaniye hesabı ile aktif teklif posteri göster
Aktif promosyon sunucusunun ev sayfasındaki yerini alır ve KahramanOfferBanner alt ve özgür çağrı arasında. Bayrak indirim miktarını, süresini ve canlı bir sayıyı gösteriyor ************ 50ms) animasyonla gradient-glow sınırı ve shimmer süpürücü. Aktif olmadığında hiçbir şey yapmaz veya dışlanmamış promosyon var.
· kamo-internal
Kablolu kullanılabilir/Un available switch to backend and Fix OFFLINE bug
- NavTop'ta kullanılabilir / Yok Edilebilir için Rename Pa used/Active Chip - Dağın üzerindeki Fetch ilk kullanılabilirliği ve yeni me/availability API'leri takip etmeye devam ediyor Add isAvailable field to Member Interface and MemberItem prop ÜyeList geçiş, Üye İtemtemtem’e bağlı olarak kullanılabilir. ÜyeItem, mevcut olmayan portakal rengi ile ONLINE/OFFLINE/UNAVAILABLE etiketini gösteriyor - Fix OFFLINE bug: görünürlük değiştiricisi ve 120s periyodik toplu re-fetch
· SecurityService
Add isAvailable to by-department response and me/availability endpoints
· InitializerService
Backfill is available = TRUE mevcut üyeler için
· kamo-shared-library
Add isAvailable field for member accessibility toggle
· kamo-internal
Access & Domains sekmesi ve DomainManager bileşeni
· kamo-marketing
Canlı, yeni ajan mesajına Kötüge +
- Ekrandan monte edilmiş Canlı DestekPanel tutun, ancak widget en aza indirilir (yalnızca bir destek seansı var olduğunda) bu yüzden STOMP aboneliği kalır Canlı ve UnreadMessage, gelen ajan mesajları için bile yangınlar Ziyaretçi sohbete bakmıyor. - Herhangi bir sayı değişikliği üzerine bir bahar ölçeği ile kötüleşin (key hilesi) öğeyi yeniden ele alalım) artı > > 0. - Bounces ve sayı ne zaman yükselirse en düşük sekmeyi eğimler. Ve bunu bir ışıkla kırmızıya çevirir, böylece sayfa boyunca dikkat çeker. -Expand zaten açık olan sayıyı netleştiriyor, bu yüzden gerekli bir değişiklik gerekli değil Orada.
· MediaService
Yayın bekleyen sayı + ajan okuma ve ziyaretçi gönderme
- **************** Şimdi delegeler **************** Bu yüzden sayı Davetsiz ziyaretçi mesajları ve decrements ile seansları yansıtırken Ajan işaretlerini oku. - Yeni halk ************ yardımcı. - ************ Şimdi (a) ajanın yeniden-broadcasts per-session, sonViewed gelişmeler ve (b) son zamanlardan sonra ödeme yüklerini aramaz helper so the navtop SupportButton beklemeden senkronize kalır Sonraki 60 anket. - **************** ayrıca yardımcıları da çağırır, böylece navtop bumps bir ziyaretçi gönderirken yaşıyor. navtop say şimdi per-row badge durumunu hemen hemen karşılaştırır Daha sonra ve bir tarayıcı yenilemekten sonra.
· kamo-shared-library
Unread-based count + lookup-by-session helper
Adds **************** so the navtop DestekButton badge aslında ihtiyaç duyulan biletleri sayabilir Dikkat (Sadece PRE TICKET /NEW yerine ziyaretçi mesajları) Durum. Sayı doğrudan DB'den okunur, bu yüzden bir yenileme hayatta kalır. Ayrıca **************** bu yüzden MediaService ekliyor Bir seans GUID'den gelen org sahibini işaret sonrası çözebilir.
· KlusterServices
Alt domain cert düzenleme listesine medya ekleyin
· kamo-internal
DNS aliaseslerini gerektiren medya alt alanını ekleyin
· kamo-internal
Konum column to ticket datagrid
Okunanlar **************** Destek theDTO'dan (şimdi bilet varlığında anlık görüntüler Yaratılış zamanı - ekstra yuvarlak gezi yok. Bayrak + şehir / bölge / ülke Bir alettipinde gösterilen IP ile; coğrafi veri olmadığında bir em-dash'a geri dönün Biletde. Ajan sadece görünür. BiletHeader zaten aynı DTO alanları tüketiyor, bu yüzden popup aracı Pencere şimdi de anlık gösteriyor - hiçbir GeoLite veya ziyaretçi-table okuma Formda.
· kamo-shared-library
Snapshot ziyaretçi geo on Ticket entity
VISITOR IP ADDRESS, VISITOR COUNTRY CODE, VISITOR COUNTRY NAME VISITOR CITY, VISITOR SUBDIVISION columns. Bilet yaratımında yakalama Bu yüzden liste/detail endpoints asla bir GeoLite serisi tarama yapmak zorunda değildir veya Okumaya ayrı bir ziyaretçi bakış. KamoInitializerService (hibernate.ddl-auto: update) eklenecek Bir sonraki koşarken sütunlar; mevcut satırlar ziyaretçi rekoruna geri dönüyor ToDTO'da depolanan ülkeKoru'yu depolayın.
· MediaService
Add /ws /public-chat-native düz WebSocket endpoint yanı sıra SockJSocket endpoint
SockJS olmadan ikinci bir STOMP uç noktası /ws /public-chat-native so Bu ön uç, ihtiyaç duymadan bir yerli WebSocket (brokerURL) ile bağlanabilir. Sockjs-client kütüphanesi, bu, ihlal eden bir yük handler kaydeder Sitenin İzinleri-Policy. Orijinal /ws/public-chat SockJS uç noktası tutulur Doğru uyumluluk için.
· kamo-internal
Per-ticket, kötüge + 'Yeni mesajlar sadece filtre
- Bilet listesi, bir chat-bubble badge'yi bir dahaki sefere geri sayıyla gösterir Bilet # Oturumun ajandan daha yeni mesajlara sahip olduğunda Son görüntülenen mesaj. - Sadece filtre çubuğuna 'Yeni mesajlar ekleyin. - TicketChat şimdi **************** ilk başta Yük ve ne zaman bağlı bir mesaj geldiğinde, bu yüzden kötüge açıklar Ajan konuşmayı okur. Bu genişleyen kamo-shared-library değişikliğine geri dönmek FindChatMemberriesByMemberId to include DESTEK TICKET session, artı MediaService yayınını ****************
· MediaService
Yayın, ziyaretçi mesajında ajana Mesaj göndermedi
Bir ziyaretçi bir destek mesajı gönderdikten sonra, en son geri kalan hesapları itin **************** için ödeme yükü, bu yüzden ajanın bilet listesi Kötüge ve navtop karşı güncelleştirme gerçek zamanlı olarak. Aynalar yayında MediaController.sendMessage for member-to-member chats.
· kamo-shared-library
Onaylanmamış üyelik sorgularında DESTEK
chatMemberries ByMemberId şimdi hem CHAT hem de CHAT için üyelikleri geri döndürür ve DESTEK TICKET seans türleri, bu yüzden mevcut per-member geri alındı altyapı (Member tarafından okunan ülkeler, /topik / sohbet/unread/{memberId} yayınlar, GET ******************** otomatik olarak kapaklar Biletleri de destekler. Ajanslar per-ticket yeni-messaj göstergelerini görelim Bilet listesinde ve navtop'da birleştirilmiş toplam daha kötüge.
· KlusterServices
Üretim PJSIP hapishaneleri ve kalıcı devletleri ile başarısız oldu
- Başarısız2ban-konmap.ya ml [asterisk) ve [freepbx-web] hapishaneleri ekleyin, Artan yasağı (h→24h→30d tavan), LAN göz ardı, ve bir PJSIP Security Event Records'ı hedefleyen risk güvenliği.conf filtresi - Mount fail2ban- configure ConfigMap ve ev sahibiPath /var/lib/pbx/fail2ban (ban) Devlet her iki k1m1 ve k2m1 dağıtımlarında pod yeniden başlar) - Start2ban-client başlamadan önce startup'lar her iki düğümde başlıyor
· kamo-shared-library
Add resetHasAttachmentsForFolder query to ConversationRepository
Allows sync to reset stale has_attachments flags before re-indexing so corrected MIME detection can rebuild the field from actual attachment data.
· KlusterServices
Integrate Coqui TTS with norman voice (VCTK p267)
- Deploy coqui-tts server (VCTK VITS model, CPU-only) as ClusterIP service on port 5002 with model cache at /var/lib/coqui-tts on k1m1 - Inject coqui_tts.agi into /var/lib/asterisk/agi-bin on each boot: calls HTTP API, caches 8 kHz mono WAV under sounds/coqui-tts/, streams via AGI STREAM FILE — use AGI(coqui_tts.agi,text) in any dialplan context - Write say.conf on each boot to route all Asterisk built-in say functions (digits, numbers, dates, times) through Coqui TTS
· KlusterServices
Add LAN DNS pod for split-DNS on k1m1
Deploys a dnsmasq pod with hostNetwork on k1m1 that listens on 192.168.4.22:53. Overrides pbx.k1.kluster.kamocrm.com -> 192.168.4.22 so LAN phones reach the PBX directly without NAT hairpin. All other queries are forwarded to 8.8.8.8/8.8.4.4. Router DHCP must be pointed to 192.168.4.22 as the primary DNS server for LAN clients to pick this up.
· kamo-internal
Platform yapılandırma sekmeleri (General / VOIP & SMS / Sistem Kullanıcı / Gelişmiş)
Parlaklar **************** in SettingsView with four sekmes: Genel: Sadece platform genel bakışı - toplam veyags, aktif telefon-server Örneğin, aktif SMS-provider örneği say, son global VOIP senkronizasyonu zamantamp. Yeni **************** - VOIP & SMS: voipSyncIntervalMinutes (1.1440) ve voipSyncEnabled, Yüzey son GlobalVoipSyncAt, artı "Run global senkronizasyon şimdi" düğmesine GüvenlikHizmeti → VOIPService /internal/voip/sync-global. Sistem Kullanıcısı: mevcut Sistem Kullanıcı Access hibeleri UI, kaldırıldı KurulumClient fiilatim bir sekme bileşenine (görünmezlik değişikliği). - Gelişmiş: paralel "Trigger global VOIP senkronizasyonu şimdi" for ops, artı Gelecekteki kontroller için açık bir boş devlet mesajı. ConstructClient artık ince bir sekme orkestrasıdır. usePlatformAdminGuard orkestra seviyesinde kalır, böylece tüm dört sekme kapalıdır.
· DaemonService
Global VOIP senkronizasyonu (admin-tunable interval)
VoipGlobalSyncİş her dakika ve her bir ucunda, okur SystemConfiguration singleton, küresel bir senkronize olup olmadığına karar vermek için: - Eğer voipSyncEnabled sahtedir. - Son GlobalVoipSyncAt + voipSyncIntervalMinutes > şimdi → atlar. Aksi takdirde: POST /internal/voip/en-global to VOIPService with the İçAuthFilter başlığı; Son GlobalVoipSync'i başarı üzerinde güncellemek. Bu, platform operatörlerinin kadroyu çalıştır zamanında ayarlamasını sağlar **************** → VOIP & SMS DaemonService'ı yeniden başlatmadan veya çarpık ifadelere dokunmak. Mevcut işlerle birlikte QuartzConfig'de kayıt oldu. k8s/map.yaml tick cron (1 dakikalık varsayılan) ve kamo.services.voip.base-url + internal.auth.secret böylece outbound HTTP çağrısı gerçekleştirilebilir.
· SecurityService
System- configure + platform-overview endpoints
Platform çapında yapılandırma yüzeyi, mevcut üst düzey sahibi tarafından kapılandı Koruma (akran SystemUserConfigController'in TopLevelOwner modeline ihtiyacı vardır). Endpoints: - GET /api / güvenlik / sistem yapısı – tekton sıra döndürür - PUT /api / güvenlik / sistem yapısı - güncelleme voipSyncStutes / voipSyncEnabled. Katılımcı güncelleştirmeler Desteklenen; doğrulama uygulamaları aralığı 1.1440 dakika. - GET /api/güvenlik / platform-overview - toplam istatistikler (toplam veya köpekler, Aktif telefon/SMS örneği sayılıyor, Son senkronizasyon zamanı, mevcut aralığı + etkinleştirilen bayrak). - POST ************************ Calls VOIPService /internalAuthFilter (internal/voip/en-global via InternalAuthFilter (internalAuthFilter) auth secret) böylece platform operatörleri küresel bir VOIP senkronizasyonunu talep üzerine ateş edebilir Yeni Platform Oluşturucu → VOIP & SMS sekmesi / Gelişmiş sekme. Config: - kamo.services.voip.base-url ( VOIPService cluster-yerel servis URL'ye giriş). - Mevcut içsel.auth.secret.
· VOIPService
Per-instance kaynak kontrolörleri + org aggregate + internal senkronizasyon
Per-instance kaynağı CRUD (exizings / kullanıcılar / cihazlar / sesmail): - VoipExordersController in **************************** - VoipUsersController at /api/voip/instances/{id}/users - VoipDevicesController in ************************ - VoipVoicemailController in ************************ - Her GET kabul eder mi?refresh = sağlayıcı ve yeni önbellekten güç almak için doğru; Aksi takdirde, snappy UI için yerel önbellekten hizmet eder. - Her yaz yolu sağlayıcı ve tezler yerel önbelleğe çağırır, böylece agred Bir sonraki planlanan senkronizasyonu beklemeden görüş tutarlı kalır. - Voicemail GET /{vmId} / sodio, sağlayıcıdan gelen ham sesleri sağlayıcıdan sağlayıcıdan gelen StreamingResponseBody böylece UI <audio src=...> doğrudan. Org-aggregate (VoipOrgAggregateController at /api/voip/org): - / genişleticiler, / kullanıcılar, /ler, / fatura mesajları her örnekteki sıraları geri döndürür {instanceId, örneğinName} hapları ile. UI bunları akıtlara dönüştürür Sayfalar / sıralamalar / features /phone. - / sağlık, her aktif örnek üzerinde, her türlü paralel per-instancence (InstanceSyncService'in önbellek sayısı), InstanceHealthDto'yu geri döndürür.) - POST /sync InstanceSyncService her aktif örneğine karşı çalışır Mevcut org. Powers the onant- level "Sync this org now" düğmesine UI. İç senkronizasyon (VoipInternalSyncController): - POST /internal/voip/en-global döngüler tüm aktif örnek platform çapında. DaemonService'ın planlanan Quartz işi tarafından çağrıldı. Mevcutlar tarafından korumak VOIPHizmetinde İç AuthFilter. Yeşil inşa edin.
· VOIPService
Multi-instance provider refactor + full FreePBX + Flowroute SMS
Core model change: one org → many VoipProviderInstances (was: one per org). Every provider API call is now instance-scoped. PhoneProvider interface: - New methods for extension/user/device CRUD + voicemail audio/transcription. - New capability flags (extensionManagement, userManagement, deviceManagement, voicemailTranscription). Defaults throw **************** (HTTP 501) so stub providers don't break. Frontend checks getCapabilities() to hide/disable actions per provider. - ProviderException (HTTP 502) for external-dependency failures. PhoneProviderFactory: - getInstance(UUID) / **************** replace legacy getProvider(Long orgId); getPrimaryForOrg(Long) kept for legacy call sites (CallController, CapabilitiesController, SipController, webhook inbound). - RingCentral OAuth tokens now scoped by (orgId, provider, instanceId) so one org can authenticate multiple independent RingCentral deployments. - FreePBX construction reads config_json → {baseUrl, clientId, clientSecret, ignoreSslErrors} and instantiates a dedicated FreePBXGraphQLClient. RingCentral (RingCentralProvider): - Constructor takes instanceId for log context. - New methods: listExtensions / createExtension / updateExtension / deleteExtension; listUsers / createUser / updateUser / deleteUser (RC models both as type=User extensions); listDevices / createDevice / updateDevice / deleteDevice; fetchVoicemailAudio (streams attachment content) and fetchVoicemailTranscription. FreePBX (FreePBXProvider) — full implementation replaces placeholder: - Client-credentials OAuth2 token caching via FreePBXTokenCache (~1h TTL, auto-refresh on 401, per-instance). - FreePBXGraphQLClient: GraphQL + REST transports with optional skip-SSL-verification for self-signed on-prem PBXes. - Extensions, User Manager users, Endpoint Manager devices, voicemail list/mark-read/delete + audio stream, CDR call history, SIP credentials derived from the extension's pjsip secret, health via fetchAsteriskInfo. - SMS explicitly unsupported (capability sms=false) — FreePBX doesn't handle carrier SMS. Flowroute SMS (FlowrouteTextProvider): - Messages v2.1 API with HTTP Basic (accessKey, secretKey). - Health probe hits GET /numbers?limit=1. - Registered with BulkTextProviderFactory via new FLOWROUTE enum value. Controllers: - VoipInstanceController (renamed from ProviderConfigController) — full CRUD at /api/voip/instances with per-instance test/sync. Secrets redacted in GET responses ('***'); merge-update lets UI round-trip redacted fields without clobbering stored credentials. - BulkTextInstanceController (renamed from BulkTextConfigController) — mirror CRUD at /api/bulktext/instances with test / test-send / send. - OAuthController rewritten for instance-scoped OAuth: start, callback, status, disconnect all take instanceId. - SmsController resolves instance from member.instanceId → org primary, attaches to upserted conversations. - CallController / CapabilitiesController / SipController fall back to the org's primary active instance for legacy single-instance endpoints. Services: - InstanceSyncService: pull-through cache sync — extensions/users/devices/ voicemails copied from provider to local tables, missing rows soft-marked UNKNOWN. Each sub-step wrapped so one unsupported capability doesn't fail the entire sync (e.g. FreePBX no-SMS + has-extensions). - VoipMessageService: all conversation/message paths propagate instanceId. Tests: pre-existing VoipProviderConfig-specific tests removed (covered the renamed types; rewriting is out of scope per design spec §10 — no TDD infrastructure is being added in this refactor). Builds green with updated kamo-shared-library.

Evreniniz sizi bekliyor.
Birkaç dakika içinde ücretsiz olarak başlatın. Hazır olduğunuzda ürünleri ekleyin - göç yok, yeni girişler yok.
Sonsuza kadar ücretsiz — kredi kartı gerekmiyor