Changelog
Ada kabar baru.
Setiap perbaikan pada platform, sebagai kapal.
· kamo-shared-library
Kolom transkrip pada Recording + RecordingMetadata
Tambahkan kolom TRANSCRIPT TEXT ke entitas Rekaman dan thread transkrip Melalui... (dengan mundur-clat konstruktor sehingga ada 5- dan 9-arg penelepon tidak terpengaruh). Populasikan oleh Merekam - menyelesaikan aliran melalui Whisper; dibuat oleh migrasi KI.
· MediaService
Verifikasi return-nav JWT signature; secure token refresh
- CanvaJwtVerifier: verifikasi korelasi _ jwt 's Ed25519 tanda tangan terhadap JWKS Canva (/ connect / keys), plus aud / exp / type; kunci cached oleh anak-anak. Kembali - nav sekarang gagal ditutup untuk impor manual jika verifikasi gagal. - CanvaTokenService: drop yang tidak efektif @ Transaksional pada diri dipanggil refresh / markDown pembantu (Spring Data 's per-call tx + per- anggota lock telah membuat rotasi token dengan benar); mengklarifikasi dengan sebuah komentar.
· KlusterServices
Membuat bisikan - asr secara independen skable (HPA, multi- node)
Buang pin tunggal-node dan beralih ke cache model per- pod sehingga pods dapat jadwal pada titik apapun, dan tambahkan HPA (min 1 / max 4, CPU 75%, disengaja skala - up diberikan model lambat cold- dimulai). whisper- asr adalah transkripsi bersama backend untuk kedua rekaman pertemuan dan VOIP rekaman / pesan suara.
· KlusterServices
Ubah teks status koneksi klien Guacamole ke KamoDesktop
Override Jadi... 'Menghubungkan ke Guacamole...' layar (dan status terkait) membaca KamoDesktop.
· MediaService
Merekam yang tak masuk akal, menahan / quota, penggunaan penyimpanan, ringkasan pipeline
- MeetRecordingController: internal (X-Internal -Auth) titik akhir paling buruk jibri postingan finalize.sh selesai rekaman ke. - MeetRecordingService: upload rekaman ke per-org MinIO (membayangkan-pertemuan-rekaman), perbanyak metadata MeetingRecording, paksa kuota penyimpanan org (deshet tertua), dan - ketika postMeetingSummaryDiaktifkan - menjalankan baris pipa ringkasan: translate (EmailService meeting-ringkasan template). - MeetRetentionSweep Retention Retention: jadwal penghapusan rekaman Retention masa lalu. - MeetConfigController: Dapatkan / perekam -penggunaan untuk pengaturan nyata penyimpanan meter. - application.yml: konversi / ai / email URL dasar + internal auth rahasia. Butuh (ops): KamoInitializer dijalankan untuk membuat MEETING _ RECORDINGS; * * * * * * * * * * * * * * * nilai harus cocok di seluruh MediaService, jibri, dan Layanan percakapan.
· EmailService
Vars contoh untuk pertemuan-ringkasan template preview
Tambahkan suatu kasus variabel sample untuk template ringkasan -pertemuan baru sehingga steward pratinjau UI render konten realistis.
· kamo-shared-library
Pertemuan - ringkasan template kanonikal
Tambahkan "meeting-ringkasan" template transkasi (subjek + bermerek HTML dengan {{roomName}} dan mentah {{summaryHtml}}) dan mendaftarkan dalam CANONICAL _ KEYS sehingga benih per org. Digunakan oleh pengiriman ringkasan AI pertemuan posting. Juga mengoreksi Jumlah kunci tes loader yang basi.
· KlusterServices
Modul moderator Prosody, bisikan-asr, upload rekaman jibri
- Meet -prosody: version- kontrol konfigurasi plugin gubahan (menangkap telah ada token _ verifikasi no-op override yang dibuat out-of-band) dan tambahkan modul mod _ token _ moderation kanonikal, diaktifkan via * * * * * * * * * * * * * * * Membuat JWT 'moderator' klaim Otoritatif - anggota menjadi pemilik, tamu / anonim tidak dapat menangkap pemilik. - whisper- asr: self-hosted speech-to-text (faster-whisper CPU, no external key) untuk posting - pertemuan transkripsi. - Meet -jibri: finalize.sh sekarang upload rekaman selesai ke MediaService * * * * * * * * * * * * dengan X-Internall-Auth sehingga mereka mendarat di MinIO + drive retention / quota + summaries. Rahasia adalah opsional sehingga jibri masih mulai jika unset.
· ConversionService
Recording transcription endpoint for post- meeting ringkasan
POST / api / conversion / meet / translate (X-Internall-Auth): menormalkan sebuah upload pertemuan rekaman ke 16kHz mono WAV melalui sebuah additive FfmpegService pembantu baru, {\ cH00ffff} Dan mengembalikan... {transkrip}. Whisper URL dari kamo.services.whisper.url.
· kamo-internal
Integrasi kalender untuk pertemuan yang dijadwalkan + meter penyimpanan rekaman nyata
- calendarIntegration Diaktifkan: ketika pada, pertemuan clubhouse dijadwalkan juga ditambahkan ke kalender pencipta (melalui sistem kalender yang ada) membawa terotentikasi / meet / join link. Peserta pengingat tetap ditangani oleh backend sweeper, jadi tidak ada duplikat email peserta. - Pengaturan rekaman: meteran penyimpanan sekarang menunjukkan penggunaan per-org nyata dari GET / API / meet / recording- penggunaan (mengganti placeholder yang dihapus).
· kamo-shared-library
MeetingRecording entitas + repositori untuk rekaman yang diambil
Tabel MEETING _ RECORDINGS baru (org, rapat ref, kamar, kunci bucket / objek MinIO, ukuran, durasi, ditangkap / kadaluwarsa penanda waktu, status ringkasan) - catatan induk untuk menyelesaikan rekaman file Jibri, mengemudi retensi / kuota dan posting-pertemuan ringkasan pemrosesan. Tabel dibuat pada jalankan KamoInitializer berikutnya.
· kamo-internal
Pemasaran aplikasi, pengaturan hub, bahan Canva
Buat Pemasaran suatu aplikasi org- kelas pertama yang dapat dilepas dan kirimkan Canva yang didukung Pengalaman penting. App-enablement: - Applipe.MARKETING cermin, Organisasi. Adalah Pemasaran getter - gerbang marketing nav (navRegistry) + bagian hak cipta (permissionAppSections, SecurityRoleManager) pada organisasi. Adalah Pemasaran - Kartu marketing dalam Manajer Fitur (/ setting / account? tab = apps) Pengaturan: - new / settings / features / marketing hub (General / Social Media providers / Canva) - pindahkan Penyedia Media Sosial dari pengaturan CRM ke Pemasaran - 3 lokasi navigasi diperbarui (pengaturan mendarat, settingsMenu, ikon Tombol Settings); titik ulang taut status batas waktu sosial Canva: - CanvaIntegrationManager setting tab + canva ProviderDef dalam platform Registri OAuth (+ logo) - / api / canva / * proxy (status, connect- start, design, exports, export- proxy, terputus) Brasero MediaService - / marketing / material: jaringan perpustakaan (pencitraan MATERIALS assoc), upload, Create-in-Canva, Import-from-Canva, back-nav auto-import
· ConversionService
Gambar mini video untuk bahan pemasaran
Canva MP4 ekspor (dan upload video apapun) lewati jalur Dok PDF dan ambil tunggal ffmpeg pasti- frame thumbnail (_ thumb _ p0.png) daripada gagal. - * * * * * * * * * * * * * * Cabang kategori VIDEO - * * * * * * * * * * * * * *
· MediaService
Backend Canva Connect OAuth + design / export
- CanvaApiClient: Otorisasi PKCE, pertukaran token / refresh / revoke, pengguna, design (create / list), expor jobs, byte fetch - CanvaTokeenService: dienkripsi per anggota token (PlatformSecretCipher), single-flight proaktif refresh (Canva refresh token adalah single-use / rotasi) - CanvaOauthornController (permit-all): connect att Á/ start Dall/ callback, kembali -nav pendaratan - CanvaController (ditulis): status, connect- start, buat / list design, ekspor (buat + poll + cache), byte export- proxy, putuskan
· kamo-shared-library
Canva integrasi + Pemasaran sebagai aplikasi org- enableable
- * * * * * * * * * * * * * * - platform Canva Hubungkan pendaftaran klien - ImageAspe.MATIALS (13, imagin- material) - org ember aset pemasaran - * * * * * * * * * * * * * * under ServiceType.MARKETING - ServiceType.MARKETING (24) KOMPLETED / difungsikan sehingga menjadi aplikasi nyata (Controller Otomatis ketentuan itu ON per org, seperti CRM) - Entitas CanvaConnection + repo: token per- anggota terenkripsi (access + refresh)
· KlusterServices
Aktifkan remerek Guacamole json-auth SSO + KamoDesktop
- JSON _ SECRET _ KEY (opsional) pada guacamole dari fungsi rahasia bersama desktop- sso Guacamole bundled - menulis -json ekstensi dewa-SSO link validate terhadap. - ekstensi -branding (judul = KamoDesktop, logo kamokrm + favicon) dibangun dari desktop / guacamole / branding / into a .jar, dikirim sebagai binari konfigurasi dan seeded menjadi GUACAMOLE _ HOME melalui sebuah Kontainer. - CI menciptakan kunci penandatanganan bersama dalam kedua namespace (desktop- sso untuk guacamole, guac-sso untuk SecurityService) dari GUAC _ SIGNING _ KEY rahasia; tidak pernah berkomitmen.
· kamo-internal
Tuhan - hanya ikon KamoDesktop (Linux + Windows) membuka sesi otomatis-terhubung
Dua ikon navigasi yang tersisa dari Analytics, hanya ditampilkan ke anggota yang berhak (adalah Allah yang ditambahkan ke NavGateContext). Setiap fetches sebuah link pendek-hidup SSO dari SecurityService dan membuka Gateway KamoDesktop dalam jendela baru, otomatis terhubung ke instansi tersebut. Menggunakan komit Tanda.
· SecurityService
KamoDesktop SSO token titik akhir bagi anggota dewa
GET * * * * * * * * * * * * * * (God- memenuhi syarat saja) mint a 5 menit guacamole-writes-json token (HMAC-SHA256 + AES-128-CBC, per ekstensi format kawat) dan mengembalikan sebuah URL autologin + auto- connect untuk KamoDesktop Gateway. Menandatangani kunci + RDP sandi yang disuntikkan dari rahasia Guac-sso; tidak pernah committed (blank-safe: SSO tetap tidak aktif sampai dikonfigurasi).
· kamo-internal
Nama kamar yang discoped, format nama kamar, pertemuan kalender Kamo, mulai pengingat; pengaturan i18n
- useMeetingDialog: nama kamar sekarang dinomespaced oleh org token sehingga dua orgs tidak pernah bisa bertabrakan ke dalam konferensi Prosody yang sama, dan menghormati org roomNameFormat (RANDOM vs DISPLAY _ NAME _ RANDOM menggunakan nama alias anggota). - MeetingComposer (kalender): "Kamo Rapat" tombol menghasilkan ruang org- scoped dan menata URL acara ke link / meet / join click-time OTK, jadi kalender mengundang penerima + pengingat ditandatangani sebagai anggota yang diverifikasi. - MeetReminderPopup: subsators to / topic / meet / reminder / {memberId} (MediService sapu) dan menampilkan "meeting starting" toast with a Join button; mount in Present Wrapper pada chatting bersama WS. - memenuhi tab pengaturan: mengganti hardcode roti panggang / error string dengan selanjutnya -intl t () kunci * * * * * * * * * * * * * * * * *
· MediaService
Jadwal rapat mulai pengingat + guest- link kadaluarsa
- MeetingReminderSweep: @ Scheduled penyapu yang kebakaran realtime "Pertemuan dimulai" Pengingat kepada anggota yang diundang di (mulai mengingatkan MinutesBefore) pada * * * * * * * * * * * * kemudian transisi pertemuan SCHEDULED PACTIVE untuk dedupe. Pertemuan lebih dari satu jam awal masa lalu adalah transisi tanpa pengingat (tidak ada back- fill spam). Klien membangun link gabungan terotentikasi dari asalnya sendiri. - * * * * * * * * * * * * * * sekarang kehormatan guestLinkExpiryHours: pertemuan lebih tua dari jendela konfigurasi org (berlabuh pada awal yang dijadwalkan, lain pembuatan) diperlakukan sebagai tidak nyaman (0 = tidak pernah berakhir).
· kamo-internal
Tampilkan ketersediaan anggota dalam daftar percakapan; ubah nama tab ke Direktori
1: 1 baris obrolan sekarang permukaan kehadiran langsung pihak lawan + ketersediaan cara yang sama tab Direktori lakukan - sama kegunaan / penggunaan keberadaan sumber dan warna / label yang sama sebagai Anggota (label dot + uppercase, berdenyut ketika daring, gray ketika offline), dengan tooltip. Group chats menyimpan "seseorang baris dukungan sosial / sosial tidak berubah. Tab anggota diganti nama menjadi "Direktori" (nilai i18n saja), yang juga membersihkan tabrakan penamaan dengan grup "Anggota" sub- tab.
· KlusterServices
Hardened KubeVirt remote desktop + Guacamole gateway
Tambahkan suatu stack desktop jarak jauh lengkap, GitOps- yang diterapkan melalui layout aliran: - KubeVirt + CDI terpasang pada waktu terbuka (URL rilis pinned- stabil) - desktop-1: Kubuntu 24.04 VM, 8 vCPU / 16Gi / 500Gi Disk blok Longhorn, net topeng (asli cluster DNS), sesi xrdp KDE; cloud- init installs Chrome, VS Code, NetBeans, Temurin JDK 21 + 17, Headlights, Kate, LibreOffice dan menghilangkan (bahaya) api. - Apache Guacamole (guacamole + guacd + Postgres config DB) di desktop.kamocrm.com; guacd menjalankan hostNetwork pada k1m1 sehingga dapat disiarkan WoL-@@ dan RDP langsung ke 192.168.4,0 / 22 LAN ketika masih mencapai VM melalui ClusterFirstWithHostNet DNS - LAN Windows PC (192.168.4.44, MAC f4: 4d: 30: 62: 8a: 68) ditambahkan sebagai koneksi dengan Guacamole asli Wake-on- LAN (paket ajaib pada sambungan, 30-an tunggu) - Edge hardening: Traefik TLS + tight desktop- rate- limit + keamanan header, plus Guacamole built -in per-IP brute- force ban - auto- cert: desktop.kamocrm.com ditambahkan ke STATIC _ DOMAINS + cross- ns mirror so Masalah manajer cert- / memperbaharui tls- desktop-kamocrm- com ke dalam desktop ns - Kredensial: pengguna 'sage'; kata sandi disuntikkan dari DESCKTOP _ PASSWORD pada waktu terbuka (envsubst / sed + complicate Secret) - tidak pernah berkomitmen
· kamo-internal
Sub-tab untuk grup obrolan, ingat tab terakhir-terbuka
Daftar obrolan disaring oleh deretan chip pil multi- pilih yang memandang tempat di bawah tab Chats. Ganti dengan kotak subtab tunggal (satu tab per grup: Anggota / Anggota / Sosial / Dukungan) styled untuk mencocokkan tab induk Anggota / Percakapan, sehingga daftar grup yang dipilih mengisi seluruh Area isi. - Bucket Aktif Tunggal bukan Set dari ember aktif; server mengambil sekarang hanya menarik kategori yang dipilih. - Default untuk Anggota Tim, dan mempertahankan tab terakhir terbuka per anggota (di seluruh perangkat) melalui us- preference store (kunci chatsActiveBucket), sedang mengatur pertama ambil sampai tab disimpan menyelesaikan sehingga dimuat secara langsung.
· kamo-internal
Jelaskan ketika surel tidak dikonfigurasi; kompose gerbang
Inbox pesan masuk sebelumnya diberikan shell penuh bahkan ketika org tidak memiliki penyedia email atau anggota tidak memiliki kotak surat, diam-diam gagal setiap Panggilan API. Tambahkan kait yang dipakai bersama EmailAffibility yang menyelesaikan apakah surel dapat digunakan dan, jika tidak, mengapa (penyedia tidak dikonfigurasi vs tidak ada kotak surat) dan apakah anggota saat ini dapat sendiri-melayani perbaikan berdasarkan hak-hak mereka. - MessageBrowser kini menampilkan panel EmailNotConfigured yang elegan, bukan kotak masuk kosong, dengan salinan + CTA yang beradaptasi dengan alasan dan anggota hak (link ke konfigurasi penyedia email untuk MANUGE _ EMAIL _ SETTINGS, atau ke tab kotak surat mereka sendiri untuk Kelola _ EMAIL _ ACCOUNTS; atau menunda ke admin). - MailButton menonaktifkan "Compose New Email" sampai email sepenuhnya siap, dengan Tooltip spesifik alasan; NavToolButton memperoleh dukungan butir nonaktifkan / tooltip. - Jangkar 'pesan /' gitignore aturan ke akar repo sehingga berhenti juga mengabaikan aplikasi / komponen / pesan / (yang diam-diam menjatuhkan berkas baru di sana).
· kamo-internal
Semua jenis Daftar percakapan + perhatian browser-tab
Percakapan subtab sekarang daftar anggota, grup, dukungan dan percakapan sosial bersama-sama, paling baru-baru ini, dengan filter multi- pilih (Anggota Tim / Anggota / Sosial / Dukungan; dua pertama menggunakan label suai org). Anggota-Anggota Team- Anggota vs dibagi oleh anterpart memberType; baris dukungan tampilkan apakah Anda atau pihak lain adalah agen; setiap baris membuka nya jendela alat asli (chatting / support / society). Tambahkan TaBAttention: dokumen lencana favicon + flashing. judul ketika ada adalah pesan-pesan tak terlihat dari tipe obrolan (jumlah merah) atau memimpin penerimaan yang tertunda (amber Schulbolt, pencocokan ikon lead / CRM; mengambil prioritas). Membaca UnreadContext + LeadAlertContext yang ada, jadi tak ada backend baru.
· MediaService
Bersatu memberi makan seluruh anggota / dukungan / sesi sosial
GET / api / media / sessions / chat sekarang menerima sebuah filter 'catetations' (chat, dukungan, sosial; default semua) dan mengembalikan satu global paling-baru-pertama, penggabungan kueri per- baik. Setiap baris membawa: - sessionType (CHAT 126; SUPPORT 124; SOCIAL) + anggota [] .memberType sehingga klien dapat membagi percakapan internal ke dalam Anggota Teamv-Anggota, - Ticket Id + supportRole (AGENT 124; REQUESTOR - dukungan adalah bidirectional) untuk baris dukungan, dan penyedia + koneksi Judul untuk baris sosial, sehingga setiap baris membuka jendela alat asli.
· kamo-shared-library
Kueri paged untuk mendukung sesi obrolan sosial +
feed sehingga unified Interaction Center Daftar Percakapan dapat termasuk semua jenis: - SUPPORT (TIPE _ ID = 2): sesi dimana anggota ditugaskan agen OR permintaan (juga mengembalikan id tiket + agen yang ditugaskan untuk baris). - SOCIAL (TIPE _ ID = 3): sesi pada koneksi sosial yang dimiliki oleh anggota organisasi.
· kamo-internal
Selesai lead-view aksi header + callbacks
- Header: Panggilan split ke Call (Work) / Call (Personal) membuka softphone (tersembunyi ketika anggota tidak memiliki ekstensi terdaftar), Email membuka komposer, Teks - > comms / text, Catatan pindah ke kiri dengan aturan dan berkedip sampai catatan ditempatkan sejak penugasan terakhir. Hapus tombol Tugas. - Status: jatuhkan menu Ubah Status yang tak valid dan rusak tombol Sunting Status; tambahkan sebuah STATUS > baris SUB-STATUS yang membutuhkan sebuah sub- status dan hanya memungkinkan pemutakhiran ketika berubah. - Callback: dialog (tanggal / waktu + zona waktu + komentar), sebuah daftar tertunda / terlambat pada tab rincian dengan mark--contached / cancel prompt, dan leadsApi + proxy rute untuk jadwal / daftar / penyelesaian.
· EmailService
Titik akhir internal untuk membuat / membatalkan acara kalender anggota
POST / api / internal / calendar / kejadian (X-Internall-Auth gath) menyelesaikan anggota - > pengguna - > kalender primer (membuat sebuah baku jika dibutuhkan) dan membuat sebuah acara. Digunakan oleh SecurityService untuk cermin memimpin callback ke kalender anggota.
· SecurityService
Titik akhir callback memimpin (daftar / daftar / menyelesaikan)
Baru... controller + service: persisten callback, posting penjadwalan / hasil catatan ke dalam arus media memimpin, dan mirror the callback into the penjadwalan anggota 's calendar via EmailService' s kalender internal titik akhir (usaha terbaik).

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