Add findByAssignedMemberId クエリメソッドをPhoneExtensionRepositoryに追加する
プローブマスターモデルエンドポイントと修正応用モデル org ID
- 直接プローブでapplicationModel.sourceベースゲートを交換 /api/security/master-model マウント; r.ok=false (409) は org を意味します ブランチタイプで管理されている — バックエンドの使用を同一チェック - null を useAppliedM...
Gate censorship tab options by applied model constraints
- Hide EDIT MASTER MODEL button when org is governed by a branch type (use appliedModel.source instead of unreliable org context branchTypeID) - Hide ATF fiel...
URL クエリ パラメータの持続的なメールボックス
メールボックスを切り替えると、URL(?mailboxType、?mailboxId、?mailbox)が更新されます。 ブラウザをリフレッシュすると、同じメールボックスが復元されます。 メッセージブラウザの読み込み window.location.search のレイジー使用状態の初期化に復元 最初のレンダーの前に ...
Mark-as-read and message fetch for shared/member mailboxes
Classic mode now loads shared mailbox messages via the correct /messages/{folder} endpoint (was calling the non-existent /conversations endpoint). Fetching a fu...
Mark-as-read for shared and member mailboxes
EmailController.setFlags now accepts an optional mailboxId query param and routes through resolveProviderWithMailbox so member-mailbox flags are set against the...
Show accurate provider connection status from isConnected field
Replaces the old logic that showed "Connected" for any provider with no sync error (including brand-new providers that were never tested). New three-state badg...
Persist connection test result to isConnected field
- test() endpoint saves isConnected=true/false to DB after every health check - update() resets isConnected to null when configJson changes (credentials may h...
Add isConnected field to VoipProviderInstance
Nullable Boolean: null = never tested, true = last test passed, false = failed. Requires KamoInitializerService schema migration to add IS_CONNECTED column.
Use extensionId as external ID, not Relay node id
FreePBX returns the same Relay id (ZXh0ZW5zaW9uOg== = "extension:") for every extension because the id field is not populated. Using it caused all extensions to...
クラスCastException を防ぐため getMessage で IMAPInputStream を扱います
JavaMail は、デコードされた文字列の代わりに IMAPInputStream を返すことができます。 session.getContent() メッセージ内容があらかじめ取得されていない場合 ザ・オブ・ザ・ 直接(String)はparseMultipart()のthrew ClassCastException...
ライブミリ秒カウントダウンでアクティブなオファーバナーを表示
アクティブなプロモーションサーバー側をホームページでフェッチし、 HeroOfferBanner は、サブヘッドラインとフリーフォワーバーのコールアウトの間です。 バナーは割引額、期間、およびライブカウントダウンを示しています アニメーション付き**************** グラデーション・グローのボーダーとシマー...
ワイヤー 利用できる/不利用できるスイッチはバックエンドに転換し、オフラインの存在のバグを修理します
- NavTopで利用可能な/使用不能にPaused/Activeチップの名前を変更 - 新しいme/availability APIを介してマウントおよびパージストトグルの初期可用性をフェッチ - 会員インターフェイスおよびメンバー項目のpropにisAvailable分野を加えて下さい - 会員リストパスは、別部署...
ライブスキーマのイントロスペクションに対するすべてのGQLクエリ/マイテーションを書き換える
すべてのフィールド名を検証し、実際のFreePBX 17スキーマに対してタイプします。 修正の完全なセット: クエリ: - fetchAllExtensions: 拡張子から存在しない 'voicemail' フィールドを削除 - fetchAllUsers → AllCoreUsers { coreUser { エ...
SelectFolder を YarnDetailView に渡します。メール:folder-changed が有効なフォルダーで消火します
chat.folder は Java ConversationEntity から常に未定義です。 フォルダーの文字列フィールドではなく、folderIds (text[]) を持っています。 この原因の loadThread へ call markConversationRead とメール:folder-changed...
FetchAsteriskDetails への正しい GraphQL フィールド名
FreePBX API は "fetchAsteriskDetails とはどういう意味ですか?" を返します。 クエリとそのデータパスアクセサをそれに応じてチェックします.
GraphQL クライアントに XHR/Accept ヘッダと String レスポンスの解析を追加
FreePBXTokenCache と同じパターン: X-Requested-With + 受け付け: application/json FreePBXのHTMLリダイレクトレスポンスを抑制し、3つのコールサイトをすべて切り替える (queryOnce, restGet, restPost) から responseEn...
メールボックスのドロップダウンをロード上のプライマリメールボックスに同期
選択したメールボックスが初期化されるため、最初のリスト項目にデフォルトでドロップダウン mailboxId なしで、現在のValue が 'personal' を bare に解決する どのオプションも一致しません。 プライマリから選択したメールボックスを設定します(または) 最初に) メールボックスが読み込まれるアク...
アップロードサイズを500MBに上げる
Spring Boot のデフォルトは 1MB の複数の部分を、背景イメージを引き起こします アップロードして500リクエストで失敗します。.getParts()。 マッチセキュリティサービス 既存の 500MB が制限されるため、APIService は大きなファイルアップロードをプロキシできます.
表面 HTTP エラーによりアップロード失敗が見える
サイレントコンソールを非OK状態にスローされたエラーで置き換え、 そのため、実際の失敗の理由(status + response body)が表示される 代わりに、無声にカウントを更新するために進みます。 追加された console.log 新しい画像がキューに入れられ、POSTされている画像の数を追跡します.
Add トークンエンドポイントのAccept+XHRヘッダーと未加工文字列応答解析
FreePBX はクラスター DNS 経由で呼び出されたときにテキスト/html を返しました。 ホストヘッダは、設定された PBX HOSTNAME と一致しなかった。 追加する 受け入れ: application/json と X-Requested-With: XMLHttpRequest は FreePBX を...
アニメーション制御による最小限のタブエントリをドライブ
Animate={...} を animate={tabControls} に切り替えると、エントリが壊れました アニメーション: tabControls は、マウントにキュートなターゲットを持たないので、ボタンは保持されます。 初期 { y: 100 } 位置 (以下画面). useEffectを追加 explici...
FreePBX API の OAuth2 スコープ文字列を修正
FreePBX スコープはトップレベルの識別子です: 'gql' (すべての GraphQL) および 'rest' (すべてのREST)。 'gql:read' はモジュールの GQL を意味します。 'read' という名前で、存在しない、無効な scope 400 エラーを引き起こします.
ライブ未読バッジ+新しいエージェントメッセージのバウンス
- ウィジェットが最小限に抑えられる間、LiveSupportPanel搭載の画面を維持 (サポートセッションが存在する場合のみ) STOMP サブスクリプションの滞在 alive と onUnreadMessage は、エージェントのメッセージをいつでも受信するのを防ぎます。 訪問者はチャットを見ていません。 - す...
ClusterIPサービスで直接露出ポート8088
ポート 80→8088 マッピングのみをサービスにしました。 内部サービスの利用 メニュー (例:VOIPService APIトークン リクエスト) ポート8088がリスナーがなかったため、タイミングアウト クラスタIP.
バックエンドのバックエンド数を信頼し、クライアントのオフセットをドロップ
バックエンドの pendingCount は現在未読ベース (counts Support TICKET session) 所有者のLastViewedよりも新しいメッセージで。 エージェントが開いたとき チケット、MarkAsRead → バックエンド放送 → フロントエンドは新しいを反映しています 自動的にカウント...
エージェントの読み込みと訪問者の送信で配信停止数+未読
-************************ に委任されました *****************************************************************************************************************************...
未読ベースカウント+ルックアップバイセッションヘルパー
****************************************************************************************************************************************************************...
K1m1 の ConfigMap の 行方不明の追加
デプロイメントの参照は2ban-config ConfigMap (jail.local + asterisk-security.conf は存在せず、Podをブロックする マウントボリューム。 FreePBXの起動と防止.
MarkAsRead エージェントが送るので、 lastViewed の進歩
サポートチケットでは、訪問者とエージェントメッセージの両方が保存されます。 同じシステムメンバーなので、未読のクエリはメンバーアグノスティックであり、 lastViewedに完全に依存します。 エージェントがマークされていない場合AsRead 以降 送信、独自の返信は、新しい訪問者メッセージとしてカウントされます リス...
サポートチケットは会員制の未読カウントが必要です
サポートチケットの訪問者メッセージは、同じシステムの下で保存されます会員 エージェントが認証するので、既存のCHATセッションは未読 m.member.id = :memberId を除く — 常に 0 を返す サポートセッション チケットリストのバッジは登場しません。 countAllInSession + cou...
ログを追加してアップロードバックグラウンドエンドポイントへ
Org/index, ファイル情報, userId, auth の決定, および MinIO のステージング バックグラウンドアップロードがステージングバケットに表示されない理由を追跡するキー.