채팅 참여 및 라우팅의 비 액티브 회원 제외
* * * * * * * * * * * * * * 대상, 라이브 채팅 participant. 공유 -lib의 모든 채팅 경로 *************** 이전 : - DM create / 그룹 find-or-create / add-members 거부 또는 드롭 비 행위 MediaSes...
공개 채팅 시스템 회원 per-org (drop hardcoded snadjafinia alias) 해결
createSupportSession, createPublicTicket 및 소유자 알림 helpers 모든 해결 org의 "시스템 멤버"를 통해 hardcoded nameAlias="snadjafinia" lookup, 이는 KamoCRM에서만 존재합니다. Seed org - 모든 t...
메시지를 남겨주시면 missed-message 메일로 문의해 주십시오
MessagePreview 계산을 제거, ledger PREVIEW 쓰기, 그리고 messagePreview Template variable; includePreview preference을 삭제합니다. 지금 이메일은 sender + count + CTA를 실행합니다.
대상 업데이 트를 통해 Persist 예정된 소재의 엄지 플래그
변환 파이프라인과 동일한 detached-entity orphanRemoval 문제점: headless 청소 detached ImgDat 및 save()/merge()를 이미지 수집에 복사했습니다. 제품 정보 *************** 대신.
Wrap recording upload 그래서 MediaService 컴파일
MinIOStorageService.upload는 ingest()가 없는 체크한 예외를 던졌습니다. 붙지 않고 선언 - isGuest 수정의 상단에 휴식. 그것을 포장하고 런타임 예외로 되돌아가기 때문에 @Transactional을 다시 업로드합니다.
MeetingParticipant.isGuest() (was getGuest는 컴파일되지 않습니다); 일반적인 endpoint에 transcribe를 다시 설정하십시오
MeetingParticipant 노출 isGuest() (primitive boolean getter), getGuest(). 또한 공유 /api/conversion/transcribe에서 요약을 호출합니다.
Persist 초대 참가자, MANAGE MEET SETTINGS, 드롭 더블 초대 경로
- createMeeting : 초대 회원은 UUID 문자열이 아닌 숫자 snowflake ID입니다. 제작자처럼 longToUUID를 통해 경로. 이전 UUID.fromString 모든 초대를 위해 threw 그래서 아무도 참가자로 기록되었습니다. - MeetConfigControll...
트랜잭션 후 NATS CREATE 이벤트를 게시하여 이미지 첨부 레이스를 수정
NATS 메시지는 @Transactional body 내부에 게재되었습니다. 수신자는 CREATE 이벤트를 받고 이미지를 요청할 수 있습니다. /imaging/proxy/{objImgId} 전에 MediaObjImg 행이 DB에 표시됩니다. 결과 404 및 채팅이 다시 열릴 때까지 이미...
Serialize attachments in WS relay and message history; allow attachment-only sends
Three bugs fixed: 1. ChatSessionSubscriptionManager was building the STOMP messageMap manually and omitting attachments, sourceLanguageId, readMemberId, msg...
Fix NPE in getChatSessions from Map.of() rejecting null nextcoder
java.util.Map.of() throws NullPointerException when nextcoder is null (no more pages). Replace with HashMap that accepts null values. Also wrap entire handler i...
Fix upload 500 (missing EmbRecordState) and empty chats tab (Timestamp cast)
Defect A: ChatAttachmentService.upload omitted **************** causing a NOT NULL violation on imgs.is_active. Added the default recordState. Also hardened Cha...
Prefer usernameAlias over User.name in memberDisplayName
Switches display name priority to: Member.usernameAlias → User.name → User.alias → User.username. Also includes the paged query dispatch fix from the previous c...
Use split First/After queries for chat sessions paged endpoint
Addresses empty Chats tab by dispatching to ****************
Raise client read timeout to 120s for long messages
LibreTranslate runs CPU-only argos models — a paragraph-length chat message takes 20-30s to translate, and longer ones can push past 60s. The 8-second read time...
Redis에서 세션 GUID에 의해 공개 지원 채팅 추적
마케팅 방문자 사용 /ws/public-chat-native 없이 memberId; 티켓 여전히 org placeholder 회원을 requestor로 참조하십시오. 사업소개 PUBLIC public STOMP connect/disconnect, 방송 sessionGuid on /top...
JPA 저장소 스캔을 확장하여 상거래 패키지를 포함
새로운 kamo-shared-library에서 가져옵니다 *********** 제품 설명 *************** (com.kamo.z.shared.commerce에서). MediaService는 donotmodify.dao.repos 만 스캔했습니다. 그리고 응용 프로그램은 시작 ...
ChatWebSocketController에서 HashMap 가져오기 복원
이전 refactor는 HashMap 가져 오기를 제거하지만 HandleTyping 여전히 태핑 이벤트 페이로드에 대한 HashMap을 구성, 원인 Forgejo는 '암호를 찾을 수 없습니다. class HashMap'.
세션 생성에 NATS 소비자를 활성화하여 메시지 손실을 방지합니다
NATS JetStream 푸시 소비자는 STOMP 클라이언트가 만들 때만 생성되었습니다. /app/chat/subscribe를 보냈습니다. DeliverPolicy로. 새로운, 어떤 메시지가 전에 출판 소비자는 영구적으로 손실되어 있습니다. 방문자 메시지 및 이름 변경 에이전트가 먼저...
Core NATS의 릴레이 테마 제공
Match SecurityService 핵심 출판 : Dispatcher와 구독 security.theme.provision.* 대신 JetStream (스트림은 채팅을 포함).
이용 PublicChatVisitor display방문객 티켓에 requestorName
방문자 개시 티켓 hardcode requestor to the org system member, 그래서 DTO는 Requestor Column의 org 소유자의 이름을 서핑했다. (주) publicChatVisitor.displayName로 돌아가기 때문에 목록이 표시됩니다. 실제 방...
GeoLookupService에서 오류를 작성하고 에이전트 메시지에 대한 NATS 게시를 추가
- 옵션 수정 대 목록 유형 잡기 *********** - NatsMessageService를 MediaController에 주입 - 채팅에 게시.session.{guid} 에이전트가 메시지를 작성한 후 대리인과 방문자는 페이지를 새로 고침 없이 STOMP를 통해 즉시 그것을 보십시오
Real-time chat delivery, message sides, notifications, and name sync
- Keep NATS subscription alive on client unsubscribe to avoid breaking agent real-time delivery - Tag visitor messages with messageType=VISITOR_MESSAGE in getMe...
태그 방문자 메시지로 VISITOR MESSAGE 유형, add senderName to GET 메시지
- PublicChatService: messageType=VISITOR MESSAGE를 설정하여 프론트엔드를 구분할 수 있습니다. STOMP 주제에 대한 에이전트 응답에서 방문자 에코 - MediaController.getMessages: sender 포함 이름 필드 그래서 에이전트는...
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...
VoipStompRelayController의 IllegalStateException을 처리하는 NATS 스트림 주제에 voip.> 추가
NATS 스트림은 채팅을 덮었다.> 그래서 voip에 대항.> 뚱 베어 IllegalStateException ([SUB-90007] 일치하는 스트림 없음. 추가된 voip.> 스트림 주제에 따라서 두 주제는 덮여, 확장 IllegalStateException을 사용하여 시작 실패 방지...
Cross-subdomain WebSocket auth를 위한 질의 param에서 ***
읽기 *** ID 에서 ? *** = 쿼리 매개 변수 먼저, 다시 떨어지기 제품정보 이것은 internal.kamocrm.com에 프론트엔드를 허용한다. 웹소켓은 크로스 도메인 쿠키없이 media.kamocrm.com에 연결됩니다. Interceptor는 Redis에 직접 세션을 검증합...
독특한 소비자 retry와 결합된 stale NATS 소비자
- createNatsMessageHandler() 메소드로 메시지 핸들러 추출 - "Consumer already bound"일 때 고유한 소비자 이름과 재량 논리 추가 서버 재시작 후 오류 발생 - 동서 debug 로깅 청소
포트 443에 Traefik을 통해 웹소켓
- service.yaml: 포트 80→8443을 수정하여 pod의 실제 청취 포트와 일치 - ingressroute.yaml : 사용 계획 https + 포트 8443 백엔드 - servertransport.yaml : 백엔드 TLS cert에 insecureSkipVerify 추가 ...
NATS 연결을 위한 클러스터 내부 DNS 사용
WireGuard IPs에서 기본 NATS URL 변경 (100.64.x.x) nats.kamo.svc.cluster.local 서버. 원격 노드 (k0m1, k2m1)는 WireGuard IP에 남아 있습니다.
MediaService 배포에서 TLS 인증서 선택
- 선택 추가 : wildcard-kamocrm-com 비밀 볼륨에 true - cert-converter init 컨테이너를 업데이트하여 누락된 인증서를 안전하게 처리하십시오
