Load org logos from MinIO theme public path like dashboard
Use getThemePublicBaseForDomain so logo URLs match getThemePath()/img/logo.svg instead of legacy /domain/.../kamosite paths that 404 and fell back to initials.
Add missing nav-top strings and scope translations
English messages listed components.navtop.* keys for Mail/Docs/Voip buttons but never defined hi/welcome, branches, account, credits, calendar, chat, etc., so n...
Resolve nav-pri labels showing raw i18n keys
Use namespaced next-intl translators for nav and components.nav.navPri so lookups resolve against the merged message trees; add panel aria strings under navPri;...
Add MessageBrowser i18n strings and restore load error copy
next-intl threw MISSING_MESSAGE for components.messages.browser.* keys missing from en.json, breaking /messages render. Add English strings, use loadMessagesFai...
イメージングストリームのようなMinoオブジェクトキーを録画する
FILE EXT が null/empty であるときに拡張子を省略すると、オブジェクト名がマッチする RecordingImagingService および ImagingController のレコーディング Java 文字列は null でコンカット ソフトフォンメディアプレーヤーで {datId}.null を...
Sdk.invite が解決する前に呼び出されたハングアップがダイヤルをキャンセルする
レース条件: 接続中にハングアップ() は、まだ終了しませんでした (sdk.invite は WireSession の前に待っています)、そう呼ばれるとにかく。 cancelDuringDialRef — 設定された ハングアップ() で、ダイヤル() でチェック 遅発のセッションをすぐに殺すのを待っています.
作成後のオートエンターニューオーガナイゼーションにより、メンバーは自分の役割と権利を持つ土地を造る
Org 作成後、セッションは親コンテキスト(管理者権限なし)に残り、 新しいオーガニの所有者が設定が見られないままにします。 今、ウィザードフェッチを作成する 新しい org のドメインを呼び出して Enter-as を呼び出し、 /validate を介してリダイレクトする Member's *** は、新しい or...
接続中にエンドコールを許可し、AIアシスタントを無効にし、キュータブを削除
- 接続状態の間に、エンドコールボタンがアクティブで赤くなり、接続する前に呼び出しをキャンセルできます - AIアシスタントの nav ボタンを無効化(非表示、非クリック可能) - Queue navボタンと関連するmock UI(エージェントステータス+キューステータスパネル)を削除
Member voip config からのコール履歴拡張を解決する、phone extension ではなく
******************** は NULL で NULL Member voip config は、メンバーを拡張子に正しくマッピングしました。 使用方法 member voip config (CallFeaturesController と同じソース) は、 会員が VOIP が設定されているとき、拡張...
Full touch support for softphone popup on tablets
- Add touch-action: manipulation + WebkitTapHighlightColor to iconBtnStyle so window control buttons (minimize/maximize/close) respond instantly on touch - Ad...
Add go-sql-driver/mysql v1.7.1 checksum to go.sum
go mod tidy without source files is a no-op, so the mysql checksum was never added. Generated the correct h1 hashes via a throwaway golang:1.22-alpine container...
AttributeConverter による CountryType のレガシー・オーディナル・ストリングを扱います
DB 行は、元の整数 (例: UNITED STATES の "186") として保存された国でした。 の代わりに、IllegalArgumentException を findAll() に引き起こします。 CountryTypeConverter は、valueOf が失敗したときに元の検索に戻り、 お名前で書きま...
バックグラウンドでtsxを実行することにより、ジョブを即座に翻訳をキャンセル
Forgejo がワークフローを解除すると、bash は任意の前景子を待ちます 信号処理の前に仕上げる — なので、実行中の tsx locale ジョブ ランナーのスロットを保持し、数分のキャンセルをブロックします。 Fix: tsxを&で実行し、$CHILD PIDを待ちます。 bash exitswait()を...
ASTERISK CDR DSN をローカル config.json に移動し、CI/CD シークレットではなく
CDRの資格情報は、各FreePBXサーバーにローカルで、ビジネスにはありません CI/CDパイプライン 演算子は、ASTERISK CDR DSN を直接追加します。 config.json を API KEY と PHONE SERVER ID と一緒に指定します。 config.go フィールド すべてのランタイ...
GetDomainById および check-dns エンドポイントで高まるアクセスを許可
GetDomainBy でトップレベルの org オーナーとシステムメンバーが 403 を獲得しました ログイン そしてそれらのエンドポイントはisUserMemberOfをチェックしたので、検証-dns 直接オーグ。 hasElevatedCrossOrgAccessヘルパーを追加し、メンバーチェックと一緒に適用しま...
Show existing org domain instead of entry form when no custom domain
Fall back to the org's platform subdomain as the display domain so DnsProgressView renders rather than DomainEntryForm when no custom external domain exists. Al...
Surface imaging fallback when provider has no call history
KamoPBXProvider.getCallHistory now returns null instead of throwing **************** so the 501 response no longer bypasses the imaging fallback. The provider c...
Correct account list member/teamMember fallback labels and trigger redeploy
Restore NavPri panel labels and LeadHistory column headers
NavPri: salvage-keys grabbed href URLs as label values and swapped label/description pairs for Accounts, KB, and Notes nav panels. LeadHistoryPanel: MUI bgcolo...
Show platform domain context when no custom domain is set
Surface the active *.kamocrm.com hostname in the domain entry form so users can see their current platform domain instead of a blank entry screen. Also fixes ve...
Checkpoint translations per chunk and per locale on main
Persist locale JSON after each API chunk so cancellation loses at most one batch. CI translates one locale per process and commits/pushes after each so finished...
Checkpoint translations per chunk and per locale on main
Persist locale JSON after each API chunk so cancellation loses at most one batch. CI translates one locale per process and commits/pushes after each so finished...
Disable Docker BuildKit cache so every pipeline run does a full rebuild
Sets no-cache on both image build steps so npm ci and npm run build always run, even when the source tree is unchanged.
Bust Docker BuildKit cache per commit so npm run build runs every push
Identical checkout trees (e.g. empty commits) reused cached layers and skipped a real Next build. Pass GIT_COMMIT from the workflow and label the image revision...
プライマリメールボックスが割り当てられ、変更、または削除されたときに、メンバーを同期します
メールボックスがKAMO MAIL orgのメンバーに割り当てられた場合、members.email 決して更新されず、EmailCredentialService が IMAP を解決できなかった 会員の資格情報.
重複ルートドメインを防止し、プライマリドメイン表示を修正
ONE DOMAIN PER ORG チェックを誤って .kamocrm.com web-alias ドメインは、複数のルートドメイン(および10)を蓄積するorgを許可します 異なるエイリアスと再試すことで各エイリアスを。 今、すべてのカウント 接尾辞に関係なくトップレベルのドメイン(親はNULL)。 ネットワーク...
会員セキュリティとメンバーのPUTコールをシリアライズし、CockroachDBの競合を回避
同じ `members` 行に 2 つの同時書き込みがシリアライズ可能 分離の対立 — 会員セキュリティは、メンバー間で行を読みます endpoint はそれに書きました(countUpdated を経由して)、1 つのトランザクションを中絶します エラー40001で。 シーケンシャルコールは重複を排除します.
Org作成レイテンシーを削減し、翻訳カスケードの失敗を修正
- 組織管理者:TeamMembersForAllOrgs(完全なorg)を確実に交換する TeamMemberForOrg(単一オーガニゼーション)を確実なテーブルスキャン 〜400ms×N DB 往復 /network/create 送信 がスタック - 組織管理者:メールを移動しますTemplateSeedCli...
ワイドな commit log translations.title から TEXT まで、DB 列にマッチ
列は、アノテーションとDBのVARCHAR(512)で、 長い翻訳タイトルに失敗する翻訳インサート。 DB カラムは 今、ストリング(直接適用)。このアノテーションの変更は、組織を維持します 一貫した.
バックエンド応答封筒からのUnwrapカタログと計算
getSubscriptionCatalog は { カタログ {...} を返しましたが、直接キャストされました サブスクリプションカタログとして、カタログを残します。undefinedとプラン 選択ステップ空白。 計算のための同じ問題サブスクリプション 価格 その { 計算: {...} } ラップパーは未処理でし...
@JsonProperty を is*-prefixed boolean DTO フィールドに追加
Lombok は isXxx() を生成します。 isXxx() は boolean フィールドの isXxx() を生成します。 ジャクソンは「is」のリーディングをイジェッタから取り除き、それらをシリアライズします 'xxx' ではなく 'isXxx' なので、'accountManager' になった JSON ...
Fuser の代わりに s を使用して、ストール ポートフォワード (k0m1) をキルします
ランナーのホストにfuserとlsofがインストールされていない。 ss -tlnp を使う PID 保持ポート 18080 を抽出し、直接それを殺すために grep。 その他 pkillをSIGKILL(-KILL)に切り替えるので、階段プロセスに依存しない 優雅な信号を調達する.
スタンドポートをクリーンアップするので、キャンセルされた翻訳ジョブは、次の実行をブロックしない
バッシュは背景のプロセスに信号を転送しないので、kubectl ポートフォワードアウトライブ解除ワークフローの実行と保有ポート 18080, その後のtranslate and rebuildジョブをブロックします。 修正: 結合する前に 18080 で既存のポートフォワードをキル (pkill + fuser/ls...
ページ全体ですべての壊れたプレースホルダーの値を復元する
Salvage-keys スクリプトは CSS classNames、インラインスタイル、JS をつかみました 114メッセージの元の英語テキストの代わりにテンプレートリテラル メモ、kb、コマース、アカウント、レポート、リード、設定、 ダッシュボードページ.
リードページを復元 英雄のタイトルとgit履歴からのサブタイトル
ヒーロータイトルは「ヒーロータイトル」(プレースホルダ)、ヒーローサブタイトルは「フレックスギャップ2」でした (salvage-keys は誤って隣接する CSS クラス名をつかむ)。 コミット10f4e4bから回復された正しい値.
ウィジェットをポーリングすることでフィニッシュボタンを有効にします。getState() と auto=onload への切り替え
ステートチェンジイベントリスナーは、フィニッシュボタンが確実に有効になっていない 確認後。 2つの根本原因: 1。 ドレインロジックはウィジェットを読み込みます。 ウィジェットに存在しない状態 — ウィジェットは .state プロパティではなく getState() を公開しているため、ドレインは常に 確認後にリス...
Orgリストにサブスクリプションターゲットアカウントを含める
listForOrg では、サブスクリプションがターゲットとなるアカウントも返します。 リクエスト org — 直接所有するアカウントだけではありません。 マルチオーガニゼーション ペイメントアカウントは、カモCRMのトップレベルのorgに住んでいます サブスクリプション対象サブオーガナイザー。このカモクラブのオーガナ...
StatusWindow ラベルの名前空間を追加し、すべての設定のプレースホルダを修正
- Add****************(50キー)設定 navサイドバーは、キーパスの代わりに実際のテキストを表示します - BranchTypesLabel ICUフォーマットを修正:\${branchLabel} → {branch} - Fix tr()フォールバックガード:next-intlは、代わりにキー...
他のツールウィンドウのサイズ+カラースキームに一致
- defaultSize と minSize は現在 320x650, 再利用可能な: false (Softphone、チャット、電卓、SMS、AIチャットと一致します) - ダークスレートグラデーションから標準ライトグラデーション(#fafbfc -> #f5f7fa)にSoftphonePanelで使用 - H...
Forward Range header so audio playback can scrub
Without this the VOIPService recording-streaming endpoint always returns the full file (Range header is dropped by buildForwardHeaders), which works for play-fr...
Rewrite /etc/odbc.ini to point at $MARIADB_HOST on every boot
The escomputers/freepbx:17 image bakes /etc/odbc.ini with Server=db (the docker-compose link target). On this Kubernetes deployment MariaDB lives at \$MARIADB_H...
Resolve member→extension before VM/CDR provider lookup
CallController was passing memberId where FreePBX (and other PBX-style providers) expect an extension number — voicemail listing returned empty because no PBX e...
自動座席は床、より広いorgの無効として、床として、放します
BillingSetupService は、作成者の最初のオープンライセンススロットを有効にします。 サブ・オーガナイゼーション(およびプロモート・トゥ・ビルリング・オーナーと同じ)を見るとき — そうでなければ、新鮮なサブオーガニの所有者は、あるにもかかわらず、無料のベースラインを参照してください シードプランのライ...
