Changelog
Ada kabar baru.
Setiap perbaikan pada platform, sebagai kapal.
· kamo-marketing
Add Flowroute to integrations hub page
· 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
Tampilkan panji penawaran aktif dengan countdown milidetik hidup
Mengambil server promosi aktif pada halaman rumah dan membuat HeroOfferBanner antara subheadline dan bebas-selamanya callout. Banner menunjukkan jumlah diskon, durasi, dan hitung mundur hidup * * * * * * * * * * * * * pada 50ms) dengan animasi gradient- cahaya perbatasan dan menyapu berkilauan. Tidak menghasilkan apa-apa ketika tidak aktif atau promosi yang tidak berakhir.
· kamo-internal
Switch yang tersedia / tak tersedia ke backend dan memperbaiki kutu kehadiran OFFLINE
- Ubah nama chip yang ditahan / aktif ke Tersedia / tidak tersedia di NavTop - Ambil ketersediaan awal pada kait dan perkuat toggles melalui baru me / avability API - Tambahkan ruas Tersedia ke antar muka Anggota dan prop Anggota - Anggota List lolos Tersedia dari oleh-departemen Respon ke Anggota Butir - Anggota Butir menunjukkan ONLINE / OFFLINE / UNAVAILABLE label dengan warna oranye untuk tidak tersedia - Perbaiki kutu OFFLINE: tambahkan detak jantung visibilitychange dan 120-an periodik massal re- fetch
· SecurityService
Tambahkan Tersedia ke respon departemen dan saya / ketersediaan titik akhir
· InitializerService
Isi ulang adalah _ tersedia = TRUE untuk anggota yang ada
· kamo-shared-library
Tambahkan ruas tersedia bagi ketersediaan anggota
· kamo-internal
Hapus komponen Access & Domains tab dan DomainManager
· kamo-marketing
Siaran tidak terbaca badge + bounce pada pesan agen baru
- Keeps LiveSupportPanel dipasang di luar layar sementara widget diminimalkan (hanya ketika sesi dukungan ada) sehingga tetap langganan StoMP hidup dan onunreadMessage kebakaran untuk pesan agen masuk bahkan ketika pengunjung tidak melihat obrolan. - Animasikan lencana dengan skala musim semi pada setiap perubahan hitungan (trik kunci re- mount elemen) plus a continue Tailwind ping ring while > 0. - Bounces dan tilts tab diminimalkan sendiri setiap kali menghitung naik, dan memerankannya merah dengan cahaya sehingga menarik perhatian dari seluruh halaman. - HandleExpand sudah membersihkan hitungan terbuka, sehingga tidak ada perubahan yang diperlukan disana.
· MediaService
Broadcast tertunda jumlah + belum dibaca pada agen baca & pengunjung mengirim
- * * * * * * * * * * * * * * * * sekarang delegasi ke * * * * * * * * * * * * * * * * * sehingga menghitung mencerminkan sesi dengan pesan pengunjung yang belum dibaca dan pengurangan ketika Agen memanggil MarkAsRead. - New public * * * * * * * * * * * * * * pembantu. - * * * * * * * * * * * * sekarang (a) re-broadcast agen per-session unread payload after lastViewed progress and (b) call the Helper sehingga Navtop SupportButton tetap sinkron tanpa menunggu polling 60-an berikutnya. - * * * * * * * * * * * * * * juga memanggil pembantu sehingga Nagtop benjolan hidup ketika pengunjung mengirimkan. Jumlah navtop sekarang cocok dengan keadaan lencana per- baris baik segera setelah klik dan setelah penyegaran peramban.
· kamo-shared-library
Cacah unread- berbasis + lookup -by-session helper
Tambahkan * * * * * * * * * * * * * * * * * * sehingga navtop Lencana SupportButton dapat menghitung tiket dukungan yang benar-benar perlu perhatian (memiliki pesan pengunjung yang belum dibaca) bukan hanya PRE _ TIKET / NEW status. Count dibaca langsung dari DB sehingga bertahan penyegaran. Juga menambah MediaService dapat menyelesaikan pemilik org dari GUID sesi setelah MarksRead.
· KlusterServices
Tambahkan media ke daftar pengaturan cert subdomain
· kamo-internal
Tambahkan subdomain media yang diperlukan alias DNS
· kamo-internal
Tambahkan kolom Lokasi ke antrean tiket
Baca * * * * * * * * * * * * * * * Langsung dari SupportTicketDTO (sekarang snapshot pada entitas tiket di waktu penciptaan - tidak ada perjalanan tambahan). Flag renders + city / region / country dengan IP yang ditampilkan dalam tooltip; falls kembali ke em- dash ketika tidak ada data geo adalah pada tiket. Agen hanya melihat. TicketHeader telah mengkonsumsi ruas DTO yang sama, sehingga perangkat popup jendela sekarang menampilkan snapshot juga - tidak ada GeoLite atau visitor- tabel baca Sedang render.
· kamo-shared-library
Pengunjung Snapshot geo pada entitas tiket
Tambahkan VISITOR _ IP _ ADDRESS, VISITOR _ CODE, VISIITOR _ COME _ COME, VISITOR _ CITY, VISITOR _ SUBDIVISI kolom. Ditangkap pada pembuatan tiket sehingga daftar / detail titik akhir tidak pernah harus melakukan pemindaian jangkauan GeoLite atau sebuah visitor terpisah-tabel lookup pada waktu baca. KamoInitializerService (hibernate.ddl-auto: update) akan menambahkan kolom ketika dijalankan selanjutnya; baris yang ada jatuh kembali ke catatan pengunjung Tersimpan Kode Negara di TDTO.
· MediaService
Tambah / ws / public -chat-native plain WebSocket titik akhir bersama SockJS
Register sebuah titik akhir StoMP kedua tanpa SockJS di / ws / public-chat-native jadi bahwa antarmuka dapat terhubung dengan asli WebSocket (brokerURL) tanpa membutuhkan perpustakaan sockjs- klien, yang register sebuah penangan membongkar yang melanggar Situs Permiis- Kebijakan. Asli / w / public -chat SockJS titik akhir disimpan untuk kompabilitas terbalik.
· kamo-internal
Per- tiket unread badge + 'pesan baru saja' filter
- Daftar tiket menunjukkan lencana chat- gelembung dengan jumlah yang tidak terbaca di sebelah tiket # kapanpun sesi memiliki pesan yang lebih baru dari agen pesan terakhir. - Tambahkan sebuah 'pesan baru saja' filter beralih ke filter bar. - TicketChat now calls * * * * * * * * * * * * * * * * on initial beban dan setiap kali pesan inbound tiba, sehingga lencana membersihkan sebagai agen membaca percakapan. Relies pada kamo- shared- perpustakaan perubahan yang memperluas Find ChatChatMembershipsByAnggota untukmenyertakan sesi SUPPORT _ TIKET, plus Siaran MediaService di * * * * * * * * * * * * * * * *
· MediaService
Siarkan jumlah yang tak terbaca ke agen pada pesan pengunjung
Setelah pengunjung mengirim pesan dukungan, tekan tak terbaca terakhir payload ke * * * * * * * * * * * * * sehingga tiket- agen Lencana dan pembaruan counter navtop secara real time. Cermin siaran di MediaController.sendMessage untuk anggota-to-anggota percakapan.
· kamo-shared-library
Termasuk sesi SUPPORT _ TIKET dalam permintaan keanggotaan yang belum terbaca
find ChatChatMemberships ByMberId sekarang kembali keanggotaan untuk baik CHAT dan Tipe sesi SUPPORT _ TIKET, jadi tipe anggota perread- yang ada infrastruktur (getUnreadCountsByMber, / topic / chat / unread / {memberId} siaran, GET * * * * * * * * * * * * * * * * * * secara otomatis mencakup tiket dukungan juga. Mari kita lihat indikator pesan baru. dalam daftar tiket dan gabungan total lencana yang belum dibaca di navtop tersebut.
· KlusterServices
Kegagalan Produksi dengan penjara PJSIP dan keadaan persisten
- Tambahkan fail2ban- configmap.yaml dengan [asterisk] dan [freepbx-web] penjara, eskalasi larangan peningkatan (1h Aver24h 130d), dungu LAN, dan custom asterisk-security.conf filter menargetkan catatan SecurityEvent PJSIP - Mount Fall2ban- config ConfigMap dan hostPath / var / lib / pbx / fail2ban (ban keadaan tetap berlangsung di seluruh pod restarts) dalam kedua k1m1 dan k2m1 explastments - Wire configs in startupsh before fail2banclient start on both node
· 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
Tab konfigurasi platform (Jenderal / VOIP & SMS / Sistem Pengguna / Lanjutan)
Wraps * * * * * * * * * * * * * * dalam SettingsView dengan empat tab: - Umum: read-only platform overview - total orgs, aktif server telepon instance count, active SMS-provider count, last global VOIP sync timestamp. Reads dari baru * * * * * * * * * * * * * * * * * * * - VOIP & SMS: edit voipSyncIntervalMinutes (1.. 1440) dan voipSyncEnabled, permukaan terakhir GlobalVoipSyncAt, ditambah tombol "Jalankan global sync sekarang" yang panggilan Layanan SecurityService AverVOIPService / internal / voip / sync-global. - Pengguna Sistem: Hibah Akses Pengguna Sistem yang ada, terangkat dari Konfigurasi Klien verbatim ke dalam komponen tab (tidak ada perubahan perilaku). - Advanced: parallel "Trigger global VOIP sync now" button for ops, plus pesan eksplisit-state untuk masa depan kontrol. Klien ConfigurationClient sekarang menjadi pengelola tab tipis. usePlatformAdminGuard tetap di tempat pada tingkat antrestrator jadi semua empat tab gated.
· DaemonService
Global VOIP sync job (admin- tunable interval)
VoipGlobalSyncJob kutu setiap menit dan, pada setiap kutu, membaca SystemConfigure singleton untuk menentukan apakah sinkronisasi global jatuh tempo: - Jika voipSyncEnabled adalah mistake palsu. - Jika LastGlobalVoipSyncAt + voipSyncIntervalMinutes > sekarang. - Jika tidak: POST / internal / voip / sync-global ke VOIPService dengan Header Internallah Filter; update lastGlogalVoipSyncAt pada sukses. Hal ini memungkinkan operator platform menyesuaikan irama pada waktu-jalan dari * * * * * * * * * * * * * * * VoIP & SMS tanpa memulai ulang Layanan DaemonService atau menyentuh ekspresi cron. Terdaftar dalam QuartzConfig bersama dengan pekerjaan yang ada. k8s / configmap.yaml tambahkan cron tick (standar 1-menit) dan kamo.serves.voip.base- url + convenal.mest.secret sehingga panggilan HTTP outbound dapat mengotorisasi.
· SecurityService
Sistem--config + platform- overview titik akhir
Permukaan konfigurasi Platform-lebar, digated oleh pemilik tingkat atas yang ada Penjaga (cocok dengan SystemUserConfigController 's RequreLevelOwner pola). Titik Akhir: - GET / api / keamanan / sistem- config - mengembalikan baris singleton - PUT / api / keamanan / sistem- config - update voipSyncIntervalMinutes / voipSyncEnabled. Pemutakhiran sebagian didukung; validasi memaksa interval 1.. 1440 menit. - GET / api / keamanan / platform-overview - statistik dikumpulkan (total orgs, jumlah instansi telepon / SMS aktif, timestamp sinkronisasi terakhir, saat ini interval + enabled flag). - POST * * * * * * * * * * * * * * * * Menyebut VOIPService / internal / voip / sync-global melalui Internally AutFilter (internal auth rahasia) sehingga operator platform dapat api VOIP sync global sesuai permintaan dari tab platform konfigurasi voIP & SMS / tab lanjutan. Konfigurasi: - kamo.serves.voip.baseurl (baku ke layanan URL VOIPService). - Reses extraal.with.secrets yang sudah ada.
· VOIPService
Per- instance resource controller + org kumpulan + internal sync
Misalnya sumber daya CRUD (ekstensi / pengguna / perangkat / voicemail): - VoipExtensionsController at * * * * * * * * * * * * * * * - VoipUsersController at / api / voip / instances / {id} / userserserserller - VoipDevicesController at * * * * * * * * * * * * * * * - VoipVoicemail Controller at * * * * * * * * * * * * * * * - Setiap GET menerima? refresh = true to force- fetch dari provider dan refresh cache; jika tidak berfungsi dari lokal cache untuk UI tajam. - Setiap jalur tulis memanggil penyedia DAN menaikan cache lokal sehingga kumpulan views tetap konsisten tanpa menunggu untuk sync dijadwalkan berikutnya. - Voicemail GET / {vmId} / audio stream audio mentah dari penyedia via StreamingResponseBody sehingga UI dapat < audio src =... > secara langsung. Organ-kumpulan (VoipOrganiagaggregates Controller at / api / voip / org): - / ekstensi, / pengguna, / perangkat, / pesan suara kembali baris di setiap instansi dengan pil "instanceId", instanceName}. UI membuat ini menjadi kumpulan tab dalam / konfigurasi / fitur / telepon. - / kesehatan berjalan checkHealth () pada setiap instansi aktif dalam per- contoh paralel (via InstanceSyncService 's cache count), return InstanceHealthDto []. - POST / sync menjalankan InstanceSyncService terhadap setiap instansi aktif dari saat ini org. Powers the tenant-level "sync this org now" button in the UI. Internal sync (VoipInternalSyncController): - POST / internal / voip / sync-global loops semua platform aktif untuk -wide. Disebut oleh pekerjaan DaemonService dijadwalkan Quartz. Dilindungi oleh yang ada InternalOtorisasi Filter dalam VOIPService. Bangunan hijau.

Alam semestamu menunggu.
Mulai gratis dalam beberapa menit. Tambahkan produk kapanpun Anda siap — tidak ada migrasi, tidak ada login baru.
Gratis selamanya — tidak diperlukan kartu kredit