Wyklucz nie-ACTIVE członków z uczestnictwa w czacie i routingu
Członek niebędący ACTIVE nie może się wydawać, lub być Celowy, jako uczestnik czatu na żywo. Brać każdą ścieżkę czatu na wspólnej lib - predykat: - DM create /...
Make WebChatIntegration create() - Transactional (brak osieroconego klucza do awarii integracji)
Resolve public-chat system member per-org (upuść twardy kodowany pseudonim snadjafinia)
createSupportSession, createPublicTicket i powiadomienie właściciela Pomocnicy rozwiązali "członka systemu" orgi za pomocą zakodowania Nazwa użytkownika "Snadja...
Przestań umieszczać treści wiadomości w wiadomościach e-mail o pominiętym wiadomościach
Usuń komunikatPreview computation, kiesza PREVIEW napisze, i Zmienna szablonu messagePreview; upuść w tym Preferencje podglądu. E-maile teraz przenoszą nadawcę ...
Trwają zaplanowane flagi kciuka materiałowego za pomocą ukierunkowanej aktualizacji
Ta sama oderwana sierototodaUmorzenia, co rurociąg konwersji: bezgłowy lot Przetrzymywał oderwany ImgDat i save()/merge() kaskadował w kolekcji obrazów. Korzyst...
Nagrywanie nagrywania, więc MediaService kompiluje
MinIOStorageService.upload rzuca sprawdzany wyjątek, który nie lub nie Złapany ani zadeklarowany – zbuduj przerwę na szczycie isGuest fix. Owiń to i Rzucanie ja...
SpotkanieParticipant.isGuest() (było getGuest, nie kompiluje); transkrypcja do ogólnego punktu końcowego
MeetingParticipant eksponuje isGuest() (prymitywny boolean getter), a nie getGuest(). Wskaż również na wywołanie transkrypcji podsumowania na wspólnym /api/konw...
Uczestnicy zaproszeni do Persist, egzekwują MANAGE_MEET_SETTINGS, upuść ścieżkę podwójnego zaproszenia
- spotkanie: zaproszeni członkowie to numeryczne identyfikatory płatków śniegu, a nie struny UUID — Przekieruj je przez longToUUID jak twórca. Poprzednio UUID...
Użyj usługi cluster MinIO DNS; drop deprecated WireGuard / CGNAT IPs i wycofane k2m / k0m1
Opublikuj zdarzenie NATS CREATE po transakcji zaangażuj się w naprawienie wyścigu załączników obrazu
Przesłanie NATS zostało opublikowane w „Transakcjonalnym ciele”, co oznaczało Odbiorcy mogą otrzymać zdarzenie CREATE i poprosić o obraz za pośrednictwem /iagin...
Serializuj załączniki w historii przekaźnika WS i wiadomości; zezwolić na wysyłanie tylko załączników
Trzy błędy naprawione: 1. ChatSessionSubscriptionManager budował komunikat STOMPMap ręcznie i Pomijanie załączników, źródłoJanguageId, readMemberId, msgIdLa...
Napraw NPE w getChatSessions z Map.of() odrzucanie null nextcoder
java.util.Map.of() rzuca NullPointerException, gdy nextcoder jest null (nie ma więcej stron). Zastąp HashMap, który akceptuje wartości zerowe. Również owiń cały...
Napraw 500 (brakujące EmbRecordState) i kartę pustych czatów (odlewa Timestamp)
Wada A: ChatAttachmentService.upload pominięty Powodowanie naruszenia NOT NULL na imgs.is_active. Dodano domyślny rekordState. Utwardzony ChatAtchmentController...
Preferuj nazwę użytkownikaAlias over User.name in memberDisplayName
Przełącza priorytetowe wyświetlanie nazwy na: Member.usernameAlias - User.name.name.name. Zawiera również poprawkę wysyłki zapytań stronni z poprzedniego commit...
Użyj split First/After zapytań dla sesji czatu na stronie punktu końcowego
Adresy puste zakładki Czaty poprzez wysłanie na .
Podniesienie czasu odczytu klienta do 120s dla długich wiadomości
LibreTranslate uruchamia modele argosowe tylko procesora — wiadomość czatu o długości akapitu Do tłumaczenia jest to 20-30, a dłuższe mogą przesunąć się ponad 6...
Śledź czat wsparcia publicznego przez sesję GUID w Redis
Odwiedzający marketing korzystają /ws/public-chat-native bez memberId; bilety nadal Odniesienie do członka podmiotu notariusza org jako requestor. Przyrost PRES...
Zwiększ TTL z lat 90-tych do 300, aby zapobiec fałszywemu OFFLINE na krojeniu karty
Rozwiń skan repozytorium JPA, aby uwzględnić pakiet handlowy
Nowa kamo-wspólna biblioteka wprowadza w sobie : . Co wymaga ? (w com.kamo.z.shared.commerce). MediaService przeskanowany tylko donotmodify.dao.repos, więc brak...
Przywróć import HashMap w ChatWebSocketController
Poprzednia refaktorka usunęła import HashMap, ale uchwytTyping Metoda nadal konstruuje HashMap do ładowności typowania zdarzeń, powodując Forgejo buduje do pora...
Proaktywnie tworzyć konsumenta NATS podczas tworzenia sesji, aby zapobiec utracie wiadomości
Wcześniej konsument NATS JetStream został utworzony tylko wtedy, gdy klient STOMP Wysłano /app/chat/subskrypcja. Z DeliverPolicy.Nowe, wszelkie wiadomości publi...
Przekaźnik z core NATS
Match SecurityService podstawowe publikowanie: zapisz się z Dispatcherem Bezpieczeństwo.theme.provision. zamiast JetStream (stream obejmuje tylko czat).
Użyj PublicChatVisitor displayName na zapytanieOmach na bilety dla odwiedzających
Bilety inicjowane przez odwiedzających żądaj od kodu twardego do członka systemu org, więc DTO wyświetlało nazwisko właściciela org w kolumnie Requestor. Upadek...
Budowanie błędu w GeoLookupService i dodawanie NATS publikowanie wiadomości agentów
- Napraw opcjonalnie vs Lista niedopasowanie typu w - - Wstrzyknąć NatsMessageService do MediaController - Publikuj na czat.session.-guid po agentze tworzy wiad...
Dostawa czatu w czasie rzeczywistym, strony wiadomości, powiadomienia i synchronizacja nazw
Utrzymuj subskrypcję NATS przy wypisaniu się z klientem, aby uniknąć złamania agenta w czasie rzeczywistym - Tag wiadomości odwiedzającego z wiadomościąType-VIS...
Oznacz wiadomości odwiedzające jako typ VISITOR_MESSAGE, dodaj nadajnikName do wiadomości GET
- PublicChatService: ustawione messageType-VISITOR_MESSAGE, aby Frontend mógł się rozróżnić Odzwierciedla echa odpowiedzi agentów na temat STOMP - MediaContro...
Three support/chat issues — NATS relay, auto-popup, topic fallback
1. Switch SupportNotificationService and SupportStompRelayController from JetStream to core NATS — the CHAT_MESSAGES stream only covers chat.> so JetStrea...
Write contact form description as chat message on public ticket creation
The description was only stored on the ticket entity and never appeared in the chat window. Added writeTextMessage() helper and call it after the system event s...
Add debug logging and robust rights parsing for webinar controller
Adds info/warn logging for session data and rights on POST /types to diagnose 403 errors. Also adds fallback parsing for rights stored as JSON strings in Redis ...
Resolve org theme backgrounds not appearing in meet virtual backgrounds
- Add domain-based theme URL resolution for internal K8s service-to-service calls - getPublicBackgrounds now accepts optional domain param to derive correct the...
Upload meet backgrounds to public MinIO bucket with hash-based naming
Was uploading to private 'imaging-meet-recordings' bucket via **************** which caused: - MinIO region mismatch errors on the primary node - Connection tim...
Return serialization-safe Maps instead of raw JPA entities in MeetConfigController
All config/background endpoints were returning raw JPA entities with @ManyToOne(fetch=LAZY) Organization references. Jackson failed to serialize the Hibernate p...
Remove duplicate endpoints from MeetController, add org-themes to MeetConfigController
MeetConfigController already handled config/background endpoints. The duplicate endpoints in MeetController caused ambiguous mapping. Added org-theme background...
Update health probes to HTTP port 80 to match new server config
Startup, readiness, and liveness probes were still pointing to port 8443 with HTTPS scheme, causing pod restart loops.
Switch MediaService to HTTP port 80 — TLS termination at Traefik
Internal cluster traffic doesn't need HTTPS. Traefik handles TLS for external clients. This aligns MediaService with all other services.
Send chat invites to correct WebSocket topic /topic/chat/incoming/{memberId}
Was publishing to /topic/chat/member/{id} but kamo-internal subscribes to /topic/chat/incoming/{id}. Also fixed Member entity field access **************** inst...
Dodaj voip.> do tematów strumieniowych NATS i obsłudze NielegalneWyjątekStateException w VoipStompRelaySAdministrator
Strumień NATS obejmował tylko czat.> subskrybowanie do voip.> rzucił IllegalStateException ([SUB-90007] Brak strumieni pasujących). Dodano voip.> Do badanych st...
Akceptuj - od query param dla cross-subdomain WebSocket auth
Odczyt - ID od ?? Najpierw kwerenda, spadając z powrotem na Ciasteczko. Dzięki temu frontend na stronie internal.kamorm.com jest uwierzytelniający WebSocket łąc...
Obsługa nieświeżego wiązania konsumentów NATS z unikalnym ponownym próbą konsumencką
- Wyodrębnij urządzenie obsługi wiadomości w createTloTnotMessageHandler() metodę - Dodaj logikę próbną z unikalną nazwą konsumenta, gdy "Konsumer już związany"...
Trasa WebSocket przez Traefik na porcie 443
- service.yaml: naprawić port 80-8443, aby dopasować rzeczywisty port słuchawkowy - ingressroute.yaml: schemat użycia https + port 8443 dla backendu - serwertra...
Użyj klastra-wewnętrznego DNS do połączenia NATS
Zmień domyślny URL NATS z WireGuard IPs (100.64.x.x) na Nats.kamo.svc.cluster.local dla serwera lokalnego. Węzła zdalne (k0m1, k2m1) na adres WireGuard IPs.
Uczyń certyfikat TLS opcjonalnym w wdrożeniu MediaService
- Dodaj opcjonalnie: true do tajnego tomu wildcard-kamocrm-com - Aktualizacja pojemnika init init z cert-converter, aby z wdziękiem poradzić sobie z brakującym ...
Dodaj konfigurację Buildx z konfiguracją rejestru niepewnego, aby rozwiązać 401 błędów
Użyj getUsernameAlias() zamiast nieistniejących metod getName() na Member
Dodaj tajemnice API Janus jako zmienne środowiskowe we wdrożeniu - Dodaj JANUS_API_SECRET, JANUS_TOKEN_SECRET i JANUS_ADMIN_SECRET env vars - Upewnij się, że tajemnice są dostępne za pośrednictwem zmiennych środowiskowych oprócz zmiennośrodków środowiskowych oprócz konfigmapy
Dodaj apiSecret do WebRTC config response dla uwierzytelnienia Janus
Jak to, co widzisz żeglugę?
Wszystko to pojawia się w twoim miejscu pracy na własną rękę. Zacznij od bezpłatnego planu i przeczytaj tę stronę ponownie w miesiącu.
