チェンジログ
何が新しいの?
プラットフォームのすべての改良 それが出荷される
· EmailService
DKIM のキーおよび組織の送信のドメインのための弛緩された rsa-sha256 のサイダー
DkimKeys は、ドメインの RSA-2048 キー (org の暗号化されたバルクプロバイダーの blob) と TXT を生成します。 kamoXXXXXX. domainkey.<domain> でメンバーを公開します。 DkimSigner は、正確にメッセージに署名します 輸送は送信されます — 最終保存変更の後に writeTo から読み込みます。 ヘッダの受信機およびフィードバックのループの使用は現われます(Feedback-IDは、X-ヘッダを含んでいません、従って リレーストリップX-Kamo-Ref). 独立した実装であるApache jDKIMによるテストで検証:キャンペーン- 定形メッセージは、リレーストリップX-Kamo-Refを一度検証し、変更されたボディに失敗するか、 トピック.
· EmailService
ドメイン送信のためのDNS — 各ドメインのネームサーバが最初に評価され、SPFは、名前付きDNSプロバイダー
LiveDnsResolverは、ゾーンの権威あるネームサーバ(1.1.1.1/8.8.8.8 を経由して)に尋ねるので、レコードは 会員は、決議者の負のキャッシュの直後ではなく、DNS プロバイダーに保存されます。 期限切れ; 紹介またはタイムアウトのパブリックリゾルバに戻り、TCP を上回るときの 回答は、データグラム(dnsjava 3.5がGoogleを解析することができません。 com の tuncated TXT それ以外の場合)。 SpfEvaluator は、受信サーバーとして 1 つの IPv4 アドレスのドメイン ポリシーを評価する (RFC 7208: ************************ リダイレクト、10-lookupと2-void-lookupの制限)、CNAMEを contact.kamocrm.com, 含む, または bare ip4 すべて同じ読みます. DnsProviders が実行している会社名 プロバイダー固有の指示のために、その名前サーバから DNS のゾーン.
· EmailService
共有された org リレー (47.181.8.86) は、組織ごとに見なされます。プラットフォーム リレーは、KamoCRM の
PlatformRelayProperties は、インクルーザーリレーの両方を知っています: postfix-bulk (47.181.8.87, hello.kamocrm.com) およびpostfix-orgs (47.181.8.86)、egressアドレス、DKIMセレクターおよびDNSターゲット組織の ドメイン CNAME を (contact.kamocrm.com) に送信します。 リレーとしてカウントされるので、両方とも配信レポートを取得します。 スタートアップのバックフィル種子k3m1-org-relayは、 SHAREDプラットフォームホストとして(STARTTLS + PLAINサインイン) オプションの秘密のバルク-org-relay-auth, 自己署名されたので、tlsVerifyオフ), カモCRMの独自の回転でオフ そのため、メールは .87 にとどまります。 サインインが設定されるまでは、その認証情報は config に従ってください。 すべてのスタート。 k3m1-bulk-relay は PLATFORM ONLY を一度作成します.
· KlusterServices
Postfix-orgs、共有されたバルクリレーは、すべての組織が47.181.8.86として送信します
KamoCRM独自のキャンペーンメールは、postfix-bulk (47.181.8.87) を離れ、通常のメールを経由して保存します ポストフィックス(47.181.8.84)。 他の組織のキャンペーンメールは、独自のIPを取得: postfix-orgsが実行されます k3m1 のホストネットワークを結合し、ノード構成/k3m1-ext の eno1 (k3m1-ext) に SMTP をバインドします。 そのポートと何も使用していません。 HELO は contact.kamocrm.com です。 IPのPTR。 hostNetwork のリスナーが NetworkPolicy を持たないので、投稿は、ポート 587 の STARTTLS を要求する SASL を上回っています。 ノードの内部アドレスは、クラスターアドレスのみ(メール/SECRETS.mdの秘密)です。 それはとしてだけ中継します 送信ドメインのメールサービスが検証され、毎分更新されます。マップが到着するまで、何もありません。 .86 として残すために eno1 が確認されるまで postfix-bulk の保持配達と同じ回帰ガード、および 同じ配達でき事のサイドカーのレポートの結果。 すべての拒否は4xx、決して5xxです。 デプロイワークフローが既に適用されているファイルに追加されるため、ワークフロー(および完全な再構成) すべてのコンポーネントは非接触です.
· kamo-internal
キャンペーンタブは、選択したタブを非表示にすることなく、スクロール矢印を取り戻します
5つのサブタブで画面が狭すぎると、ストリップは左と右が表示されます 横の矢印は、最大ウィンドウタブストリップが行われるためです。 それ以来、何も持っていなかった MUIの「自動」スクロールボタンがリンクによって開いたタブを切る最初のバージョン (?tab=archived) の半分に: MUI が選択したスクロール後にのみ表示されます。 タブをビューに, ストリップから80pxを取る, そして、MUIの独自のスクロールアニメーション 任意の補正をオーバーロックします。 CampaignTabStrip は、自分のバーのないプレーンスクロールでタブを置きます (data-kamo-scrollbar="off")、タブがオーバーフローしている間だけ矢印を表示し、 選択したタブをスクロールして、変更時にいつでもビューに戻します。 矢印が来るか、幅を変更します。 arrowState と ARROW SCROLL FRACTION maxdTabStripModel から来るので、両方のストリップは矢印が ライブと移動距離 Chrome でチェック: 1600px の矢印なし; 700px と 520px 各タブが開きます リンクは、中央のものを含む、インジケーターで完全に表示されます。 矢印は、各方向のストリップを表示します。矢印はタブに沿ってフォーカスを移動し、 フォーカスしたタブをビューに保存し、選択を入力します。 矢印ラベルはコンポーネントです。 スクロール、すべてのロケールで手作業で修理 kamo-translation-dictionary cc484906 (Arabic はスクロール権利のためにそれを傷つけました)。 ここでは、この変更からではなく、メインで同一に失敗します。 oneScrollbar.test.ts (NavTopMenuPanel.tsx で) と receivesStatus.test.ts (4, ラギンス 98156e52).
· kamo-internal
メールキャンペーンウィジェットでライブ送信すると、スポットライトカードが取得
インプログレッシブタブは、進行中の1つの細い行でした。 ウィジェットが最も重要である瞬間に、はるかに部屋でペイン。 いつか タブ上のすべてのキャンペーンは、送信または一時停止され、パネルはそれぞれに 最低限の高さは、それぞれカードを得ます: - リストを通るまで、数が多いので、 何も残さないと100%は言うまでもありません。 - 10pxの車線、頭部および光沢の目に見える; - ペースと時間左、および「合計のN」。 - ペースの横にあるファネルとして、配信、オープン、クリック、バウンス 予備(真棒の長さおよび率)への高さのカードの図表、またはとして より短いか、またはより狭いの数字の列。 - 過去5分のペース、時計の15秒あたりのバー 境界線。 棒はまだ詰物は照らされ、ペインが見た前に時間 送信は、ゼロではなく、スタブです。 カードには、行のリンクと一時停止/再開があります(現在共有されています) キャンペーン それは祝う終わりを通って握ります。 2 つは側面を坐らせます 広いペインの側面によって。 選択はパネルのサイズだけを、それの中の何も変更できない読みます、 ですから、フリッカーは出来ません。 とにかくオーバーフローするカードは、 パネルのサイズは、行を表示します。 カード内のレイアウトは カードのサイズに関するコンテナの問い合わせ モデル: speedBuckets は 2 つのフレーム間の移動を時間に広げます それらの間で。 pushSample はウィンドウをとり、hook は 1 分の 5 分を保持します。 ライブ送信、一時停止と終了。 10倍の時計に、一定のペースでヘッドレスにチェック。 高身長, 460 と 668x420 のペイン, と 2 つの送信ワイドと高身長のペイン: カードは流出なしで合い、ペース・バーはフレームに、を含む続きます 静かなストレッチ。 動きを抑えて動かさない.
· kamo-internal
メールキャンペーンウィジェットタブはキャンペーン画面のステージです
ウィジェットは、自身のライブ/セント/ドラフツの下に提出されたキャンペーン Sent のキャンペーンや、ライブで予定されているキャンペーン そのタブは今 In-Progress, 開始しない, 未使用と完了, キャンペーンTabOfによってファイルし、名前付き マーケティング.bulkEmail.tabs.* で、起動パッドと/marketing/email は決してありません キャンペーンを2ヶ所にまとめました。 メールサービスの新しい `stages` からカウントが来る (7481f15); 送信されたキャンペーンから古いサーバーの応答がカウントされます。 タブを選択する: - 会員が1つを選ぶまで、何が起こっているのか、そして滞在するペインの土地 そのタブがまだ何かを保持している間。 送信のみを表示するように動く またはタブが実行されるとき。 終了したばかりの送信 お祝いの進行で、ペインが進行します。 - 会員が一時停止または再開する列は、彼らがそれを押したときに、その タブを離れるまで、再開します。 - 隠されるに対して測定される「N more」の横に合う段階の名前ショー メンバーの言語でコピーする。そうしないと、各ステージがアイコンを表示し、 ツールチップの名前とアクセス可能な名前。 ブラウザでチェック中に見つかった修正: - 新しいオープンからスパークリングし、終了キャンペーンをクリックしたことは、表示されません。 図線はそれらをクリップしました。 今、クリップは、それ自体の横に、 そして、火花はメートルの端から飛びます、従ってそれらはバーの低下を生き残ります。 - クリックされたメートルの上に開いたメートルを引いた数字のためにあまりにも狭い行。 ザ・オブ・ザ・ 棒は340px以下で、まだラップアウトに収まらないもの 視界全体。 - KPI のタイルは、その名前が狭く、率は名前を楕円(「Ope...」)。 レートは、代わりに視線からラップアウトします。 - "N more" は前のタブを残した行をカウントしました。 ペイン幅322〜1360でヘッドレスチェック:行カットなし、タブオーバーフローなし、 name/icons は "N more" を使わずに、矢印キー、最後に保持 668 および 460 年に無事にスパークし、動かして下さい。 停止テストのサーバーは現在 パユースキャンペーンで回答します。 ウィジェットの読み込み時に失敗しました キャンペーンを一時停止した後に400msを再読み込みします.
· EmailService
キャンペーンウィジェットはステージで読み込まれ、キャンペーン画面のファイルをステージで表示します
起動パッドウィジェットの読み取りグループとステージによるキャンペーン数 /marketing/email のタブを使用します。: In-Progress (sending), Not Start (draft または 予定)、パユース(一時停止または中止)、完了(送信)。 どのように失敗したファイル これまでのところ、キャンペーンTabOfがそこにあるので、その送信は得ました。 各ステージは、それぞれ独自のステージで捉えています。 最初に草案および最も早く最初に予定されている; キャンセルする前に使用した。 `groups` の横に `stages` が追加され、ウィジェットが読み込まれるまで滞在します。 デプロイされます。 この前に、キャンセルされたキャンペーンは終了した時点でカウントされます。 ユーザーが本日決定したところ、所属しません.
· kamo-internal
キャンペーンリストは、同僚がキャンペーンに何をするか、ライブをフォローします
BulkEmailWorkspaceは、変更枠のuseEmailCampaignsWebSocketを今すぐ受け取る (onChanged, d0b56adf) を配信します。 キャンペーンの名前とそれに何が起こったのか、 キャンペーン自体は決してないので、リストは1つのキャンペーンを繰り返して読みます GET /campaigns/{id} を置きます。 同僚のアーカイブまたは復元の動き ここでタブ間の行が起こると、新規または重複したキャンペーンが表示されます。 そして削除されたもの、または今404に答えるもの、リストを残します。 ステージ outbox カウントは同じフレームに続きます。 createCampaignChangeFollower は、キャンペーンごとの読み込みを一度に保ちます。 フレーム その キャンペーンが読み込まれている間、到着します(スライスにアップロードされたリストは、すべてを発表します スライス) 返されると1つ以上読み込まれるので、バーストは2つの読み物と 古い答えは、新しいものの上に決して上陸しません。 読みながら削除されたキャンペーン 帰りに帰り道は戻らない。 ホックを通してフレームを押すことによって実質の部品に対してChromeで点検される: 復元は、アーカイブされた行を1つの読み込みで移動し、削除は行を削除しました なし、作成されたドラフトは「スタートしない」と「5フレーム」で登場 キャンペーンは2つの読み込みを要します.
· kamo-internal
メールキャンペーンウィジェット、起動パッドにライブ
新しいホームウィジェット、email.campaigns、開くことができるすべての人の起動パッド キャンペーン その5つの権利(EMAIL CAMPAIGNS WIDGET、321-325)がオフ VIEW BULK EMAIL と ADDED、OPIONAL および MOVABLE のシード SecurityService が到着し、削除するメンバーです。 門もまた マーケティングアプリやVIEW BULK EMAIL自体をリクエストします。 メールサービスの新規 /api/email/widget/campaigns を一度表示、読み込みます。 その後、ライブを移動: - 最後の2週間の4つの数字(セント、オープン、クリック、バウンス)、それぞれ ポインタまたは矢印キーで読み込まれるバー、開いてクリック率 配達可能なカードの使用(engagementRate)を規則によって渡された郵便の 両方とも共有できるようになりました。 - ライブ/セント/ドラフト、カウント付き。 送信キャンペーンは、動く車線です。 そのペースと時間を残して; 開くと、それらが土地として立ち上がるをクリックします. ツイート paused は、送信できない理由、スケジュールされた 1 つのカウントダウン、送信された 1 つを言います。 開いてクリック率を表示します。 会員の列にポーズして再開 MANAGE BULK EMAILを使って。 - パンの時計がその瞬間にライブにとどまっている間に終わるキャンペーン、 ステントに移る前にバーストで。 - ボトムラインは、それが起こるようにニュースを運びます。 広いペインは、 今日の合計を持つ列。 - それは部屋のためにレイアウトします:2つの数字と1つの列でコンパクトな列、全体 任意の高さでのみ行 (リストはカットではなくラップ)、および2つの列の 一度だけワイドペインでキャンペーンを非表示にします。 ライブハーフライド /topic/campaigns/<orgId>. 使用EmailCampaignsWebSocket 読み込み readCampaignFrame を介してすべてのフレームと onEngagement、onChanged とゲイン onSnapshot, リクエストSnapshot, ウィジェットが起動パッドをオフにする スナップショットの組織全体に尋ねることはありません。 onProgress はまだ参照します 進行フレーム。 終わりは今、SENTへの移行に火を燃やします。 SENTがまだ言うすべての後でフレーム(バウンスとデリバリーレポート) 再出版時間)、そしてホックはもはやその間のハンドルの ref を書きません レンダリング。 tsc、ガードスクリプト、新しく影響を受けたウイルスファイル、およびtscで検証 1x1、2x1、2x2、2x3および完全な幅の実質の部品上のヘッドレス ハーネス.
· kamo-internal
In-Progress, Not Start, Paused, 完全かつアーカイブされたタブ, そして
/marketing/email は、キャンペーンを5つのサブタブに分割し、それぞれにライブカウントで分割します。 そして、すべてのキャンペーンは正確に1つです。 - In-Progress:送信 - 開始なし:ドラフトとスケジュールされたキャンペーン - パユース:パユースとキャンセルキャンペーン - 完了: 送信 - アーカイブされたメンバー: 失敗は自身のステージではありません: 受取人が失敗し、キャンペーンはしません。 emailService は決して設定しません。 送信先まで提出したキャンペーン お問い合わせ タブは ?tab= に住んでいるので、リロード、バックボタン、共有リンクが保持されます。 それ; キャンペーンは、ステータスが変化するにつれてタブ自体が変更されます。 空の タブは、それが何であるかを言う. アーカイブと復元は、各キャンペーンの KRW メニュー (emailservice 39ffa54) にあります。 お問い合わせ 送信する残らないキャンペーンは、ドラフト、または送信または キャンセル キャンペーンやメニューを開く AGグリッド火災の行をクリックします React の前の行コンテナで実行される独自のネイティブリスナーから onClick を委任したので、セルのレンダラーの stopPropagation は遅すぎるし、 メニューの下のエディタに移動します。 行のハンドラは、 追跡コードの格子がするのでデータcampaign-own-click制御の中のかちりと鳴らして下さい、 キャンペーンの名前をクリックすると、エディタのルートを2回押すことはありません。 実際のコンポーネントに対してChromeでチェック: origin/main で . ************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************ どこでも。 タブ、カウント、アーカイブ、復元、空のタブと520pxストリップが 同じようにチェックします。 言葉遣いはkamo-translation-dictionary 02109cfcにあります、最初に押し出され、書かれました あらゆるロケールの手作業で.
· EmailService
キャンペーンをアーカイブし、ウィジェットはアーカイブされたものを残します
POST **************** と /unarchive (MANAGE BULK EMAIL) セットと キャンペーンのアーカイブをクリアし、キャンペーンDTOはそれを運びます。 マーケティング/メール アーカイブされたキャンペーンをアーカイブされたタブの下にスクリーンファイル。 - 送信に残らないキャンペーンのみをアーカイブできます。 スケジュール、送信 または 1 を一時停止: 最初にキャンセルします。 それをアーカイブすると、最初の日付が再び保持されます。 - 今すぐ送信し、スケジュールし、最新のクリアアーカイブに送信するので、キャンペーンが再び送信されました 作業タブに戻ります。 - 両者はARCHIVED/UNARCHIVEDのフレームとして発表されます、従ってあらゆる開いた キャンペーン画面とウィジェットの更新ライブ。 - CampaignWidgetは、最近、インスタディ、および countByStatus ディレクティブ kamo-shared-library ebdd15f1 ビルド **************** と archived at 列, どちらも既に配置されている. transactionalSendRatchetTest は、このコミットの前にメインで赤くなっていました。 sendToUser に触れる必要はありません。 他の1554テストパス.
· kamo-shared-library
キャンペーンをアーカイブできます
EmailCampaignEntity がアーカイブされた時にアーカイブされた At (archived at) を獲得します。 キャンペーン、null がない場合。 /marketing/email スクリーンがアーカイブされたタブを取得します ウィジェットが保存されたキャンペーンから削除されます。 列は、すべてのスキーマの変更として手作業で適用されたクラスターに既に存在します。 ALTER TABLE メール campaign.email campaigns ADD COLUMN EXISTSアーカイブされていない at timestamp(6) タイムゾーン; デフォルト無しで、テーブルの他のインスタンスと同様に、コードが組み込まれている このコミットが変更されていないテーブルを読み込む前に.
· EmailService
メールキャンペーンホームウィジェットのライブ読み込みとライブフレーム
GET /api/email/widget/campaigns は、ランチャーパッドのウィジェットの読み込みです。 すべてのキャンペーンビューアのホームページに毎日座るペイン:無駄のない行 ボディ(CampaignLine)、最初のライブキャンペーン(sending, paused, soonest)、 その後、最も最近終了し、最も最近編集された草案、各グループ キャプチャ; グループごとの正確なカウント; 表示されるすべてのキャンペーンのオープン、クリック、および 1つのパイプライン化されたRedisでレポートを中継;組織の最後の14 日; の追跡の選択; およびカウントダウンのためのサーバー クロック。 お問い合わせ キャンペーンリストとして VIEW BULK EMAIL を実行します。 3種類のフレームが /topic/campaigns/<orgId> を進行中: - エンゲージメント:キャンペーンEngagementPulseは最初に開いて、最初のクリックと キャンペーンごとのレポートを中継し、ポッドごとの秒数のほとんどのフレームで送って下さい、 最後のフレームとRedisの合計が保持されているので、新しいものと。 - 変更: CampaignController は、メンバーの作成、編集、削除、 重複、スケジュール、送信、一時停止、再開、キャンセル、オーディエンスおよび受信 サービスコールがコミットされた後、id と動詞のみの変更。 - ネザーはトップレベルのキャンペーンを実施 お問い合わせ 各キャンペーン画面でフレームを読み込む カウンターを列にコピーするので、フレームの 1 つを運ぶ別の形はスクリーンのカウントがまだ動くことを空白とします 古いコード。 sender は 1 バッチにつき 1 回 1 日の受け入れメッセージをカウントします。 (stats.daily "sent")、ウィジェットの2週間のスパークラインから描画します。 完全なスイートは 1 つの失敗、transactionalSendRatchetTest と 1534 のテストです、 c47fcf6 以降 3 つの sendToUser の過負荷をカウントし、関連しない.
· SecurityService
メールキャンペーンウィジェットは、キャンペーンを開くことができるすべての人のために到着します
EMAIL CAMPAIGNS WIDGETとその追加、オプションおよびMOVABLEポリシーシード VIEW BULK EMAILから、それらを紹介するブートで、ペインランズオン すでにキャンペーンを読んでおくことができるメンバー全員の起動パッドは、 削除または移動する。 REQUIRED は、すべてのウィジェットで参照されません。 誰のホームページでもペインをピン留めしません.
· kamo-shared-library
メールキャンペーン ウィジェットの5つの権利
EMAIL CAMPAIGNS WIDGET (321)とその4つのポリシーの子供(322-325)、空 Off VIEW BULK EMAIL:ウィジェット、キャンペーンリストの後ろにあるすべての読み込み カウンターとライブの進行枠は、すでにそれを取るので、 ウィジェットはそれを丸めることはできません。 326は、次の無料IDです.
· kamo-internal
メールキャンペーンは最初のマーケティングタブです
マーケティングツールタブのストリップは、メールキャンペーン、マーケティング資料、 ソーシャルメディア、追跡コード。 バルクメールは、新しい名前の下のフロントに移動します。 そして、素材は、既に紹介しているページをフルネームで紹介しています。 会員が開くことができる最初のタブに /marketing インデックス ランド ストリップで移動します: デフォルトで電子メールキャンペーン, マーケティング資料は、 メールでのお問い合わせ ルート、ラベルキー、VIEW BULK EMAIL 自分の名前を保持します。 言葉遣いは、kamo-translation-dictionary 98a21a21a21, 最初にプッシュされ、 各ロケールに手書きした2つのラベル.
· kamo-marketing
ソリューションは、リソースの下に1つのレベルダウンする
一番上の行は、電話番号、言語の前に5つのカテゴリを運びました セレクターと3つのCTA。 ソリューションは、リソース内の最初の項目です。 2つの記事リンクの上に、8つの業界ページを8つの業界ページとして保持します。 第三レベルの飛行。 レンダラーの何も変更されていません: NavChild は既に独自の `children` と 法的 は リソース を 全て まとめてネストしています。 デスクトップとモバイルアコーディオンの両方で。 データのみです。 「オールインダストリーズ」は、折り畳みではなく最初の孫として滞在 モバイル親はトグルボタンなので、親行に リンク — /solutions自体は、それなしで電話に到達できません。 /solutionsページはまだカテゴリを照らす: isCategoryActive 既に 孫を歩くと、そのリソースは解決策が使用される場所を強調します。 /en/solutions/real-estate で確認されたリソースは #ffffffff をレンダリングします。 rgba(107,142,58,0.1) と 4つの滞在 #9a9a9a9a9a. 実行中のページに対して、ソースではなく検証します。 トップ行が読み込まれる 特徴、サービス、価格設定、会社、リソース; リソースをホバリング ソリューションは、8つの業界を/enプレフィックスで開きます。 フライアウト 1001、1001、1076および1316の200px幅および右の端の土地 1024のビューポート(この nav がすべて表示されている lg のブレイクポイント)、1280、 1440と1920 - 水平線なしで、すべてのビューポート内 オーバーフロー。 390の電話リソースが開き、ソリューションが開きます。 8つのリンクがあります。 tsc、チェッククライエントナビゲーションと check-i18n-keys はクリーンです.
· kamo-marketing
アプリケーション開発、Webデザイン、Webマーケティング
******************** 代理店に支払う事業の主張 座席はソフトウェアのために支払われます 代理店は造りませんでした、ホスト、または保ちません ランニング。 誰がそのお金を得るべきかを尋ねることによって終わり、決して持っていなかった 点にドア。 ドアです。 /servicesの59ページ:ハブ、3つの柱、30の機能のページ、12 証拠ページ、5つの比較、および6つは、実際に関与する方法について 実行します。 TypeScript の構成、辞書で補う — パターンは 37 の企業、45 の統合および 41 の用語集は既に使用しました、従って 翻訳者はすべての文を書き換えることができ、スラグやスラグを傷つけることはできません。 ルート。 4つの新しいコレクションは、むしろ「サービス」の名前空間にゲート `collection` より: 後者はすでに多くのロケールに翻訳されています そして、それを再利用すると、単語の前にフランス語サービスページが存在すると主張します です。 現在、すべてのサービスページが英語に表示され、 既に機械が何をしているかである唯一の英語サイトマップ コピーが翻訳されていないページ。 ポートフォリオは独自のプラットフォームです。 訪問者検査:メールサーバ、電話スイッチ、WebRTC メディアスタック、アトリビューションパイプライン、クラスター、および当ウェブサイト。 それらのページ上のすべての番号は、それがから来たコマンドと日を運ぶ 読み込み、スクリプト/check-services.ts はビルドに失敗します。 静的 /services の子供がいる柱のスラグとともに、 暗黙の証拠の参照、孤児の作業ページ、およびa ケース自体に名前を付けない比較。 最後のルールは、 装飾:それに対して主張できない比較ページは、 テーブルを身に着けている広告。 価格設定は、テーブルではなく、メカニズムを公開します。 私達は引用の後で引用します 発見し、番号を最初に固定します。 何が動くか、それが決してない (広告費の比率、買ったもののマークアップなし) /services/how-we-quote にすべて見つけたとき。 /サービス/スタート 既存のトピックを意図的に投稿 — サポートサービスは解決します 既に存在しているトピックに対する項目のタイトルと答え 400 その他, なので、"Web Design" トピックはコンパイル、デプロイ、修正、 すべての投稿を拒否します。 2つのアクセシビリティは、厳密にこの機能ではないが、出荷されていない すべてのページ。 globals.css:52 は、生 --color-primary* を使用しないことを言う 小さなテキストのため; クッキーの同意バナーは、すべてのページで2.18:1で行いました サイトの関連コンテンツは、ソリューション、統合、 代替品と用語集。 どちらも読みやすいアクセントと、 バナーのポリシーリンクは白です — --color-accent-on-canvas は、 正確にヒット 4.5:1 キャンバスに対して, ヘッドルームを残さない バナーが座って少し上げられた表面。 すべての19サービスページ、 ホームページ、/pricing、/solutions/* は WCAG 2.2 AA でゼロで axe を渡します 違反; 手数料の記事の独自のコンテンツバッジはまだ失敗し、 一人で左に.
· kamo-marketing
ソフトウェアサブスクリプションのカウントに関する記事、それにバナーポイント
/all-in-one-Business-softwareは、ビジネスの支払い回数を尋ねます:チェックリスト 読者がそれを刻むように、それらをカウントし、月と年を合計すると、スタックはそれを超える 請求書、オールインワンは何の価値がある、統合する前に尋ねる質問を意味する必要があります、 カモCRMは、同じ地面をカバーする方法. 2つの外側の図、それぞれがコピーに名前付けられ、リンクされた 足: Zyloの2026 SaaS管理指数は、未使用のライセンスとソフトウェアの支出を制御する人、 Cledaraの2025ソフトウェアスペンドレポートは、企業がツールのカウントを最下回る状況について報告します。 バナーの公共サービスの発表は、シートフィードの記事ではなく、ここにポイントします。 コンセプト ラベルは、古いものの新しい値ではなく、新しいキーです。辞書パイプラインは、そのキーをスキップします。 翻訳は既に英語と異なるため、他の言語は古いものを保持している この記事へのリンクに関する質問 リソースメニュー、リソースハブ、サイトマップに記載されています.
· kamo-internal
進水パッド バンドは棒の自身の低下の表面に開きます
管理者バーとピン留めされたアプリバンドは、トップバーに塗装されています その後、別のアプリから何かとホバーに完全に答えた: バンドの下の12ピクセルをフロートするホワイトツールチップカード、ピン留めアプリの チップ — 灰色のキャプションと出てきたものへの継ぎ目がないMUIのポップアップ。 それぞれが現れて消えている。 間違ったパレット、間違った 形状、間違った場所から到着します。 SAME 表面にトップバーのメニューが使われています。 それはで塗られます 組織のブランド、そのトップエッジは、バンドが点で持っている正確な色を要します それから、フィレはそれをその端に溶接し、そして1つの表面はグライドし、 エントリーからエントリーまでのリサイズは、ポインターが行を移動するので、バンドは次のように読みます。 起動パッドの上に置いたカードとしてではなく開く。 • NavTopMenuHostは、NavTopのヘッダだけではなく、任意のバーのような要素を取ります: バンドが棒を丸めているので、ホストあたりの `edgeGap` は、 パネルとフィレの両方が塗装されたバンドを満たしている必要があります。 パネルが持つ部屋 実際に開始する場所(---kmenu-max-height)から成長するために測定されます navの身長ではなく、ページを半分にしないようにします。 • NavTopMenuPanel は `kind="note"` を獲得します: 同じ表面と同じ動き、 選択の代わりにトリガーについて偽物を運ぶ. メニューロールを主張しない 管理者バーの記述は記述をとどまるので焦点を合わせません そして、そのリンクを以下に入力します。 • ピン付きアプリのチップは、ナビゲーションの描画(NavToolSectionsPanel)を非常に行に描画します。 NavToolBarMenu をリフティングしたので、1つのオプションが1つのメニューで応答します。 ネストされたグループ、バッジ、フィルターボックス、すべてを提供します。 •両方のバンドは、navTopSeam.tsからグラデーションを読みます。 リテラルコピー 漂流は正確に何であるか、そして継ぎ目は見えない間 パネルとバンドはそれに同意します。 テスト: 管理者バーがレンダリングされ、マウス、指、および操作 キーボード(1面、エントリーからエントリーまで手渡され、フォーカスを盗むことはありません)、プラス バンドがポップアップまたは秒間コピーのために達する音源ガード 再びグラデーション.
· kamo-marketing
ウェブサイトマーケティングビデオをホワイトラベルCRM手数料の記事に埋め込む
読者に、再売ソフトウェアセクションの前に、イントロの後にホームページから同じプロダクト巻き枠を与えます.
· kamo-shared-library
WebinarNotifyMember、組織のさらなる通知リスト
Webinar notify member の 1 行(組織化、チーム メンバー) KamoInitializerService の WebinarNotifyMemberMigration および既に適用されて。 ザ・オブ・ザ・ リポジトリは、すべての読者が人を求めているので、チームメンバーを fetch-joins します。 外部キーがない場合、マイグレーションにマッチするので、イニチャイザーのddl-auto更新 決して 1 つを加えません.
· MediaService
プレゼンターメールの通知チームメンバーのブラインドコピー
GET/PUT /api/webinar/notify-members (MANAGE SUPPORT) 読み込み、置換 組織のさらなる通知リスト。すべてのIDはチームメンバーでなければなりません その組織は、ほとんどの25で。 WebinarEmailNotifierは、所有する機能を追加します。 組織のリストは、すべての文字のブラインドコピーとしてプレゼンターに-予約、 出席者、出席者のキャンセル、セッションのキャンセル、リマインダー - 決してオン 参加者の手紙、プレゼンターのアドレス、一人一人が一度、 書面を申し込む資格のある方のみ.
· EmailService
サービス・ツー・サービス・テンプレートの書き込み・コピー
SendTransactionalRequest は、 sendToUser を通じて実行されるオプションの bcc リストを取ります プラットフォームアドレスのリトライを含むSMTPエンベロープに配信する コピーした人がアドレスを取得するメッセージを正確に取得します。 ブラインドコピーのトリム, アドレスと重複をドロップし、リストを 25 にキャップします。 既存の発信者なし 変更: bcc なしの送信は、常に実行したパスを取ります.
· InitializerService
Webinar notify member、プレゼンターメールにコピーされたチームメンバー
1列(組織、チームメンバー):さらに通知リスト Webinars設定タブをスケジュールしました。 MediaService ブラインドコピアーズ これらのアドレス すべてのウェビナーメールは、所有する組織のプレゼンターに送信されます ウェビナータイプ。 新しいテーブルなので、テーブルの他のサービスは変更されません。行なし 誰もコピーされていないことを意味します。 生産に適用される 2026-09-13.
· kamo-internal
管理者は、プレゼンターメールにコピーされた人を選択します
スケジュールされたウェビナータブは、横に「追加通知」セクションを獲得 ウェビナーの種類のリスト。 選ばれたチームメンバーは、ブラインドコピーを取得 プレゼンターに送信されたすべての自動電子メール(新規予約、出席者参加または すべての組織のキャンセル、セッションのキャンセル、リマインダー) ウェビナー リストを /api/webinar/notify-members で読み替え、 同じマルチセレクトディレクトリのピッカーを持つ人 プレゼンタータブは、 未保存のヒントと保存された確認で明示的に保存します。 403はセクションを非表示にし、失敗した負荷は空の代わりに再試行を提供します リスト、拒否された保存は、サーバーの理由、および別の管理者の変更を示しています webinar org-change のトピックでライブに到着します.
· kamo-shared-library
すべてのウェビナー予約レターのためのCanonicalテンプレート
セブン meet.webinar * テンプレート — プレゼンターの書籍 / 参加者 / 出席者のキャンセル通知、出席者の確認とキャンセル、 session-cancelled 文字とスケジュールされたリマインダー - に登録された CANONICAL KEYS は WebinarEmail で、それらを満たす変数マップをビルドします。 読者のゾーン内の時間、ブックアーのフォームはプレゼンターの答え、 ゲストは、リンクに参加し、参加者のための個人的なキャンセルリンク、コンソールリンク プレゼンターは、何も表示しないと崩壊するブロックです.
· kamo-marketing
訪問者が電子メールのリンクから登録をキャンセルしてみましょう
/webinar/cancel/<token> は、Webinar 確認メールが誰かに送信する場所です。 もはや作らない人。 公開を通して登録を調べる webinar API は、ウェビナー、プレゼンター、日付、時刻 (訪問者の内) を表示します。 独自のロケールとタイムゾーン、名前付きゾーン)と長さ、およびキャンセル 確認のステップの後ろ。 不明なリンク、既に解除された登録 そして、それぞれが自分の状態を手に入れ、そしてそれぞれに既に保持してきたウェビナー API からの refusal は API の単語として示されます。 noindex/nofollow は、sitemap ではなく: パスは動的なので、 sitemap ウォーカーはそれをスキップし、エントリを生成しません。 人生をコピーする 新しい webinarCancel の名前空間.
· KlusterServices
DKIMの署名でフィードバックIDを署名する
Gmail は、フィードバック ID ヘッダーがない場合のみ、フィードバック ループに対するキャンペーン メッセージをカウントします。 送信ドメインのDKIM署名で覆われています。 local.d/dkim.conf は rspamd のデフォルト署名を保持します ヘッダとフィードバック ID を追加します.
