チャット参加とルーティングから非アクティブメンバーを除外
非アクティブ****************会員は、 ライブチャット参加者として対象となります。 共有ライブラリのチャットパスをすべてゲート メニュー 述語: - DMは/グループfind-or-create/add-membersの拒絶か、または非ACTIVEを低下させます MediaSessionMember 行...
パブリックチャットシステムのメンバーを解決する (ハードコードされたsnadjafinia alias)
createSupportSession、createPublicTicket、および所有者の通知 ヘルパーは、ハードコードでorgの「システムメンバー」を解決しました usernameAlias="snadjafinia" lookup, これだけカモに存在しますCRM seed org — すべてのテナントの or...
メッセージを見逃してしまったメールに送信を停止
メッセージプレビューの計算、レジャー PREVIEW 書き込み、および messagePreview テンプレート変数;includePreview の設定をドロップします。 送信者 + カウント + CTA のみを運ぶメール — サインイン後にコンテンツが読み込まれます.
パーシストのスケジュールされた素材の親指のフラグをターゲットに更新
変換パイプラインと同じ離脱エンティティティ orphanRemoval 問題: ヘッドレススイープ 分離した ImgDat と save()/merge() を画像コレクションにカスケードしました。 使用条件 メニュー 代わりに.
録画アップロードをラップして、MediaService がコンパイルする
MinIOStorageService.upload は、ingest() がどちらもチェックされている例外をスローします。 キャッチまたは宣言 — isGuest の一番上にブレイクをビルドします。 それを包み、 実行時間例外として再スローするので、失敗したアップロードは@Transactionalに戻ります.
MeetingParticipant.isGuest() (getGuest はコンパイルしません)。 全般的なエンドポイントに transcribe をリセットします
MeetingParticipant exposes isGuest() (primitive boolean getter), getGuest() ではありません。 また、共有 /api/conversion/transcribe でサマリートランク呼び出しを指す.
パーシストは参加者を招待し、MANAGE MEET SETTINGSを強制し、ダブルインビットパスをドロップします
- createMeeting:招待されたメンバーは、UUID文字列ではなく数値のスノーフレークIDです。 クリエイターのように longToUID を通してそれらをルーティングします。 以前からUUID.fromString 参加者全員の招待状を投げるので、参加者全員に記録されたことはなかった。 - MeetConf...
トランザクションコミット後に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 をメンバーなしで使用しています。 orgのプレースホルダーメンバーのリクエストを参照。 導入事例|PUBLIC パブリックSTOMP接続/接続解除、放送セッション/トピック/プレゼンスに関するキー、 そして、requestor-snapshotからm...
JPAリポジトリのスキャンを拡大して、コマースパッケージを含める
Kamo-shared-library がリリースされました。 必須条件 メニュー (com.kamo.z.shared.commerce で). MediaServiceはスキャンしたdonotmodify.dao.reposだけなので、 Beanは欠落しました アプリケーションが起動できなかった。 より広いスキャン...
ChatWebSocketControllerでHashMapのインポートを復元する
以前のリファクタは、HashMap のインポートが削除されましたが、 handleTyping メソッドは、タイピングイベントのペイロード用のHashMapをまだ構築します。 Forgejo ビルドで 'cannot find 記号: class HashMap' で失敗します.
セッション作成時にNATSの消費者を積極的に作成し、メッセージの損失を防ぐ
以前、NATS JetStream プッシュコンシューマーは STOMP クライアントでのみ作成されました。 /app/chat/subscribe を送信しました。 配送ポリシー 新しい、以前に公開されたメッセージ 消費者は永続的に失われた - 訪問者メッセージと名前の変更を引き起こします エージェントが最初に購読さ...
コアNATSのリレーテーマの規定
マッチセキュリティサービスコア公開:Dispatcherで購読する JetStream ではなく、security.theme.provision.* (ストリームのみチャットをカバー).
訪問者のチケットにpublicChatVisitor displayNameのリクエスト名を使用する
訪問者が開始したチケットは、組織システムメンバーにハードコードリクエストをリクエストします。 DTO は、要求欄に org の所有者の名前を surfacing していました。 秋冬 publicChatVisitor.displayName に戻ると、リストが表示されます。 実際の訪問者(匿名または名前付き).
GeoLookupService でエラーをビルドし、エージェントメッセージのNATS 公開を追加
- 修正オプションとリストタイプミスマッチの******************** - NatsMessageServiceをMediaControllerに注入する - エージェントがメッセージを作成した後に chat.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 型としてタグ付けし、 senderName を GET メッセージに追加します
- PublicChatService: messageType=VISITOR MESSAGE を設定すると、フロントエンドは区別できます STOMP トピックに関するエージェントの応答からの訪問者のエコー - MediaController.getMessage: 送信者を含む 名前 フィールド エージェントが送信...
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...
Voip.> を NATS ストリームのサブジェクトに追加し、VoipStompRelayController で IllegalStateException を処理します
NATS ストリームはチャットのみをカバーしました。> なので、voip にサブスクライブします。> スレッド IllegalStateException ([サブ-90007]) マッチングストリームなし 追加した voip.> ストリームの被写体に覆われているので、両方の被写体がカバーされ、 起動障害を防ぐため、I...
クエリパラメータから、クロスサブドメインWebSocket authを受け付けます
?***= クエリパラメータから ID を読みます。 クッキー。 これは、内部のフロントエンドを可能にします.kamocrm.com 認証する WebSocketは、クロスドメインクッキーなしでmedia.kamocrm.comに接続します。 インターセプターはRedisに対して直接セッションを検証します.
独自の消費者再試行によるNATSコンシューマーバインディングの処理
- createNatsMessageHandler() メソッドにメッセージハンドラーを抽出する - 「Consumerは既にバインドした」時に、独自のコンシューマー名でリトリーロジックを追加 サーバの再起動後にエラーが発生します - 動詞デバッグロギングをクリーンアップ
ポートのTraefikによるルートWebSocket 443
- service.yaml:podの実際のリスニングポートに合わせてポート80→8443を修正 - ingressroute.yaml: バックエンドのスキーム https + port 8443 を使用する - servertransport.yaml: バックエンド TLS の証明書に insecureSkipV...
NATS接続用のクラスター内部DNSを使用する
デフォルトNATS URLをWireGuard IP(100.64.x.x)から変更 nats.kamo.svc.cluster.local ローカルサーバ リモートノード (k0m1、k2m1)はWireGuard IPに残ります.
メディアサービス展開でTLS証明書をオプションに
- 任意追加:ワイルドカードkamocrm-comの秘密のボリュームにtrue - cert-converter initコンテナを更新して、不足している証明書を優雅に処理
