Changelog
Co nowego.
Każde ulepszenie platformy, jak to wysyła.
· MediaService
Sprawdź podpis nanawczy powrotnej JWT; schludne odświeżenie tokena
- CanvaJwtVerifier: zweryfikuj podpis etyp e-brzeńczy_jwt's Ed25519 przeciwko Canva's JWKS (/connect/keys), plus aud/exp; klucze podręczne przez dziecko. Nav Return teraz nie zamyka się na ręczny import, jeśli weryfikacja nie powiedzie się. - CanvaTokenService: upuść nieefektywne . Transakcyjne na samozwańczej Pomocnicy odświeżeniowy/markDown (Spring Data na call tx + zamek na członka Już teraz poprawia rotację tokena); wyjaśnij komentarzem.
· KlusterServices
Uczyń szept-asr niezależnie skalowalny (HPA, multi-node)
Usuń pin jedno-node i przełącz się na podręczną modelu per-pod, aby kapsułki mogły być Harmonogram w dowolnym węźlu i dodaj HPA (min 1 / max 4, CPU 75%, celowe Skala-stopa podana powolny model cold-starts). whisper-asr to wspólna transkrypcja backend zarówno do spotkań nagrań, jak i nagrań VOIP/głosów.
· KlusterServices
Rebranda Guacamole klienta tekst statusu połączenia z KamoDesktop
Override - tak dalej 'Connecting to Guacamole...' ekran (i powiązany status) czyta KamoDesktop.
· MediaService
Nagrywanie spożycia, retencji / kwotowania, zużycia magazynowania, doraźnego rurociągu
- MeetRecordingController: wewnętrzny (X-Internal-Auth) połknięcie punktu końcowego jibri Finalize.sh posty gotowe do nagrywania. - MeetRecordingService: przesyła nagrania do per-org MinIO (imaging-meet-recording), utrzymuje się zbiorowy metadanych rejestrujących, egzekwuje limit przechowywania org (najstarszy evict), + gdy postMeetingSummaryEnabled — uruchamia rurociąg podsumowujący: transkrypcja (Wzór podsumowania spotkania (EmailService). - MeetRecordingRetentionSweep: zaplanowane usunięcie nagrań z przeszłości. - MeetConfigController: GET / nagrywanie-usuzy do rzeczywistego przechowywania ustawień. - application.yml: conversion/ai/email bazowe adresy URL + wewnętrzny auth secret. Wymaga (ops): KamoInitializer uruchamia się, aby utworzyć MEETING_RECORDINGS; - wartość musi być dopasowana do multimediów, jibri, i Usługa konwersji.
· EmailService
Przykładowe vars do podglądu szablonu podsumowania spotkania
Dodaje przykładowy przypadek dla nowego szablonu podsumowania spotkania, tak: steward Podgląd UI renderuje realistyczną treść.
· kamo-shared-library
Szablon kanoniczny wspojów
Dodaje szablon transakcyjny "sumowanie memeting" (subment + markowy HTML z "roomName" i surowy "summaryHtml") i rejestruje go w CANONICAL_KEYS Nasiona na org. Używany przez pospotkaniu zestawienia AI. Również koryguje Test ładowarki nieaktualny numer klucza.
· KlusterServices
Moduł moderatora Prosody, szept-asr, jibri nagrywanie
- Meet-prosody: wersja-kontroluj niestandardowe wtyczki ConfigMap (umiejętności Istniejące token_verification no-op override, które zostało stworzone poza pasmem) i Dodaj kanoniczny moduł mod_token_moderation, włączony przez "Wystawia roszczenie JWT "moderator" Autorytatywny – członkowie stają się właścicielami, goście/anonimowi nie mogą złapać właściciela. - szept-asr: samoorganizująca się mowa- tekst (przetwórz ten szyderczy, bez zewnętrznego klucza) Do transkrypcji posiedzeń. - Meet-jibri: finalize.sh teraz przesyła gotowe nagrania do MediaService Z X-Internal-Auth, więc lądują w MinIO + retencja/kwota dyskusyjna + podsumowania. Sekret jest opcjonalny, więc jibri nadal Zaczyna się, jeśli się nie zgadza.
· ConversionService
Nagrywanie punktu końcowego transkrypcji dla podsumowań pospotkaniu
POST /api/konwersja/meet/transscribe (X-Internal-Auth): normalizuje przesyłanie spotkanie nagrać do 16kHz mono WAV za pomocą nowego dodatku FfmpegService helper, przekazuje go do samodzielnej usługi szeptu-asr i zwraca ? transkrypcję. Whisper URL URL z kamo.services.whisper.url.
· kamo-internal
Integracja kalendarza na zaplanowane spotkania + prawdziwy licznik pamięci rejestracyjnej
- kalendarzIntetegrationEnabled: kiedy jest dalej, planowane spotkanie w klubie jest również Dodane do kalendarza twórcy (za pośrednictwem istniejącego systemu kalendarzowego) niosącego Uwierzytelniona /meet/łącz link. Przypomnienia uczestników pozostają obsługiwane przez Zamiatanie zaplecza, więc nie ma zduplikowanych e-maili uczestników. - Ustawienia nagrywania: miernik pamięci pokazuje teraz REAL per-org użycie GET /api/meet/recording-usage (zamiast usuwanego zastępcy).
· kamo-shared-library
Spotkanie Rekordowy podmiot + repozytorium dla przechwyconych nagrań
Nowy stół MEETING_RECORDINGS (org, ref meeting, sala, wiadro MinIO/klucz pliku, Wielkość, czas trwania, przechwytujące/wywrotowe znaczniki czasu, stan podsumowania) — rekord nadrzędny dla gotowego pliku rejestrującego Jibri, utrzymania/kwoty jazdy i posiedzenie Przetwarzanie podsumowania. Stół tworzony jest przy następnym uruchomieniu KamoInitializer.
· kamo-internal
Aplikacja marketingowa, centrum ustawień, materiały Canva
Uczyń marketing najwyższej klasy aplikacją org-enable i wyślij zasilany przez Canva Doświadczenie materiałowe. Zastosowanie: - Aplikowane lustro, Organization.isMarketing getter - gate marketing nav (navRegistry) + sekcje praw (namissionAppSections, SecurityRoleManager) na stronie organizacji.isMarketing - Karta marketingowa w FeaturesManager (/settings/account?tab-apps) Ustawienia: - nowe /settings/features/marketing hub (ogólni / dostawcy mediów społecznościowych / Canva) - przenieść dostawców mediów społecznościowych z ustawień CRM do marketingu - 3 lokalizacje nav zaktualizowano (wysłanie ustawień, ustawieniaMenu, ikona UstawieniaButton); Ponowne punkt SocialTimeline pusty-państwowy link Canva: - Zakładka ustawień CanvaIntegrationManager + canva ProviderDef na platformie Rejestr OAuth (+ logo) - /api/canva/o proxy (status, connect-start, projekty, eksport, export-proxy, Rozłączenie) - MediaService - /marketing/materiały: siatka biblioteczna (obrazowanie w materii MATERIALS assoc), przesyłanie, Create-in-Canva, Import-from-Canva, autoimport powrotny nav automatyczny
· ConversionService
Miniatki z plakatem wideo do materiałów marketingowych
Canva MP4 eksport (i dowolne przesyłanie wideo) pomiń ścieżkę PDF Docs i uzyskaj Pojedynczy miniatura z litymgami ffmpeg (_thumb_p0.png) zamiast awariów. - Oddział kategorii VIDEO - "
· MediaService
Canva Connect OAuth + projekty / backendy eksportowe
- CanvaApiClient: PKCE autoryzuje, wymiana tokenów/refresh/revoke, użytkownicy, Projekty (zatwórz / lista), oferty eksportowe, byte fetch - CanvaTokenService: zaszyfrowane tokeny naczłonowe (PlatformSecretCipher), Proaktywne odświeżanie pojedynczej lotu (tony odświeżające Canva są jednorazowego użytku / obracające się) - CanvaOAuthController (permit-all): connect intent ? /start ? /callback, Lądowanie powrotowe - CanvaController (authed): status, connect-start, projekty tworzenia / listy, export (twórz + poll+cache), byte export-proxy, rozłączenie
· kamo-shared-library
Integracja z Canva + Marketing jako aplikacja do zużawnia się do org
- - - Platforma Canva Connect rejestracja klienta - ImageAssocType.MATERIALS(13, materiały obrazowe) – wiadro aktywów marketingowych org/bówką marketingową - w obszarze ServiceType.MARKETING - ServiceType.MARKETING (24) - COMPLETED/umożliwiony, więc staje się prawdziwą aplikacją (FeatureController automatycznie to pozwala na org, jak CRM) - CanvaConnection + repo: per-member szyfrowane (dostęp+refresh) tokeny
· KlusterServices
Włącz nazwę marki Guacamole json-auth SSO + KamoDesktop
- JSON_SECRET_KEY (opcjonalnie) na guacamole ze wspólnego pulpitu-sekretnego umożliwia Poszerzenie guacamole-auth-json, przeciwko które łączy się z god-SSO. - rozszerzenie marki kamo (title-KamoDesktop, kamocrmm logo + favicon) zbudowane z serwisu pulpitu / aguacamole/ branding/ w .jar, dostarczane jako binarna konfigmapa i zsiedzenia GUACAMOLE_HOME przez initContainer. - CI tworzy wspólny klucz do podpisu w obu przestrzeniach nazw (desktop-ssss so dla guacamole, guac-sso for SecurityService) z tajemnicy GUAC_SIGNING_KEY; nigdy nie popełniony.
· kamo-internal
Ikony KamoDesktop (Linux + Windows) otwierające automatycznie połączone sesje
Dwie ikony nav left z Analytics, pokazane tylko członkom kwalifikującym się przez Boga (jest Bóg dodany do NavGateContext). Każdy z nich pobiera krótkotrwały link SSO z SecurityService i otwiera Brama KamoDesktop w nowym oknie, automatycznie połączona z jego instancją. Korzysta z tego, co zaangażowane - Znaki.
· SecurityService
KamoDesktop SSO symbolowy punkt końcowy dla członków Boga
GET (tylko kwalifikujący się do Boga) miętuje a 5-minutowy token guacamole-auth-json (HMAC-SHA256 + AES-128-CBC, na rozszerzenie Format drutu) i zwraca autologin + auto-connect URL dla KamoDesktop Brama. Klucz podpisujący + hasło RDP wstrzyknięte z tajemnicy guac-sso; nigdy Popełnione (puste bezpieczne: SSO pozostaje wyłączone do czasu skonfigurowania).
· kamo-internal
Org-scoped nazwy pokoi, format nazwy pokoju, spotkania kalendarzowe Kamo, przypomnienia o rozruchach; ustawienia i18n
- useMeeting/MeetingDialog: nazwy pokoi są teraz oznaczone przez org token tak dwa orgugi nigdy nie mogą zderzyć się z tą samą konferencją Prosody i uhonorować orgi. roomNameFormat (RANDOM vs DISPLAY_NAME_RANDOM przy użyciu aliasu członka). - MeetingComposer (kalendarz): przycisk "Kamo Meeting" generuje org-scoped room i ustawia adres URL wydarzenia na link OTK /meet/łącz do kliknięcia, więc kalendarz Zaproszenie + odbiorcy przypomnienia są podpisani jako zweryfikowani członkowie. - MeetReminderPopup: subskrybuje /temic/meet/reminder/?memberId" (MediaService sweeper) i pokazuje toast "spotkanie" z przyciskiem Dołącz; zamontowany ObecnośćWrapper na wspólnym czacie WS. - spotyka się z zakładkami ustawień: zamień zakodowane angielskie ciągi tosty/errorowe Następne-wodniel t() klawisze -
· MediaService
Zaplanowane przypomnienia o rozpoczęciu + wygaśnięcie linku gości
- SpotkanieReminderSweep: Schedulowana zamiłowanie, która strzela w czasie rzeczywistym Przypomnienie "spotkanie" do zaproszonych członków (start - przypomnienieMinutesBefore) O tym, a następnie przechodzi spotkanie SCHEDDULED-ACTIVE Do dedupe. Spotkania ponad godzinę przed startem są przejmowane bez Przypomnienie (bez spamu back-fill). Klient buduje uwierzytelniony link łączenia Od samego początku. - Teraz honoruje gościLinkExpiryHours: spotkanie Starsze niż skonfigurowane okno org (zakotowane na zaplanowanym uruchomieniu, w przeciwnym razie Tworzenie) jest traktowane jako nie łączone (0, nigdy nie wygasa).
· kamo-internal
Pokaż dostępność członków na liście czatów; zmienić nazwę karty do Directory
1:1 rzędy czatu teraz pojawiają się na żywo obecność odpowiednika + dostępność Podobnie jak zakładka katalogowa — to samo użycieDostępności/korzystanie źródeł i Te same kolory/etykiety co MemberItem (dot + górna etykieta, pulsowanie, gdy Internet, szary w trybie offline), z podpowiedzią. Czoły grupowe utrzymują "ktoś" Internet" awatar dot; rzędy społecznościowe / wsparcie pozostają niezmienione. Zakładka Członków została przemianowana na "Tylko katalog" (tylko wartość 18n), która również oczyszcza Zderzenie nazewnictwa z grupą podtabu "Members".
· KlusterServices
Utwardzony zdalny pulpit KubeVirtrt + bramka Guacamole
Dodaje pełny stos zdalnych biurków, GitOps-applied za pośrednictwem przepływu pracy: - KubeVirt + CDI zainstalowany w czasie wdrażania (ramery URL wydania stołu) - pulpit-1: Kubuntu 24.04 VM, 8 vCPU / 16Gi / 500Gi Longhorn, Netto kanskania (natwaryjny klaster DNS), sesja xrdp KDE; instalacje cloud-init Chrome, kod VS, NetBeans, Temurin JDK 21+17, Obowiązek, Kate, LibreOffice I usuwa Firefox - Apache Guacamole (guacamole + guacd + Postgres config DB) at desktop.kamorm.com; guacd prowadzi hostNetwork na k1m1, dzięki czemu może WoL-broadcast RDP bezpośrednio do 192.168.4.0/22 LAN, a jednocześnie dotrzeć do maszyny wirtualnej przez KlastrFirstWithHostNet DNS - LAN Windows PC (192.168.4.44, MAC f4:4d:30:62:8a:68) dodano jako połączenie z Guacamole native Wake-on-LAN (magiczny pakiet na połączeniu, 30s wait) - Utwardzanie krawędzi: Traefik TLS + ciasny limit na pulpicie + nagłówki zabezpieczeń, Plus Guacamole wbudowany zakaz brutalnej siły - auto-cert: desktop.kamocrmmm.com dodany do STATIC_DOMAINS + poprzeczne lustro Problemy z certmanager/renews tls-desktop-kaotworm-com do pulpitu ns - Kreferacje: "starczenie" użytkownika; hasło wstrzyknięte z CI secret DESOP_PASSWORD W momencie rozmieszczenia (envsubst/sed + imperative Secret) – nigdy nie popełniony
· kamo-internal
Sub-tabs dla grup czatów, zapamiętaj kartę ostatnio otwarte
Lista czatów filtrowana przez rząd wieloselektowych chipów pigułek, które wyglądały Miejsce pod zakładką Czaty. Zamień je jednoselektnym podtapiam (jedna zakładka na grupę: Członkowie zespołu / członkowie / Wsparcie społeczne) stylizowane na dopasowanie Członkinie/Klaty, więc lista wybranej grupy wypełnia całość Obszar treści. - Pojedynczy aktywnyBucket zamiast zestawu aktywnych wiader; serwer pobiera teraz Wyciąga tylko wybraną kategorię. - Domyślnie członków zespołu i kontynuuje ostatnią otwartą kartę na członka (w poprzek Urządzenia) za pośrednictwem sklepu Ui-preferences (key chatsActiveBucket), zaznaczenie Najpierw pobierz, aż zapisana karta zostanie rozwiąże, aby ładuje się bezpośrednio.
· kamo-internal
Wyjaśnij, kiedy e-mail nie jest skonfigurowany; komponowanie bramki
Skrzynka odbiorcza/messages wcześniej oddała pełną powłokę nawet wtedy, gdy org Nie miał dostawcy poczty e-mail lub członek nie miał skrzynki pocztowej, po cichu zawodził Wywołanie API. Dodaj wspólny useEmailAvailability hook, który rozwiązuje, czy e-mail Jest użyteczny, a jeśli nie, dlaczego (dostawca nie jest skonfigurowany w porównaniu z bez skrzynki pocztowej) i Czy obecny członek może sam sobie poprawić poprawkę na podstawie swoich praw. - MessageBrowser wyświetla teraz elegancki panel EmailNotKonfigurowany zamiast Pusta skrzynka odbiorcza, z kopiowaniem + CTA, która dostosowuje się do przyczyny i elementu Prawa (link do ustawień dostawcy poczty e-mail dla MANAGE_EMAIL_SETTINGS, lub do Własna zakładka skrzynek pocztowych dla MANAGE_EMAIL_ACCOUNTS; w przeciwnym razie odroczyć się do admin). - MailButton wyłącza "Compose New Email", aż e-mail będzie w pełni gotowy, z a Przypis narzędzi specyficzny dla rozumu; NavToolButton zyskuje wsparcie dla pozycji wyłączonej / narzędziowej. - Zakotwicz zasady "messages /" gitignore do korzenia repo, więc również zatrzymuje się Ignorowanie aplikacji/komponentów/wiadomości/ (które po cichu upuściły tam nowe pliki).
· kamo-internal
All-types Chats lista + uwaga na przeglądarkę
Chats sub-tab teraz wymienia członków, grup, wsparcia i rozmów towarzyskich Po pierwsze, najczęściej z filtrem multi-select (członkowie zespołu / Członkowie / Social / Support; pierwsze dwa używają niestandardowych etykiet org. Team-Members vs Members jest dzielony przez członka odpowiednikaType; wiersze wsparcia Pokaż, czy Ty lub druga strona jest agentem; każdy wiersz otwiera swój Natywna okno narzędziowe (chat / support / social). Dodaje TabAttention: odznaka favicon + miganie document.title, gdy tam jest Są niewidoczne wiadomości dowolnego typu czatu (czerwona liczba) lub oczekujące akceptacja-ołów (Bezł, dopasowanie do czołówek / ikony CRM; ma pierwszeństwo). Czytamy o tym, co Istniejący UnreadContext + LeadAlertContext, więc nie ma nowego backendu.
· MediaService
Ujednolicone kanały czatów w sesjach członkowskich / wsparcia / spotkań towarzyznych
GET /api/media/sessions/chat przyjmuje teraz filtr "kategorii" (czat, wsparcie, społecznościowe; wszystko niewypłacalne) i zwraca jeden na całym świecie najbardziej niedawny, Połączenie zapytań typu typu typu. Każdy rząd nosi: - sessionType (CHAT|SUPPORT|SOCIAL) + członkowie[].memberTyp tak klient Może podzielić wewnętrzne czaty na Team-Members vs Members, - ticketId + supportRole (AGENT|REQUESTOR — wsparcie jest dwukierunkowe) rzędy wsparcia i dostawca + połączenieTytel dla rzędów społecznych, Tak więc każdy rząd otwiera swoje natywne okno narzędziowe.
· kamo-shared-library
Zapytania w Page dla wsparcia + sesje czatu społecznościowe
Podajnik, dzięki czemu zjednoczona lista czatów centrów interakcji może zawierać wszystkie rodzaje: - WSPARCIE (TYPE_ID-2: sesje, w których członek jest agentem lub wnioskomi (również zwraca bilet id + przydzielony agent id do wiersza). - SOCIAL (TYPE_ID-3): sesje na temat połączeń społecznych należących do członka Organizacja.
· kamo-internal
Wykończ lead-view akcji nagłówka + callbacks
- Nagłówek: Podziel połączenie do połączenia (Work) / Call (osobisty) otwierający softphone (ukryty, gdy członek nie ma zarejestrowanego rozszerzenia), Email otwiera kompozytor, Tekst -> comms/teksty, Notatka przesunęła się w lewo z regułą i mruga, aż Notatka jest umieszczana od ostatniej zmiany. Usuń przycisk Zadanie. - Status: upuść nieprawidłowe menu Zmień stan i uszkodzony przycisk Edytuj status; Dodaj STATUS > SUB-STATUS wiersz, który wymaga wybrania podstatu i tylko Umożliwia aktualizację, gdy się zmienia. - Odwołanie: okno dialogowe (data/time + timezone + comment), oczekująca/zaległa lista na Zakładka szczegółów z komunikatami stykulistów/anuluj i leadApi + proxy Trasy dla rozkładu jazdy/listy/resolve.
· EmailService
Wewnętrzny punkt końcowy do tworzenia/anulowania wydarzenia kalendarzowego członka
POST /api/internal/calendar/events (X-Internal-Auth gateed) rozwiązuje członkostwo -> Kalendarz podstawowy użytkownika -> (w razie potrzeby tworzący domyślne) i tworzy zdarzenie. Używany przez SecurityService do lustrzanych połączeń odnośnych w kalendarzu członka.
· SecurityService
Punkty końcowe oddzwonij (schedule/list/resolve)
Nowy - kontroler + serwis: utrzymuje się - oddzwonie, posty / informacje o przybyszach do strumienia medialnego łowiska, i Wzruszanie oddzwoniwa na kalendarz członka harmonogramu za pośrednictwem EmailService's Wewnętrzny punkt końcowy kalendarza (best-effort).
· kamo-shared-library
Dodaj jednostkę LeadCallback, status enum i repozytorium
Powróca funkcję oddzwoniwnia w widoku lead-view: główny rekord callback (PENDING/CONTACTED/CANCELED) z przechwytaczem leadUid, z miękkim odniesieniem do Ludzine wydarzenie kalendarzowe EmailService.

Twój wszechświat czeka.
Rozpocznij bezpłatnie w kilka minut.Dodaj produkty, kiedy tylko będziesz gotowy — bez migracji, bez nowych logowań.
Bezpłatne na zawsze — nie wymaga karty kredytowej