GetHasAttachments() を使用して、Boolean のラッパータイプにマッチします
****************は、ボオラン(ワラッパー)なので、ロボク isHasAttachments() ではなく getHasAttachments() を生成します。 後者のみ プリミティブボオランに存在します。 Boolean.TRUE.equals() を使用して安全にハンドルを処理します。 null の...
JPAリポジトリのスキャンを拡大して、コマースパッケージを含める
Kamo-shared-library がリリースされました。 必須条件 メニュー (com.kamo.z.shared.commerce で). MediaServiceはスキャンしたdonotmodify.dao.reposだけなので、 Beanは欠落しました アプリケーションが起動できなかった。 より広いスキャン...
ChatWebSocketControllerでHashMapのインポートを復元する
以前のリファクタは、HashMap のインポートが削除されましたが、 handleTyping メソッドは、タイピングイベントのペイロード用のHashMapをまだ構築します。 Forgejo ビルドで 'cannot find 記号: class HashMap' で失敗します.
Min-w-0 をメール コンテンツ div に追加して、オーバーフローx-auto の火災
Min-w-0 がなければ、flex-col の子のデフォルト min-width:auto は解決します 最小コンテンツ、広いメールテーブルが列を貼り付けたdivを拡張することを可能にします 幅。 外側のオーバーフローx-hiddenは、代わりに拡張されたdivをクリップしました スクロールバーの作成 min-wid...
SendMessageで重複するConnectStompコールを削除します
最初のメッセージが新しいセッションを作成するとき、onSessionCreated の更新 props これは、connectStompを呼び出すためにuseEffectをトリガーします。 sendMessage のインライン呼び出し useEffects のdisconnectStomp によって、冗長ですぐに殺され...
セッション作成時にNATSの消費者を積極的に作成し、メッセージの損失を防ぐ
以前、NATS JetStream プッシュコンシューマーは STOMP クライアントでのみ作成されました。 /app/chat/subscribe を送信しました。 配送ポリシー 新しい、以前に公開されたメッセージ 消費者は永続的に失われた - 訪問者メッセージと名前の変更を引き起こします エージェントが最初に購読さ...
リアルタイムメッセージが低下するギャップを閉じる
サブスクリプション使用から `connected` を削除します。ticketChat のエフェクトの deps は、 チャットボックス。 以前は、すべてのWebSocketがトリガーされたエフェクトを再接続する unsubscribe() と呼ばれる cleanup は、セッションを削除しました。 サブスクリプション...
システムユーザーが org ブランディングを管理し、ロゴ auth を固定することを可能にします
- canManageOrgBranding のプラットホームの最初の監視としてシステム ユーザーバイパスを加えて下さい システム ユーザーはすべての非親のorgs上のフル ブランディング制御を持っています - ロードされた生のorg所有者のみチェックを持っていたアップロードLogoエンドポイントを修正 両方canMa...
電子メールビューペインの水平オーバーフローを3番目の列に保持
- MessageBrowser の外コンテナにハード境界としてオーバーフローx-hidden を追加 - 列3ラッパーとオーバーフローx-autoにオーバーフローx-hiddenをメールコンテンツエリアに追加する - 制約SanitizedEmailRenderer Shadow ホストと max-w-full オー...
生産はPJSIPの刑務所およびpersistentの状態と2ban失敗します
- [asterisk] と [freepbx-web] の jails で、fail2ban-configmap.yaml を追加します。 増分禁止エスカレーション(1h→24h→30d天井)、LAN無視、およびa PJSIP SecurityEvent レコードをターゲットとするカスタム asterisk-secu...
Coqui TTSをPiper TTS(en US-norman-medium)に置き換える
Coqui VCTKモデルには、スピーカーの名前が付けられていないため、Piper TTSに置き換えられます。 正確にノーマン[中] 声。 パイパーバイナリ(〜3 MB)とモデル(〜60 MB) 最初に実行してキャッシュされた init コンテナによってダウンロードされます。 /var/lib/piper/{bin,m...
Reset stale hasAttachments on sync and accumulate correctly
- Reset has_attachments=false at start of bulk sync so stale true values from old false-positive MIME detection are cleared before re-indexing - Accumulate ha...
Add resetHasAttachmentsForFolder query to ConversationRepository
Allows sync to reset stale has_attachments flags before re-indexing so corrected MIME detection can rebuild the field from actual attachment data.
Integrate Coqui TTS with norman voice (VCTK p267)
- Deploy coqui-tts server (VCTK VITS model, CPU-only) as ClusterIP service on port 5002 with model cache at /var/lib/coqui-tts on k1m1 - Inject coqui_tts.agi ...
返信/フォワードおよび修正の送信先のアドレスに事前に入力
- DraftMessageは、OpenNewMessageから流れているので、今から運びます 作曲者へ - MessageBrowser は、アクティブなメールボックスのメールアドレスを格納します。 個人的なメールボックスは、返信/フォワードを開くときにそれを渡す - MessageToolは、初期データからMetア...
送信先のアドレスオーバーライドのサポート
FromAddressRequest を emailSendRequest に追加して、フロントエンドを指定できます alias/shared/mailbox アドレスから送信する。 SmtpOnlyProvider リリース 現在、ヘッダのアドレスを継承し、 設定されていないときにプロバイダの設定メール.
Add LAN DNS pod for split-DNS on k1m1
Deploys a dnsmasq pod with hostNetwork on k1m1 that listens on 192.168.4.22:53. Overrides pbx.k1.kluster.kamocrm.com -> 192.168.4.22 so LAN phones reach the PBX...
Split-DNS/LANクライアント RTP 修正用に local net を追加
K1m1と同じLAN上の電話は、分割されたDNSを介して接続します(ドメインが解決する) 192.168.4.22 内部で。 local net がなければ、Asterisk はまだ広告しています SDP の外部ドメインを LAN クライアントにルーティングし、パブリック IP 経由で RTP をルーティングします。 ...
Persist の sorcery contact=memory の苦境およびブロック SIP の走査器 の start.sh
- Asteriskが始まる前に、 [res pjsip] contact=memory を sorcery.conf に注入します。 デフォルト sorcery-astdb SQLite バックエンドは、すべての REGISTER コンタクトを静かにドロップします。 - 既知のSIPスキャナー87.246.54.22...
Sub-tab content fills full content-area width
Drop the centered max-width constraint (was 920 / 1200 / 680 / 720 depending on tab) on SubTabShell. The page already lives inside SettingsView's content column...
Fix attachment parsing and hasAttachment false positives
Three fixes to EmailImapService: 1. toEnvelope: narrow multipart check to multipart/mixed only — plain HTML+text emails (multipart/alternative) no longer sh...
Add download button to classic view attachment section
The classic view (MessageBrowser) had its own attachment list that was missing the download button — only the conversation view was fixed previously. Also align...
Add com.kamo.z.shared.commerce to EnableJpaRepositories scan
**************** (required by **************** in the shared library) lives under com.kamo.z.shared.commerce but was not included in the JPA repository scan, ca...
適切なレイアウト、パディング、および提供者のロゴ
レイアウト/間隔の修正: - 6つのタブ(プロバイダー、エクステンション、電話ユーザー、デバイス、ボイスメール、健康) TabShell に px:{xs:2,md:3} py:3 pb:6 のパディングでコンテンツをラップするようになりました パネルの端に対してボタンをもはやbutt。 - スティール2列タブヘッダー...
Correct field name and type in getFromAddresses response
Backend was sending 'email' key but frontend expected 'address', and sent type 'shared_mailbox' when frontend expected 'shared'. Also fixes hasMailboxes flag wh...
Load FROM addresses from accessible mailboxes and aliases
Replaces the broken getFromAddresses() endpoint (which sent 'email' instead of 'address') with getAccessibleMailboxes() + listMemberAliases(), matching the same...
CockroachDB対応DROP INDEX CASCADE構文を使用する
CockroachDB は、ALTER TABLE ... DROP CONSTRAINT を UNIQUE 制約で拒否します。 unimplemented: UNIQUE制約 "uk org oauth provider" は使用できません。 ALTER TABLE DROP CONSTRAINTは、代わりにDRO...
ドロップ stray VOIPService spec md から repo
プロジェクト慣行ごとに(.md ファイルがサービスで出荷されない).
リポジトリのスキャンにcom.kamo.z.shared.commerceを含める
最新のkamo-shared-library伝搬 メニュー (donotmodify.dao.services) はコンストラクタの依存性を持つ メニュー メニュー ザ・オブ・ザ・ サービスは VOIPService のコンポーネントのスキャンによってロードされますが、そのリポジトリは スコープから、スタートアップでU...
プラットホーム構成タブ(一般/VOIP及びSMS/システム ユーザー/高度)
ラップ ************************ で 設定ビュー 4 タブ: - 概要:読み取り専用プラットフォームの概要 — 全オーガニゼーション電話サーバ インスタンス数、アクティブな SMS provider インスタンス数、最後のグローバル VOIP 同期 タイムスタンプ。 最新情報 - VOIP及び...
添付ファイルのダウンロードボタンとデカップリングマークを読み取ります
- 各添付行にダウンロードアイコンボタンを追加すると、ユーザーは強制的にできます 新しいタブで開くのではなくファイルのダウンロード - Decouple markConversationスレッドロードトライ/キャッシュから読み込むので 一時的なOTK/networkは偽の糸負荷として表面を失敗しません エラーやメールを...
グローバル VOIP 同期ジョブ (admin 調整可能な間隔)
VoipGlobalSyncJob は、毎分チェックを行い、各ティックで読み込みます。 システムコンフィギュレーションのシングルトンは、グローバル・シンクが原因であるかを決定します。 - voipSyncEnabled が false → skip の場合。 - 最後のGlobalVoipSyncAt + voipSy...
System-config + プラットフォーム・オーバービューエンドポイント
プラットフォーム全体の構成面、既存のトップレベルの所有者によってゲート ガード(SystemUserConfigControllerのrequireTopLevelOwnerパターンにマッチ)。 エンドポイント: - GET /api/security/system-config — シングルトン行を返す - PUT...
パーインスタンスリソースコントローラ + org集計 + 内部同期
インスタンスリソースCRUD(拡張/ユーザー/デバイス/ボイスメール): - VoipExtensionsController(@***********************************************************************************************...
マルチインスタンスプロバイダレファクタ+フルFreePBX +フロールートSMS
コアモデルの変更: 1 つの org → 多くの VoipProviderInstances (was: 1 つの org). プロバイダーの API 呼び出しは、インスタンススコープ化されます。 PhoneProviderインターフェイス: - エクステンション/ユーザー/デバイスCRUD +ボイスメールオーディオ...
マルチインスタンス電話/SMSプロバイダ移行
Hibernate ddl-auto:update の後に実行すると、新しいテーブル(VOIP PROVIDER INSTANCE)が作成されます。 BULK TEXT PROVIDER INSTANCE、PHONE EXTENSION、PHONE END USER、PHONE DEVICE、 PHONE VOICEM...
マルチインスタンス電話/SMSプロバイダースキーマの基礎
- VoipProviderConfig → VoipProviderInstance の名前を変更します。UNIQUE(org id) をドロップし、インスタンス名、config json、last sync at、last sync error を追加します。 - BulkTextProviderConfig → ...
MinIO (rclone FUSE) からローカル /var/lib/pbx に移動する
Rclone FUSE による MinIO は POSIX chmod や symlink() をサポートしていません。 FreePBXのモジュールシステムが必要です。 すべてのFreePBXとMariaDBを変更 hostPath は /mnt/shared-files/pbx/ から /var/lib/pbx/ ま...
MinIO FUSE hostPath 用の PHP 経由で fwconsole/amportal をラップ
/var/lib/asterisk は、サポートしていない rclone FUSE 経由で MinIO がバックアップされます。 POSIX chmod なので fwconsole スクリプトは、そのボリュームで実行可能にすることはできません。 boot.sh は ephemeral /usr/local/bin で ...
プレストップホックと終了GracePeriodSecondsを追加
コンテナは、バックグラウンドAsteriskのために用語集に立ち往生していた apache2ctl (PID 1) が終了した後に実行されるプロセス。 preStopのホックは送ります Kubernetesが容器を殺す前にAsteriskにSIGTERMはきれいにすることを可能にします ポートのリリースと、次のPodが...
Boottrap.php を追加して /etc/freepbx.conf を再生成する必要があります
インストーラは、datasource='' と require once で freepbx.conf を記述します。 boottrap.php では、config.php は FreePBX のクラスを読み込みます。 「Class FreePBXが見つからなかった」という2つのバージョンがリリースされました。 すべて...
再起動時に /etc/freepbx.conf を再生する
/etc は ephemeral ( hostPath ではなく) なので /etc/freepbx.conf は インストーラは、すべてのPodの再起動で失われます。 再生するブランチを追加 boottrap.php が既に存在しているときに env vars から、admin UI は 続いているすべてのブーツでM...
Start asterisk をバイパスし、代わりに制御ソケットを待ちます
start asterisk は `pidof asterisk` を使って、 Pod で false 正を返します。 再起動すると、待ち合わせループが掛かるようになります。 スタートアップ.shが始まります Safe asterisk 経由で直接アスタリスク(階段ソケット/ピッドファイルをクリアした後) 制御ソケット...
バックグラウンドでAsteriskを起動し、それを待って、インストーラを実行します
Entrypoint.sh は FreePBX インストーラーを実行していません。 サービス。 boot.sh は、エントリーポイントのセットアップ手順を再現しました。 バックグラウンドでAsterisk、そのソケットが準備されるのを待ってから、実行します php は最初の起動時にインストールします。その後、Apach...
エントリーポイント ハンドル インストール, 起動しません.sh
FreePBX インストーラー (php install -n) は、Asterisk が必要です。 ランニング。 スタートアップ.sh は、Asterisk が起動する前に呼び出されました。 「Asteriskで通信するエラー」クラッシュ。 スタートアップ.sh は待ち合わせのみ MariaDB と Apache の...
/etc/asterisk を /etc だけマウントし、PHP の単純なxml エラーを修正
HostPath のボリュームとして /etc をマウントすると、PHP の拡張子が破損していた 画像から参照した後でも読み込み — easyxml load file undefined インストール時間 今だけ/etc/asteriskは主張されます;/etcはから来ます PHP の config の intact...
CPUの限界を2:1の比率に減らして下さい過コミットを除去して下さい
Docs 4→1 コア、ジブリ 4→2 コア、libretranslate 2→1 コア、 ベルガモット2→1コア、コターン1→0.5コア。 ノードの制限を離れた~7.5コアを保存します.
正しいアーキテクチャでescomputers/freepbx:17に切り替える
疲労/freepbx に FreePBX 17 イメージがありません(2022 年以来の放棄)。 escomputers/freepbx:17 (updated Apr 2026, Asterisk 21 + FreePBX 17) 必要 別の MariaDB pod と 1 回 php のインストール手順。 変更点...
パブリック管理者の進行をドロップします。 http://k[12]m1:8088 経由でアクセス
ポート8088(FreePBX's)にLAN/WireGuardを経由して、管理者UIが内部でのみ nginx はホストネットワークに直接バインドします。 いいえ Traefik ルート、Let's Encrypt なし PBX 自体のパブリックポート 80/443 転送は必要ありません.
FreePBX 17 + jigasi SIP ブリッジを k1m1 と k2m1 にデプロイする
FreePBX (tiredofit/freepbx:17-latest) は hostNetwork で実行されるため、SIP/RTP 実際のクライアント IP を保存し、nodeSelector 経由で 1 ノードをピン留めします。 SIPについて 5060 UDP/TCP (5061 TLS)、Janusを避ける...