Changelog
Cosa c'è di nuovo.
Ogni miglioramento alla piattaforma, come si spedisce.
· MediaService
Verifica la firma di ritorno-nav JWT; rinfrescamento di token ordinato
- CanvaJwtVerifier: verificare la firma di correlazione jwt Ed25519 contro JWKS di Canva (/connect/keys), più aud/exp/type; chiavi memorizzate da bambino. Ritorno-nav ora non viene chiuso all'importazione manuale se la verifica fallisce. - CanvaTokenService: rilasciare l'inefficace @Transactional sul self-invoked helper rinfresca/markDown (Spring Data's per-call tx + il blocco per-member già fare la rotazione del token corretto); chiarire con un commento.
· KlusterServices
Fai bisbigliare in modo indipendente scalabile (HPA, multi-nodo)
Rimuovere il pin singolo e passare a una cache del modello per-pod in modo che i pod possono pianificazione su qualsiasi nodo, e aggiungere un HPA (min 1 / max 4, CPU 75%, deliberare scale-up dato modello lento freddo-starts). bisbigliante è la trascrizione condivisa backend sia per le registrazioni delle riunioni che per le registrazioni VOIP/voicemails.
· KlusterServices
Rebrand Test di stato della connessione client Guacamole a KamoDesktop
Override E' cosi'. Lo schermo 'Connecting to Guacamole...' (e lo stato relativo) legge KamoDesktop.
· MediaService
Registrazione ingest, ritenzione/quota, utilizzo di storage, pipeline di sintesi
- MeetRecordingController: interno (X-Internal-Auth) ingerire endpoint il jibri finalize.sh post finito registrazioni a. - MeetRecordingService: carica registrazioni su per-org MinIO (imaging-meet-recordings), persiste MeetingRecording metadati, applica la quota di stoccaggio di org (evict più vecchio), e — quando postMeetingSummaryEnabled — esegue la pipeline di sintesi: trascrizione (EmailService modello di riunione-sommario). - MeetRecordingRetentionSweep: cancellazione programmata delle registrazioni di conservazione passata. - MeetConfigController: GET /recording-usage per il misuratore di archiviazione delle impostazioni reali. - application.yml: conversione/ai/email URL base + segreto auth interno. Richiede (ops): KamoInitializer eseguire per creare MEETING RECORDINGS; the Non e' vero. il valore deve corrispondere a MediaService, jibri e ConversionService.
· EmailService
Vars campione per l'anteprima del modello di riunione-sommario
Aggiunge un campioneVariables caso per il nuovo modello di riunione-sommario così lo steward anteprima UI rende contenuti realistici.
· kamo-shared-library
Modello canonico di riunione-sommario
Aggiunge il modello transazionale "meeting-summary" (soggetto + marcato HTML con {{roomName}} e raw {{summaryHtml}}) e lo registra in CANONICAL KEYS in modo che semi per org. Utilizzato dalla consegna post-meeting AI sommario. Corregge anche il Il numero di chiavi stanti.
· KlusterServices
Modulo moderatore Prosody, sussurro asr, jibri registrazione upload
- Meet-prosody: la versione-controllo del ConfigMap (capisce il esistente token verification no-op override che è stato creato fuori banda) e aggiungere il modulo canonica mod token moderation, abilitato tramite Non e' vero. Rende il reclamo JWT `moderator` autorevole — i membri diventano proprietari, gli ospiti/anonimo non possono afferrare proprietario. - sussurra-asr: self-hosted discorso-to-text ( CPU più veloce-whisper, nessuna chiave esterna) per la trascrizione post-incontro. - Meet-jibri: finalize.sh ora carica registrazioni finite su MediaService # Con X-Internal-Auth, # # sono atterrati # MinIO + ritenzione di unità/quota + sommari. Segreto è facoltativo quindi jibri ancora inizia se si apre.
· ConversionService
Punto finale della trascrizione di registrazione per i riassunti post-incontro
POST /api/conversion/meet/transcribe (X-Internal-Auth): normalizza un caricato registrazione di riunione a 16kHz mono WAV tramite un nuovo additivo FfmpegService helper, lo inoltra al servizio self-hosted sussurro asr, e restituisce { trascrizione }. URL Whisper da kamo.services.whisper.url.
· kamo-internal
Integrazione del calendario per le riunioni programmate + misuratore di archiviazione di registrazione reale
- calendarIntegrationEnabled: quando è in programma una riunione clubhouse aggiunto al calendario del creatore (tramite il sistema di calendario esistente) che trasporta il autenticato /meet/collegamento. I promemoria partecipanti rimangono maneggiati dal backend spazzatrice, quindi nessuna e-mail dei partecipanti duplicati. - Impostazioni di registrazione: il contatore di archiviazione ora mostra l'utilizzo REAL per-org da GET /api/meet/recording-usage (rimozione del segnaposto rimosso).
· kamo-shared-library
MeetingRecording entità + repository per le registrazioni catturate
Nuovo tavolo MEETING RECORDINGS (org, meeting ref, room, MinIO secchio/oggetto chiave, dimensione, durata, timestamp catturati / scadenti, stato sommario) — il record genitore per un file di registrazione Jibri finito, ritenzione di guida/quota e post-meeting elaborazione sommaria. La tabella è creata sulla prossima corsa KamoInitializer.
· kamo-internal
App di marketing, impostazioni hub, materiali Canva
Fare Marketing una prima classe org-enable app e spedire il Canva-powered Esperienza dei materiali. App-enablement: - AppType.MARKETING mirror, Organization.isMarketing getter - gate marketing nav (navRegistry) + sezioni di diritti (permissionAppSections, SicurezzaRoleManager) su organizzazione.isMarketing - Scheda di marketing in FeaturesManager (/impostazioni/account?tab=apps) Impostazioni: - nuove /settings/features/marketing hub (Generale / Social Media Providers / Canva) - spostare i fornitori di social media fuori dalle impostazioni di CRM in Marketing - 3 posizioni nav aggiornate (impostazioni atterraggio, impostazioniMenu, icona SettingsButton); repoint SocialTimeline link a stato vuoto Canva: - Scheda impostazioni CanvaIntegrationManager + canva ProviderDef nella piattaforma Registro OAuth (+ logo) - /api/canva/* proxies (status, connect-start, design, export, export-proxy, disconnessione) → MediaService - /marketing/materials: griglia libreria (imaging MATERIALS assoc), upload, Crea-in-Canva, Import-da-Canva, ritorno-nav auto-import
· ConversionService
Video poster-frame miniature per materiali di marketing
Canva MP4 esportazioni (e qualsiasi caricamento video) saltare il percorso Docs PDF e ottenere un singolo ffmpeg poster-frame thumbnail ( thumb p0.png) invece di fallire. - No, no. Sezione categoria VIDEO - No, no
· MediaService
Canva Connect OAuth + design/export backend
- CanvaApiClient: PKCE autorizza, token exchange/revoke, utenti, disegni (creare/list), lavori di esportazione, byte fetch - CanvaTokenService: token crittografati per membro (PlatformSecretCipher), rinfresco proattivo single-flight (I token di aggiornamento Canva sono monouso/rotating) - CanvaOAuthController (permit-all): collegare intenti → /start → /callback, atterraggio di ritorno-nav - CanvaController (authed): stato, connect-start, creare/list design, esportazione (creare+poll+cache), byte export-proxy, disconnettere
· kamo-shared-library
Integrazione Canva + Marketing come applicazione org-enable
- No, no. — piattaforma Canva Connect registrazione client - ImageAssocType.MATERIALS(13, imaging-materials) — org secchio di attività di marketing - No, no. sotto ServiceType.MARKETING - ServiceType.MARKETING(24) → COMPLETATO/abilitato quindi diventa una vera app (FeatureController auto-provisions it ON per org, come CRM) - CanvaConnection entità + repo: per-membro crittografato (access+refresh) token
· KlusterServices
Abilitare Guacamole json-auth SSO + KamoDesktop rebrand
- JSON SECRET KEY (opzionale) su guacamole dal segreto desktop-sso condiviso consente il pacchetto guacamole-auth-json estensione i collegamenti dio-SSO validare contro. - estensione kamo-branding (title=KamoDesktop, logo kamocrm + favicon) costruito da desktop/guacamole/branding/ in un .jar, spedito come configurazione binaria e semenzato in GUACAMOLE HOME tramite un initContainer. - CI crea la chiave di firma condivisa in entrambi i namespace (desktop-sso per guacamole, guac-sso for SecurityService) dal segreto GUAC SIGNING KEY; mai impegnato.
· kamo-internal
Le icone KamoDesktop (Linux + Windows) che aprono sessioni autoconnesse
Due icone nav rimaste di Analytics, mostrate solo a membri divini (isGod aggiunto a NavGateContext). Ogni fetches un collegamento SSO di breve durata da SecurityService e apre il KamoDesktop gateway in una nuova finestra, collegato automaticamente alla sua istanza. Utilizza l'impegno I segni.
· SecurityService
KamoDesktop SSO token endpoint per i membri di Dio
E' il momento giusto. (solo per legge) 5 minuti guacamole-auth-json token (HMAC-SHA256 + AES-128-CBC, per l'estensione formato del cavo) e restituisce un URL di connessione automatica + auto per il KamoDesktop gateway. chiave di firma + password RDP iniettato dal segreto guac-sso; mai impegnati (sicuro: SSO rimane disabilitato fino a configurato).
· kamo-internal
Org-scoped nomi di camera, formato di camera-nome, calendario incontri Kamo, promemoria di inizio; impostazioni i18n
- useMeeting/MeetingDialog: i nomi delle camere sono ora namespaced by org token così due Gli org non possono mai scontrarsi nella stessa conferenza di Prosody e onorare l'org roomNameFormat (RANDOM vs DISPLAY NAME RANDOM utilizzando l'alias del membro). - MeetingComposer (calendar): il pulsante "Kamo Meeting" genera una stanza in oroscopo e imposta l'URL dell'evento al link /meet/join click-time OTK, quindi calendario invitare i destinatari + promemoria sono firmati come membri verificati. - MeetReminderPopup: abbonamenti a /topic/meet/reminder/{memberId} (MediaService spazzatrice) e mostra un brindisi "in partenza da pranzo" con un pulsante Join; montato in PresenceWrapper sulla chat condivisa WS. - incontra le schede delle impostazioni: sostituire le stringhe di brindisi/error inglesi codificate Le chiavi successive sono..
· MediaService
Promemoria di inizio programmata + scadenza del collegamento ospiti
- MeetingReminderSweep: @Scheduled spazzatrice che spara in tempo reale "mieting start" ricorda ai membri invitati (start − promemoriaMinutesBefore) su **************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** a dedupe. Riunioni più di un'ora dopo l'inizio sono transizione senza un promemoria (no back-fill spam). Il cliente costruisce il link di collegamento autenticato dalla sua origine. # Now Honors guestLinkExpiryHours: a meeting # più vecchio della finestra configurata dell'org (ricordata all'inizio programmato, altrimenti creazione) è trattata come non partecipabile (0 = non scade mai).
· kamo-internal
Mostra la disponibilità dei membri nell'elenco delle chat; rinomina la scheda a Directory
1:1 chat righe ora superficie la presenza live della controparte + disponibilità la stesso modo in cui la scheda Directory fa — stesso usoAvailability/usePresence sorgenti e gli stessi colori/etichetta di MemberItem (dot + maiuscolo, pulsando quando online, grigio quando offline), con un tooltip. Le chat di gruppo tengono il "qualcuno di online" avatar dot; le file di supporto/sociale sono invariate. La scheda Membri è rinominata "Directory" (solo valore i18n), che chiarisce anche la collisione di denominazione con le chat "Members" gruppo sub-tab.
· KlusterServices
Harded KubeVirt desktop remoto + Guacamole gateway
Aggiunge uno stack completo da remoto, applicato a GitOps tramite il flusso di lavoro di distribuzione: - KubeVirt + CDI installato nel tempo di distribuzione (URL di rilascio pinned-stable) - desktop-1: Kubuntu 24.04 VM, 8 vCPU / 16Gi / 500Gi Disco di blocco Longhorn, masquerade net (native cluster DNS), xrdp KDE sessione; installazione cloud-init Chrome, VS Code, NetBeans, Temurin JDK 21+17, Headlamp, Kate, LibreOffice e rimuove Firefox - Apache Guacamole (guacamole + guacd + Postgres config DB) a desktop.kamocrm.com; guacd gestisce hostNetwork su k1m1 in modo che possa WoL-broadcast e RDP direttamente sulla LAN 192.168.4.0/22 pur raggiungendo la VM via ClusterFirstConHostNet DNS - LAN PC Windows (192.168.4.44, MAC f4:4d:30:62:8a:68) aggiunto come connessione con Guacamole nativo Wake-on-LAN (pacchetto magico sulla connessione, 30s attendere) - Indurimento bordo: Traefik TLS + stretto tasso-limit + intestazioni di sicurezza, più Guacamole built-in per-IP brute-force ban - auto-cert: desktop.kamocrm.com aggiunto a STATIC DOMAINS + cross-ns mirror so problemi/renews tls-desktop-kamocrm-com nel desktop ns - Credentials: user 'sage'; password iniettata dal segreto CI DESKTOP PASSWORD a tempo dispiegamento (envsubst/sed + imperativo Segreto) — mai impegnato
· kamo-internal
Sub-tabs per gruppi di chat, ricorda la scheda ultima aperta
La lista delle chat filtrata da una fila di chip di pillola multi-select che ha guardato fuori di posto sotto la scheda Chats. Sostituiscili con una barra sub-tab single-select (una scheda per gruppo: Membri del Team / Soci / Social / Supporto) in stile da abbinare le schede dei membri/capi dei genitori, quindi l'elenco del gruppo selezionato riempie l'intero area dei contenuti. - Single activeBucket invece di un Set di benne attive; il server fetch ora tira solo la categoria selezionata. - Predefinisce i membri del team e persiste l'ultima scheda aperta per membro (attraversata dispositivi) tramite il negozio ui-preferences (Chiacchi chiaveActiveBucket), gating il prima prendere fino a quando la scheda salvata si risolve in modo da caricare direttamente.
· kamo-internal
Spiegare quando l'email non è configurata; cancello comporre
Il /messages inbox precedentemente reso il suo guscio completo anche quando l'org non aveva alcun provider di posta elettronica o il membro non aveva casella di posta, silenziosamente mancando ogni Chiamata API. Aggiungi un uso condivisoEmailAvailability hook che risolve se e-mail è utilizzabile e, se non, perché (provider non configurato vs. nessuna casella di posta) e se l'attuale membro può auto-servare la correzione in base ai loro diritti. - MessageBrowser ora mostra un elegante pannello EmailNotConfigurato invece di un casella vuota, con copia + CTA che si adattano alla ragione e al membro diritti (link alle impostazioni del provider di posta elettronica per MANAGE EMAIL SETTINGS, o per la propria scheda mailbox per MANAGE EMAIL ACCOUNTS; altrimenti fare riferimento ad admin). - MailButton disattiva "Compose New Email" fino a quando l'e-mail è completamente pronta, con un ragione-specific tooltip; NavToolButton ottiene il supporto dell'elemento disabilitato/tooltip. - Ancorare il `messages/` gitignore regola alla radice del repo in modo che si ferma anche ignorando app/components/messages/ (che silenziosamente ha abbandonato nuovi file).
· kamo-internal
Tutti i tipi Elenco delle chat + attenzione browser-tab
Chats sub-tab ora elenca membro, gruppo, supporto e conversazioni sociali insieme, la maggior parte del centro prima, con un filtro multi-select (Membri del team / Membri / Sostegno / Sociale; i primi due usano le etichette personalizzate dell'org). Team-Members vs Membri è diviso da membro della controparteTipo; file di supporto mostrare se tu o l'altra parte è l'agente; ogni riga apre la sua finestra di strumento nativo (chat / supporto / sociale). Aggiunge TabAttention: un badge favicon + documento lampeggiante. titolo quando c'è sono messaggi invisibili di qualsiasi tipo di chat (conto rosso) o di un modulo di accettazione in sospeso (ambra ⚡ bullone, corrispondente all'icona del cavo/CRM; prende la priorità). Leggi il esistente UnreadContext + LeadAlertContext, quindi nessun nuovo backend.
· MediaService
Le Chat Unified si nutrono di sessioni socio/supporto/sociale
GET /api/media/sessions/chat accetta ora un filtro `categorie` (chat, supporto, sociale; predefinito tutti) e restituisce uno globalmente più recent-first, unione delle domande per genere. Ogni riga porta: - sessionType (CHAT|SUPPORT|SOCIAL) + soci[].memberType in modo che il cliente può dividere le chat interne in Team-Members vs Membri, - ticketId + supportoRole (AGENT|REQUESTOR — supporto bidirezionale) per supporta righe, e provider + connessione Titolo per le file sociali, così ogni riga apre la sua finestra di strumento nativo.
· kamo-shared-library
Domande Paged per il supporto + sessioni di chat social
feed in modo che l'elenco delle Chat del Centro di Interazione unificato possa includere tutti i tipi: - SUPPORT (TYPE ID=2): sessioni in cui il membro è l'agente assegnato O il richiedente (anche restituisce il biglietto id + agente assegnato id per la riga). - SOCIAL (TYPE ID=3): sessioni sulle connessioni sociali di proprietà del membro organizzazione.
· kamo-internal
Finire le azioni di intestazione di lead-view + callback
- Header: split Call in Call (Work)/Call (Personal) che apre il softphone (nascosto quando il membro non ha estensione registrata), Email apre il compositore, testo -> comms/texts, Nota spostata a sinistra con una regola e lampeggia fino una nota viene posta dall'ultima riassegnazione. Rimuovere il pulsante Task. - Stato: rilasciare il menu Modifica stato non valido e il pulsante Modifica stato rotto; aggiungere una riga STATUS > SUB-STATUS che richiede la scelta di un substatus e solo consente di aggiornare quando cambia. - Callback: finestra di dialogo (data/ora + timezone + commento), un elenco in attesa / in ritardo la scheda dei dettagli con i prompt contrassegnati/cancellati, e leadApi + proxy percorsi per la pianificazione/list/risolvere.
· EmailService
Endpoint interno per creare/cancellare l'evento del calendario di un membro
POST /api/internal/calendar/events (X-Internal-Auth gated) risolve il membro -> utente -> calendario primario (creare un default se necessario) e crea un evento. Utilizzato da SecurityService per rispecchiare i callback di un membro nel calendario.
· SecurityService
Punti finali di callback di piombo (schedule/list/resolve)
Nuovo... controller + servizio: persiste callback, post scheduling/outcome note nel flusso media del piombo, e rispecchia il callback sul calendario del membro di programmazione tramite EmailService endpoint del calendario interno (migliore sforzo).
· kamo-shared-library
Aggiungi LeadCallback entità, stato enum e repository
Restituisce la funzione di callback di lead-view: un record di callback di proprietà di lead (PENDING/CONTACTED/CANCELED) con un riferimento morbido l'evento di calendario mirrored EmailService.

Il tuo universo ti sta aspettando.
Aggiungi i prodotti quando sei pronto: nessuna migrazione, nessun nuovo login, nessuna richiesta di pagamento.
Gratis per sempre — nessuna carta di credito richiesta