訪問者のチケットにpublicChatVisitor displayNameのリクエスト名を使用する
訪問者が開始したチケットは、組織システムメンバーにハードコードリクエストをリクエストします。 DTO は、要求欄に org の所有者の名前を surfacing していました。 秋冬 publicChatVisitor.displayName に戻ると、リストが表示されます。 実際の訪問者(匿名または名前付き).
会員制覇者支援権の賭けとデュアルモードチケットビュー
- NavTop:サポートボタンを任意のサポート権利(エージェントまたはメンバー)に表示 - サポートボタン:各ドロップダウン項目を右にゲート — チケットを作成/表示、 Webinar をリクエストし、右が保持されたときにのみ表示されるマイウェビナー - SupportTicketListTab: デュアルモード —...
会員制支援権の追加 (133-136)
非エージェントメンバーの4つの新しいサポートスコープの権限を追加します。 メニュー - CREATE SUPPORT TICKET(クリエイト)(134) - 質問 WEBINAR(135) - VIEW MY スケジュールD WEBINARS (136)
右ボタンを SecurityRoleManager に追加して、トップレベルの orgs に追加します
ボタンは、組織.hasParent が false の場合のみ表示されます。 コール POST /api/security/roles/sync-rights はロールテーブルをリロードします.
ゲート サポート/設定 権利、固定 ネットワーク コピー、タブ スイッチ、nav の分岐器に荷を積む
- ネットワークカード:動的ブランチタイトルラベルを使用する更新された記述 - サポート カード: 修正 404 変更による href /help → /support; isSupport + VIEW SUPPORT 右 - 設定カード(ホームページ):ゼロ設定関連の権利を持つメンバーのために隠される - 設定ギア...
RoleRightsSyncServiceを抽出し、sync-rightsエンドポイントを追加
- RoleRightsSyncService: OrgRoleのロール権利同期ロジックを一元化 メニュー テーブル、起動およびオンデマンド - DataLoader: 起動時にロールRightsSyncService.syncAll() に委任 - SecurityRoleController: POST /sync...
役割の権利 DTO を enum 主導し、セキュリティモデルの権利を同期させる
- SecurityRoleDTO.fromOrgRole():すべてのロールレイトを列挙する DB の型の値 一見のように設定 — 新しい権利は NOT SPECIFIED によって自動的に現れます メニュー 同じenum-drivenアプローチ セキュリティモデルのデフォルトロール - OrgRoleRight.t...
ネイティブな updateMemberType を追加し、TeamMemberRow のクエリをメンバーリポジトリに追加する
サポートチャットUX — 名前の更新、タイトル、通知カウント、データグリッド
- NAME CHANGED WSイベントが到着したときに、VisitorNameChangedのチケットチャットの火災 - サポートTicketWindowは用具を出荷します:負荷のrequestorNameのタイトルおよび 名前変更; 更新ページなしでリアルタイムでチケットの状態を更新して下さい - Support...
訪問者サポートチャットでフレンドリーなテキストとしてレンダリングシステムイベント
NAME CHANGEDシステムイベントは、チャットバブルで生のJSONを表示しなくなりました。 それらは中心にされた italic の丸薬(「{name} に名前を変更して下さい」)として表示します。 その他のシステムイベントは、サイレントに無視されます.
リードページ上の空の状態の代わりに、AG Gridの読み込みオーバーレイを表示
ロード状態を真正に初期化して、グリッドは「リードをロード...」を示しています。 最初のフェッチが完了するまで、「リードが見つかりません」のフラッシュを防止します.
AppAvailabilityでgetOrganizationByIdWithFeaturesを使う インターセプター
/api/security/leads の LazyInitializationException を全て解決 他のCRM/POS関連のパス. org.getFeatures() というインターセプター トランザクションが閉じた後、新しいメソッドは熱心に機能します 読み取り専用トランザクション内の単一のJOIN FET...
FindByIdWithFeatures を熱心にロードする Organization.features に追加する
JOIN FETCHは機能がいつであるかレイジー初期化Exceptionを防ぐ トランザクション(AppAvailabilityInterceptorなど)の外部へアクセス.
チケット訪問者の地行で都市とサブディビジョンを表示
"都市、地域、国(IP)" として表示 — null がフィルタリングされるので、 国のデータのみが利用可能な場合、十分に劣化
訪問者の地探査で都市とサブディビジョンを公開
- 都市とサブディビジョンフィールドでジオ結果レコードを拡張する - スイッチサポートTicketService.toDTO()を使用してGeoLookupService(IPレベル 参照) 国のみのジオロケーションリポジトリではなく、都市や サブディビジョンは、マッチングGeoLiteブロックからポップアップします
タブ URL を /account ページに追加して、深いリンクとリフレッシュの永続性
タブの状態は、******************************** に同期されますので、リンク 特定のタブの作業と正しいタブは、ページ上で選択されたまま更新します.
GeoLookupService でエラーをビルドし、エージェントメッセージのNATS 公開を追加
- 修正オプションとリストタイプミスマッチの******************** - NatsMessageServiceをMediaControllerに注入する - エージェントがメッセージを作成した後に chat.session.{guid} に公開 エージェントと訪問者は、ページなしでSTOMPを経由してリ...
Correct message sides in history and handle visitor name change events
- Use messageType=VISITOR_MESSAGE from API to determine left/right in history load - Add NAME_CHANGED system event rendering in SystemMessage and TicketChat
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...
******************** は、MEMBER タイプのインスタンスを使用します
Hibernate TYPE(m) = :type は 0 結果を返します。 JOINED継承の会員クラス。 MEMBERタイプ、フェッチオール、 代わりに!(m instanceof TeamMember) でフィルタリングします.
Hibernate Type()ベースクラスの問題により、メンバータブが空の表示を解除
HibernateのTYPE(m) = :type JPQLフィルタは、バインド時に0結果を返します パラメータはベースメンバークラス(JOINED継承)です。 これは影響します メンバー登録者エンドポイント。 FindByOrganizationId() +で置換 ベースメンバーを正しく返すJavaのTeamMemb...
Hibernate SQL ロギングを有効にして、メンバーのクエリを返して診断します 0
Temporarily が org.hibernate.SQL=DEBUG を有効化し、どのような SQL が Type() なのかを確認できます。 JPQL クエリは、メンバー登録者エンドポイントで生成します.
チケットヘッダで訪問者のフラグ、国、IP を表示
- 訪問者を追加するIpAddress、VisitorCountryCode、VisitorCountryName to SupportTicketDTOタイプ - レンダーフラグ emoji + 国名 + パブリックチャットチケットのticketHeaderのIPアドレス行
訪問者のフラグとサポートチケットヘッダの場所を表示
- PublicChatVisitorRepository と GeoLiteLocationRepository を SupportTicketService に注入する - 訪問者をポップアップ表示するIpAddress、VisitorCountryCode、toDTO()のVisitorCountryNameは、...
GetMembersAndSubscribersエンドポイントに診断ロギングを追加
Logs orgId、クエリ結果のカウント、およびパーマンドは、アクティブ状態を手助けする メンバータブが空のリストを表示する理由を診断します.
訪問者メッセージをVisitor MESSAGE 型としてタグ付けし、 senderName を GET メッセージに追加します
- PublicChatService: messageType=VISITOR MESSAGE を設定すると、フロントエンドは区別できます STOMP トピックに関するエージェントの応答からの訪問者のエコー - MediaController.getMessage: 送信者を含む 名前 フィールド エージェントが送信...
チケットチャットでは、常にから始まる「Visitor」のメッセージタイプを扱います
PublicChatService で公開されたビジターメッセージは、MessageType=VISITOR MESSAGE を携帯します。 MemberId に関係なくauthor='them' として明示的にマークします。 エージェントのMemberIdがシステムメンバーと一致しても、左側に表示されます.
LiveSupportPanel STOMPハンドラでVisitor MESSAGEのエコーをスキップ
訪問者メッセージは、backend の messageType=VISITOR MESSAGE にタグ付けされました。 これらをSTOMPサブスクリプションでスキップするので、訪問者のメッセージは、訪問者のメッセージがSTOMPサブスクリプションに含まれていない 応答をサポートしていた場合、左側に再出現します.
LiveSupportPanelでネイティブWebSocketをSTOMP/SockJSに置き換える
- @stomp/stompjs と sockjs-client パッケージを追加 - 代わりにSockJS + STOMPを介してメディア.{domain}/ws/public-chatに接続します 間違ったホストと間違ったプロトコルであったapi.{domain} への未加工WebSocket - STOMPが接続...
STOMP/NATS 経由でエンドツーエンドのパブリックチャットをリアルタイムに修正
- PublicChatWebSocketInterceptorから内部Auth要件を削除 訪問者はセッショントークンのみで直接接続できます - 訪問者の displayName を ChatMessageDto の senderName に含めて下さい チケットチャットでメッセージングしている人を見る - NATSサ...
ステータスフィルタと自動シード必須テンプレートをリストにワイヤーアップ
- EメールTemplateController.list() は ?status= パラメータとフィルタを受け付けます。 既存のfindByOrgIdAndStatus リポジトリクエリを使用する - 初期のシーディングを見逃したorgsのオートシードに必要なテンプレート (seedForOrgIfMissing チ...
NEW TICKET NATS通知の自動オープンサポートチケットポップアップ
新しいサポートチケットが到着すると、バックエンドはNEW TICKETを送信します。 PENDING COUNT に加えて、STOMP メッセージ。 サポート数Context ツール:open をディスパッチすることで、チケットチャットウィンドウがポップアップ表示されます。 エージェントが /support にナビゲー...
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...
