Jump to content
KAMOUniverse

Changelog

Ada kabar baru.

Setiap perbaikan pada platform, sebagai kapal.

  1. · kamo-marketing

    Add Flowroute to integrations hub page

  2. · kamo-marketing

    Add Flowroute to INTEGRATED WITH banner

  3. · 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)

  4. · 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

  5. · 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.

  6. · 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.

  7. · 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

  8. · SecurityService

    Tambahkan Tersedia ke respon departemen dan saya / ketersediaan titik akhir

  9. · InitializerService

    Isi ulang adalah _ tersedia = TRUE untuk anggota yang ada

  10. · kamo-shared-library

    Tambahkan ruas tersedia bagi ketersediaan anggota

  11. · kamo-internal

    Hapus komponen Access & Domains tab dan DomainManager

  12. · 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.

  13. · 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.

  14. · 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.

  15. · KlusterServices

    Tambahkan media ke daftar pengaturan cert subdomain

  16. · kamo-internal

    Tambahkan subdomain media yang diperlukan alias DNS

  17. · 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.

  18. · 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.

  19. · 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.

  20. · 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 * * * * * * * * * * * * * * * *

  21. · 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.

  22. · 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.

  23. · 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

  24. · 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.

  25. · 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

  26. · 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.

  27. · 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.

  28. · 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.

  29. · 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.

  30. · 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