Przejdź do treści
KAMOUniverse

Changelog

Co nowego.

Każde ulepszenie platformy, jak to wysyła.

  1. · EmailService

    Klucze DKIM i zrelaksowany/zrelaksowany rsa-sha256 sygnatariusz dla domen wysyłających organizacji

    DkimKeys generuje klucz RSA-2048 domeny (umieszczony w zaszyfrowanym dostawcy masowym org) i TXT Wartość, a member publikuje na kamoXXXXXX._domainkey. DkiSigner podpisuje wiadomość dokładnie taką, jak Transport wyśle go – czytaj z pisaniaDo czasu końcowego saveChanges – pokrywanie Od i któregokolwiek z nich Istnieją odbiorniki nagłówków i pętle sprzężenia zwrotnego (w tym identyfikator z powrotem, nigdy nie jest nagłówek X, ponieważ Paski przekaźnikowe X-Kamo-Ref). Zweryfikowana w testach Apache jDKIM, niezależnej implementacji: kampania- Komunikat w kształcie weryfikuje, wciąż weryfikuje po tym, jak przekaźnik usuwa X-Kamo-Ref i nie udaje się na zmienionym ciele lub Temat.

  2. · EmailService

    DNS do wysyłania domen — najpierw własne serwery nazw każdej domeny, SPF ocenione, dostawca DNS o nazwie

    LiveDnsResolver pyta o autorytatywnego obserwatorów strefy (odkryte do 1.1.1.1/8.8.8), więc rekord a Członek właśnie zapisany u ich dostawcy DNS jest widziany od razu, a nie po negatywnej pamięci podręcznej decydenta Wygasa; wraca do publicznych desolwatorów w sprawie skierowania lub limitu czasu i retries nad TCP, gdy Odpowiedź nie pasuje do programu datagram (dnsjava 3.5 nie analizuje skróconego TXT google.com inaczej). SpfEvaluator ocenia politykę domeny dla jednego adresu IPv4 jako serwer odbierający (RFC 7208: - przekierowanie, limity 10-lookupu i 2-void-lookup), czyli CNAME do contact.kamorm.com, w tym miejscu lub nagim ip4 czytaj to samo. DnsDostawcy wymienia firmę prowadzącą DNS strefy od serwerów nazw, dla instrukcji dotyczących dla dostawców.

  3. · EmailService

    Przekaźnik współdzielony org (47.181.8.86) jest rozstawiony dla każdej organizacji; przekaźnik platformy pozostaje w kajdach KamoCRM

    PlatformRelayProperci znają teraz oba przekaźniki incluster: postfix-bulk (47.181.8.87, hello.kamocrm.com) i postfixorgs (47.181.8.86), z adresem egress, selektorem DKIM i organizacjami docelowymi DNS. Wysyłanie domen CNAME na (contact.kamocrm.com). Obaj liczą się jako przekaźniki, więc obaj otrzymują raporty z dostaw. Nasiona zapasowe uruchamiania k3m1-org-przekaźnik jako host platformy SHARED (STARTTLS + PLAIN sign-in z Opcjonalnie Tajny masowo-sypialny przekaźnik-azon-aut, samopodpisany so tlsVerify), wyłączony we własnym rodziei KamoCRM Tak więc jego poczta pozostaje na .87; rozstawiona z rozstawieniem do momentu skonfigurowania logowania, a jej poświadczenia są zgodne z konfiguracją Każda przekaźnikowa. przekaźnik k3m1 jest wykonany raz.

  4. · KlusterServices

    Postfix-orgs, wspólny przekaźnik masowy, która wysyła każda organizacja do 47.181.8.86

    Własna poczta kampanijna KamoCRM odchodzi za pośrednictwem postfix-bulk (47.18.1.8.87) i zwykłej poczty przez Postfix (47.181.8.84). Każda poczta kampanijna każdej innej organizacji otrzymuje własne IP: postfix-orgs działa Sieć hosta k3m1 i wiąże wychodzący SMTP z eno1 (k3m1 fort), które node-config / k3m1ext Wyjść z tego portu i nic innego nie używa. HELO to contact.kamorm.com, nazwa Frontier jest ustawienie jako IP PTR. Słuchacz serwisu nie ma NetworkPolicy, więc składanie jest SASL przez wymagane STARTTLS na porcie 587 Adres wewnętrzny węzła, tylko z adresów klastrowych (tajne w poczcie/SECRETS.md). Przekaźniuje się tylko tak, jak Wysyłanie domen EmailService zweryfikował, odświeżał co minutę – dopóki ta mapa nie dotrze, nic. Tę samą osłonę występu, co po poprawce, posiada posmarowanie, dopóki eno1 nie zostanie potwierdzone, że wyjadą jako .86, a Wyniki raportów z tych samych wyników w dostawach. Każda odmowa jest 4xx, nigdy 5xx. Zaaplikowane do plików, w których stosuje się już przepływ pracy, więc przepływ pracy (i pełny pogodzenie Każdy składnik) jest nietknięty.

  5. · kamo-internal

    Zakładki kampanii otrzymują strzałki przewijania z powrotem, bez ukrywania wybranej karty

    Na ekranie zbyt wąskim dla pięciu pod-tabów, pasek pokazuje teraz w lewo i prawo Strzały obok niego, jak robi maksymalcowa taśma z maksymalcowym okienkiem. Nie miał żadnego od czasu Pierwsza wersja, w której przyciski "auto" MUI wycinają kartę otwartą przez link (?tab'archived) na pół: pojawiają się dopiero po przewinięciu MUI wybranych Przekaź 80px ze paska, a własna animacja zwieńczek MUI następnie Nadpisanie jakiejkolwiek korekty. CampaignTabStrip umieszcza zakładki w zwykłym przewijaczu bez własnego paska (data-kamo-scrollbar""off"), pokazuje strzałki tylko wtedy, gdy karty się przelewają, oraz Przewija wybraną kartę z powrotem do widoku, gdy tylko się zmieni i za każdym razem, gdy Strzały przychodzące lub przechodzące zmieniają szerokość. arrowState i ARROW_SCROLL_FRACTION Pochodzą z maksymalcowanegoTabStripModel, więc oba paski zgadzają się, kiedy jest strzałka Żyj i jak daleko się porusza. Zameldowane w Chrome: przy 1600px nie ma strzałek; przy 700px i 520px każda karta otwarta przez Połączenie jest w pełni widoczne ze wskaźnikiem pod nim, w tym środkowym; Strzały w stronę paska w każdą stronę; ArrowRight przesuwa fokus wzdłuż zakładek i Utrzymuj kartę skoncentrowaną w widoku, a Enter wybiera ją. Jego etykiety strzałek są komponentami.scroll's, naprawiane ręcznie w każdym miejscu w kamo-translation-dyctionary cc484906 (arabski miał "przeklęty" do prawej Scroll). Vitest czerwony tutaj nie pochodzi z tej zmiany i nie poniesie porażki w głównej części: oneScrollbar.test.ts (on NavTopMenuPanel.tsx) i odbiorcaStatus.test.tts (4,, Zalegając 98156e52).

  6. · kamo-internal

    Wysyłanie na żywo w widżecie kampanii e-mail otrzymuje kartę reflektorów

    Z jednym z nich w toku, zakładka In-Progress była pojedynczym cienkim rzędem w Pano z miejscem na znacznie więcej, w tej chwili widżet ma największe znaczenie. Kiedy Każda kampania na karcie jest wysyłana lub wstrzymuje, a panel daje z nich Najmniej jest jego minimalna wysokość, każdy z nich otrzymuje kartę: - jak daleko przez listę, w dużej liczbie zaokrąglonej w dół, więc to Nigdy nie mówi w 100% z czymkolwiek, co zostało; - jego pas na 10px, widoczna głowa i wysysacz; - tempo i czas pozostały, a "N ogółem"; - dostarczane, otwierane, klikane i odbijane, jako lejek obok tempa Wykres na karcie z wysokością do stracenia (trawe długości i stawki) lub jako wierszy liczb na krótszej lub węższej; - jego tempo w ciągu ostatnich 5 minut, poprzeczka na 15 sekund na samym zegarze Granice. Bar wciąż się żeluje, a czas przed ujściem szyby Wysłanie to stub, a nie zero. Karta ma link wiersza i pauzę / wpojem (oba teraz dzielone, od KampaniaRow). Przechwytuje wykończenie, które świętuje. Dwa wysyłają stronę siedzącą - obok szerokiego okienka. Wybór odczytuje tylko rozmiar panelu, którego nic wewnątrz nie może zmienić, Więc nie może migotać. Karta, która i tak przepełnia się, jest zapamiętana za to Rozmiar panelu, który następnie pokazuje rzędy. Układy wewnątrz karty są Zapytania kontenerowe na własny rozmiar karty. Model: tempuBuckets rozsiewa to, co poruszało się między dwiema klatkami w czasie Pomiędzy nimi.Pusram zajmuje okno, a hak utrzymuje pięć minut Na żywo wysyłaj, przez pauzę i finisz. Sprawdzony bezgłowy zegar 10x o różnym tempie, w regularnym, szerokim, wysokie, 460 i 668x420 szyby, a z dwoma wysyłanymi szerokimi i wysokimi szybami: Karty pasują bez przelewu, a paski tempa podążają za klatkami, w tym Spokojny odcinek. Nic nie porusza się pod zmniejszonym ruchem.

  7. · kamo-internal

    Zakładki widżetów kampanii e-mail to etapy ekranu kampanii

    Widgetowanie złożyło kampanie pod własnym Live / Sent / Drafts, które umieszczają Anulowana kampania pod Sent i zaplanowana pod Live. Jego zakładki są teraz In-Progress, Not Started, Paused and Complete, złożony przez kampanięTabOf i nazwany with marketing.bulkEmail.tabs., więc launchpad i /marketing/email nigdy Postaw jedną kampanię w dwóch miejscach. Liczby pochodzą z nowych "stages" EmailService (7481f15); odpowiedź starszego serwera jest liczona z kampanii, które wysłał. Wybór zakładki: - Dopóki członek nie wybierze jednego, tajnika ląduje na tym, co się dzieje i pozostaje Podczas gdy ta zakładka nadal trzyma wszystko. Porusza się tylko po to, by pokazać wysłanie, które po prostu Zaczęło się lub gdy kończy się jej własna zakładka. Wysłanie, które właśnie skończyło się natrzymane In-Progress dla jego świętowania, a następnie okienko idzie dalej. - rząd, w którym członek zatrzymuje się lub wznawia, pozostaje tam, gdzie go nacisnął, z jego Wznowij, dopóki nie opuszczą zakładki. - Nazwy scen pokazują, gdzie pasują obok "N more", mierzone w stosunku do ukrytego Kopiuj w języku członka; w przeciwnym razie każdy etap pokazuje swoją ikonę, z Nazwa w jego podpośledzie i dostępnej nazwie. Naprawy znalezione podczas sprawdzania w przeglądarce: - Sparks z nowych istnień i kliknięć w gotową kampanię nigdy nie były widoczne: Linia figurek je przycięła. Teraz klipuje tylko poniżej i obok siebie, A iskry lecą z końca metra, więc przeżyją zrzucanie prętów. - Rząd zbyt wąski dla swoich figurek narysował Otwarty licznik kliknięty. A. o. w tym w tym, że Bary idą najpierw poniżej 340px, a wszystko, co nadal nie pasuje do owijania Widok w całości. - Płytki KPI zbyt wąskie, jak na swoją nazwę i szybkość elipizowała nazwę ("Ope..."). Stawka teraz owija się poza zasięgiem wzroku. - "N more" liczyły wiersze opuszczające poprzednią zakładkę. Sprawdzone bezgłowe szerokości w szybach 322 do 1360: bez cięcia w rzędzie, bez przepełnienia karty, Nazwy/ikony przełączają się z i bez "N more", klawisze strzałek, trzymaj go finiszem Przesunęło się, a iskry nie wspięły się na 668 i 460. Serwer pauzy test już teraz Odpowiedzią z przerwaną kampanią. Nie udało się pod obciążeniem, gdy widget jest Przeczytaj ponownie 400 ms po przerwie, która przywróciła kampanię, która wciąż wysyłała.

  8. · EmailService

    Widget kampanii odczytuje na etapie, a następnie etapuje pliki ekranu kampanii przez

    Widget widżet uruchamiany teraz czyta grupy i liczy kampanie według etapów /marketing/email's tabs use: In-Progress (przestrzeń), Nie rozpoczęty (projekt lub zaplanowano), wstrzymane (przerwane lub anulowane), Kompletne (wysłane). Nieudane pliki przez jak Dążym dotarto do swojego wysłanego, tak jak robi to kampaniaTabOf. Każdy etap jest ograniczony na własną rękę: Zaplanowano przed draftami i najszybciej w pierwszej kolejności; wstrzymano wcześniej. "scenety" są dodawane obok "grup", które pozostają, dopóki nie nie zostanie zbudowanie widżetu, który zostanie odczytany Jest on rozmieszczany. Wcześniej anulowana kampania była liczona jako zakończona, która jest Tam, gdzie użytkownik zdecydował dziś, że nie należy.

  9. · kamo-internal

    Lista kampanii śledzi to, co koledzy robią z kampanią, na żywo

    BulkEmail Workspace przyjmuje ramki zmianowe useEmailCampaignsWebSocket Dostarcza (onChanged, d0b56adf). Ramka nazywa kampanię i to, co się z nią stało, Nigdy sama kampania, więc lista czyta się ponownie, że jedna kampania jest ponownie GET /campaigns/Eid i umieszcza je na miejscu. Archiwum lub przywrócić ruchy kolegi wiersz między zakładkami tutaj, jak to się dzieje, pojawia się nowa lub powielona kampania, i usunięty, lub taki, który teraz odpowiada 404, opuszcza listę. Inscenizowany Liczba skrzynek wycinanych następuje według tych samych ram. UtwórzCampaignChangeFollower przechowuje jedną lekturą na kampanię na raz. Ramki, które Przybywaj, gdy czytana jest kampania (lista przesłana w plastry ogłasza każde krotnika) poproś o jeszcze jedną lekturę po jego powrocie, więc wybuch kosztuje dwa odczyty i Starsza odpowiedź nigdy nie ląduje na szczycie nowszych. Kampania usunięta podczas jej odczytu W drodze nie jest odkładany, gdy wraca. Sprawdzano w Chrome przeciwko prawdziwemu komponentowi, przepychając ramki przez hak: Przywrócenie przesunęło wiersz z Archiwied z jednym odczytem, a usuń usunąć jego wiersz Bez żadnego, stworzony szkic pojawił się pod "Nierozpoczęty", a pięć klatek dla jednego Kampania kosztowała dwie lektury.

  10. · kamo-internal

    Widget kampanii e-mail, na żywo na wyrzutni

    Nowy widżet domowy, email.campaigns, na wyrzutni każdego, kto może otworzyć Kampanie. Pięć praw (EMAIL_CAMPAIGNS_WIDGET, 321-325) zwisają VIEW_BULK_EMAIL, i ADDED, OPTIONAL i MOVABLE seed from it in in SecurityService, więc przychodzi i jest członkiem do usunięcia. Brama również Prosi o aplikację marketingową i samą VIEW_BULK_EMAIL. Co pokazuje, czytając nowy EmailService /api/email/widget/campaigns raz i Przeprowadzka na żywo po tym: - Cztery liczby za ostatnie dwa tygodnie (wysłane, otwiera, kliknięcia, odbici), każda z Pasek dziennie, który odczytuje klucze wskaźnika lub strzałek, i otwiera i klika o dostarczonej poczcie według reguły używa karta dostawy (angażowanieRate, Teraz podzieleni przez oba). - Live / Sent / Drafts, zliczonymi. Kampania wysyłająca to pas ruchu, który się porusza, Z pozostałym tempem i czasem; otwiera i klika, wznoszą się z niego, gdy lądują. A A Zatrzymany mówi, dlaczego nie może wysłać; zaplanowany odlicza; wysłany jeden Pokazuje jego szybkość otwarcia i kliknięć. Zatrzymaj się i wznowij siedzenie w rzędzie dla członka Z MANAGE_BULK_EMAIL. - Kampania, która kończy się, gdy zegarki okienne pozostają na Live na chwilę, Z pęknięciem, zanim przejdzie do Wysłania. - Dolna linia niesie wiadomości, jak to się dzieje; szeroka szyba trzyma ją w Kolumna z dzisiejszą sumą. - Układa się do swojego pokoju: dwie cyfry i kompaktowe rzędy w jednej kolumnie, w całości Ręka tylko na dowolnej wysokości (lista owija się raczej niż na krojach) i dwie kolumny Kampanie w szerokim okienku tylko raz można by ukryć niektóre. Przejażdżki na żywo /topic/campaigns/orgId>. useEmailCampaignsWebSocket czyta Każda klatka przez odczytujCampaignFrame i zyskuje na Zaangażowaniu, onChanged i onSnapshot, plus requestSnapshot, który widżet wyłącza się, więc wyrzutnię Nigdy nie pyta całą organizację o migawkę. onProgress wciąż widzi tylko Ramki postępu. Wykończenie dzwonka teraz strzela w drodze do SENT, a nie Każda późniejsza ramka, która nadal mówi SENT (zespół odbijania i dostawy Opublikuj go na wiele godzin), a haczyk nie pisze już swoich opiekunów ref podczas Odwilżyj. Zweryfikowany za pomocą tsc, skryptów strażniczych, nowych i dotkniętych plików oraz plików Bezgłowe uprzęże nad rzeczywistym komponentem przy 1x1, 2x1, 2x2, 2x3 i pełnej szerokości.

  11. · kamo-internal

    In-Progress, Not Started, Paused, Complete i Archived tabs, a . .

    /marketing/email dzieli kampanie na pięć podtagłbów, każdy z liczeniem na żywo, Każda kampania jest dokładnie w jednym: - In-Progress: wysyłanie - Nierozpoczęcie: szkice i zaplanowane kampanie - Pauza: wstrzymane i odwołane kampanie - Kompletny: wysłany - Archiwalne: Niezależnie od członka zarchiwizowanego Nieudane nie jest własnym etapem: odbiorcy zawiedli, kampania nie, a kampania nie EmailService nigdy go nie ustawia. Kampania, która została złożona przez to, jak daleko wysyła Dostałeś się. Zakładka żyje w ?tab, więc przeładowanie, przycisk wsteczny i wspólny link trzymają To; kampania zmienia zakładkę sama w sobie, gdy zmienia się jej status na żywo; i pusta Zakładka mówi, do czego to jest. Archiwum i Przywracanie są w menu każdej kampanii (emailservice 39ffa54). Tylko a sam na sam na sambę Kampania bez niczego do wysłania może być zarchiwizowana: szkic lub wysłany lub Odwołano jeden. Przycisk otworzył kampanię, a także jej menu. AG Grid strzela rzęsKliżowane Od własnego rodzimego słuchacza na kontenerze rzędowym, który działa przed React's Oddelegowany onClick, więc stop-propagacja renderera komórkowego przyszła za późno i Wiersz nawigował do edytora pod menu. Rzędnik teraz przepuszcza kliknięć wewnątrz sterowania data-campa-władnie, tak jak robi to sieć kodów śledzenia, A kliknięcie na nazwę kampanii nie przesuwa już dwukrotnie trasy edytora. Zameldowane w Chrome przeciwko prawdziwemu komponentowi: w zależności od źródła/kontynuacja kliknięcia - Z tą zmianą otwiera menu i idzie Nigdzie. Tabs, counts, archiwum i przywracanie, puste zakładki i pasek 520px Sprawdzone w ten sam sposób. Sformułowanie jest w kamo-translation-dykcyjne 02109cfc, popchnięty pierwszy i napisany Prędkot w każdym miejscu.

  12. · EmailService

    Archiwum kampanii, a widżet pozostawia zarchiwizowane

    POST ’ i /unarchive (MANAGE_BULK_EMAIL) zestaw i Wyczyść archiwum kampaniiAt, a CampaignDTO ją przenosi. The /marketing/email Ekran plików zarchiwizowanych kampanii w ramach własnej zakładki Archiwalne. - Tylko kampania, która nie ma już nic do wysłania, może zostać zarchiwizowana. Zaplanowana, wysłanie Albo przerwane jest odrzucone: odwołaj go najpierw. Opracowywać go ponownie utrzymuje pierwszą randkę. - Wyślij teraz, zaplanuj i Wyślij do najnowszego prześwietlonego archivedAt, więc kampania wysłana ponownie Wracamy do zakładek roboczych. - Oba są ogłaszane jako ramki zmian ARCHIVED / UNARCHIVED, więc każde otwarcie Ekran kampanii i aktualizacja widżetu domowego na żywo. - CampaignWidgetCzytajli się pozostawia archiwalne kampanie z ostatnich, w świecie HrabstwoByStatus. Buduje na kamo-shared-library ebdd15f1 i kolumna archived_at, obie już na miejscu. TransactionalSendRatchetTest był czerwony w głównym przed tym zobowiązaniem i nadal jest; Nic tu nie dotyka SendToUser. Pozostałe 1554 testy przechodzą.

  13. · kamo-shared-library

    Kampania może być archiwizowana

    EmailCampaignEntity zyskuje archivedAt (archived_at): gdy członek zarchiwizował Kampania, nieważna, póki nie jest. Ekran /market/e-mail otrzymuje zakładkę Archiwizacja Widget domowy opuszcza archiwalne kampanie. Kolumna znajduje się już na klastrze, nakładana ręcznie, ponieważ każda zmiana schematu jest: ALTER TABLE email_campaign.email_campaigns ADD COLUMN IFALI NIE WYJASTKANIA w archiwum godzin z strefą czasową; Nullable bez domyślnego, jak inne momenty na stole, więc kod zbudowany Zanim to zatupi odczytuje tabelę bez zmian.

  14. · EmailService

    Przechowywane na żywo i ramki na żywo dla widżetu Home Campaigns

    GET /api/email/widget/campaigns to widżet uruchamiany, który jest czytany dla Szyde, która znajduje się na stronie głównej każdego widza kampanii przez cały dzień: chude rzędy bez body (CampaignLine), najpierw kampanie na żywo (wysyłanie, wstrzymane, zaplanowane najszybciej), Następnie ostatnio zakończone i ostatnio edytowane szkice, każda grupa Ograniczone; dokładne liczby na grupę; każda pokazana kampania otwiera, klika i Raporty przekaźnikowe w jednym z redyńców przeczytanych; ostatnie czternaście organizacji Dni; wybór śledzenia; i zegar serwera do odliczania. To wymaga VIEW_BULK_EMAIL, tak jak robi to lista kampanii. Trzy rodzaje ramki teraz jeżdżą /topic/campaigns / "orgId" obok postępu: - zaangażowanie: CampaignEngagementPulse łączy się pierwszy, pierwsze kliknięcia i Raporty przekaźnikowe na kampanię i wysyłają co najwyżej jedną klatkę na sekundę za kapsułę, Z tym, co jest nowe od ostatniej klatki i sumy, gdy Redis je trzyma. - zmiana: CampaignController ogłasza utworzenie, edycję, edycję, usunięcie, Zduplikuj, harmonogram, wysyłasz, pauz, CV, anulowanie, publiczność i odbiorca Zmiany po zakończeniu połączenia serwisowego, jako id i tylko czasownik. - Ani nie prowadzi kampanii na najwyższym poziomie, idżawi. Każdy ekran kampanii czyta ramkę Z jednym w miarę postępu i kopiuje jego liczniki na wierszu, więc rama Kolejny kształt niosący jeden oznaczałby liczenie na ekranach, które wciąż są uruchomione Starszy kod. Nadawca liczy również zaakceptowane wiadomości dnia raz na partię (stats.daily "sent"), z których pochodzi dwutygodniowe linie iskry widżetu. Pełny pakiet to 1534 testy z jedną awarią, TransactionalSendRatchetTest, To liczenie trzech przeciążeń sendToUser od czasu c47fcf6 i nie jest ze sobą spokrewniony.

  15. · SecurityService

    Widget widżet kampanii e-mail pojawia się dla wszystkich, którzy mogą otwierać kampanie

    EMAIL_CAMPAIGNS_WIDGET i jego zalanie zasad ADDED, OPTION i MOVABLE Od VIEW_BULK_EMAIL na butzie, który je wprowadza, więc tafla ląduje na Wyrzutnia każdego członka, który może już czytać kampanie, i to jest Do ich usuwania lub poruszania się. WYMAGANE nie jest zalążona, jak w przypadku każdego widgetu: a Nie rozmieszcza nigdy nie przypina szyby do czyjejś strony głównej.

  16. · kamo-shared-library

    Kampanie e-mailowe to pięć praw widżetu domowego

    EMAIL_CAMPAIGNS_WIDGET (321) i jej czworo polis dzieci (322-325), zawieszone Z VIEW_BULK_EMAIL: każde odczyty za widżetem, lista kampanii, jego Liczniki i ramki postępu na żywo, już to robią, więc Widget nigdy nie może być o wiele za każdym razem. 326 to kolejny darmowy id.

  17. · kamo-internal

    Kampanie e-mail to pierwsza zakładka marketingowa

    Tabnika narzędzi marketingowych czyta teraz kampanie e-mail, materiały marketingowe, Social media, kody śledzące. Bulk Email przenosi się na przód pod nową nazwą, A Materiały przyjmuje pełną nazwę, którą już pokazuje jego własna strona. Wskaźnik /market ląduje na pierwszej zakładce, którą członek może otworzyć, więc jego kolejność Ruchy z paskiem: Kampanie e-mailowe domyślnie, Materiały marketingowe dla a Członek bez prawa e-mail. Trasa, klucze do etykiety oraz VIEW_BULK_EMAIL - Nie zatrzymujcie ich nazwisk. Sformułowanie jest w kamo-translation-dykcyjnej 98a21a21, naciśnięte jako pierwsze, z Dwie etykiety napisane ręcznie w każdym miejscu.

  18. · kamo-marketing

    Rozwiązania poruszają się w ramach Zasobów, jeden poziom w dół

    Najwyższy rząd przewoził pięć kategorii przed numerem telefonu, językiem Selektor i trzy CTA. Rozwiązania są teraz pierwszym elementem wewnątrz zasobów, Ponad dwoma linkami do artykułu i przechowuje swoje osiem stron branżowych jako Przelot na trzecim poziomie. Nic w rendererze się nie zmieniło: NavChild już niesie swoje własne „dzieci”, a legal został zagnieżdżony w ramach Zasobów przez cały czas, Na pulpicie i na akordeonie mobilnym obydwie. To tylko dane. "All Industries" pozostaje pierwszym wnukiem, a nie składaniem Do wiersza rodzica, ponieważ mobilny rodzic jest przyciskiem przełączania, a nie przyciskiem Link — / rozwiązania same w sobie są nieosiągalne na telefonie bez niego. / strony rozrywek nadal świetlają swoją kategorię: isCategoryActive już Przechadza się po wnukach, więc Resources podkreśla, gdzie używane rozwiązania. Potwierdzone na /en/solutions/real-estate — Zasoby renderują w sprawie rgba (18 07 142 581,1) i pozostałe cztery pozostają nr 9a9a9a. Zweryfikowano na stronę, a nie źródło. W górnym rzędzie czytamy Funkcje, Usługi, Ceny, Firma, Zasoby; Zasoby nawiedzone wtedy Rozwiązania otwierają osiem branż z ich prefiksami / w ich prefiksach. Przelot ma 200px szerokość, a jego prawa krawędź ląduje na 1001, 1001, 1076 i 1316 dla widoki 1024 (punkt przełomowy lg, w którym w ogóle pojawia się ta nawigacja), 1280, 1440 i 1920 — wewnątrz portu widokowego na każdym, bez poziomych Przepływ przelewem. Na 390-wiecznego Telefonie Zasoby otwierają się pod nim, I wszystkie osiem linków tam są. tsc, check-kliberniastacyjno-nawigacja i -i18n-keys są czyste.

  19. · kamo-marketing

    Rozwój aplikacji, projektowanie stron internetowych i marketing internetowy

    - argumentuje, że firma płacąca agencji Za miejsce płaci za oprogramowanie, którego agencja nie zbudowała, nie hostowała ani nie trzymała Bieganie. Kończy się pytaniem, kto powinien dostać te pieniądze i nigdy nie miał Drzwi do punktu w punkcie. - To są drzwi. 59 stron pod /services: hub, trzy filary, 30 stron możliwości, 12 Strony dowodowe, 5 porównań i sześć o tym, jak zaręczyny Biegi. Struktura w TypeScript, proza w słowniku — wzór 37 branż, 45 integracji i 41 terminów słownikowych już używa, więc a więc Tłumacz może przepisać każde zdanie i nie może uszkodzić ślimaka lub - Trasa. Cztery nowe kolekcje, ogrodzone raczej na przestrzeni nazw „usługi” "Zbiory": to ostatnie jest już przetłumaczone na wiele miejsc I ponowne użycie go twierdzi, że francuska strona serwisowa istnieje przed słowem Tak jest. Dzisiaj wszystkie strony kanonikowe usługi do angielskiego i pojawiają się w Tylko angielska mapa strony, czyli to, co maszyna już robi dla Strona, której kopia nie została przetłumaczona. Portfolio jest naszą własną platformą, ponieważ jest jedyną, jaką możemy sobie pozwolić Inspekcja odwiedzającego: serwery poczty, przełączniki telefoniczne, WebRTC Stwór mediów, rurociąg atrybucyjny, klaster i ta strona internetowa. Każda liczba na tych stronach przenosi polecenie, z którego pochodzi i dzień Został przeczytany, a skrypty/check-services.ts zawodzi na fakcie, że Nie ma też żadnego – wraz z ślimakiem filarowym, który jest dzieckiem statycznym /services Czy cień, zwisające odniesienie do dowodów, osierocona strona pracy i Porównanie, które nie może nazwać sprawy przeciwko sobie. Ta ostatnia zasada nie jest Dekoracja: strona porównawcza, która nie może się kłócić z samym sobą, jest Reklama w kącie. Ceny publikują mechanizm, a nie tabelę. Cytujemy po tym, jak Odkrywanie i napraw liczbę jako pierwsze; co go porusza, czego nigdy w nim nie ma (brak procent wydatków na reklamę, brak znaczników na nic kupionego dla Ciebie) i Kiedy się dowiesz, wszystkie są na /services/how-we-quote. /services/start Publikuje umyślnie istniejący temat — usługa wsparcia rozwiązuje TematTitle przeciwko tematom, które już istnieją i odpowiada 400 w przeciwnym razie, Tak więc temat "Web Design" zostałby opracowany, wdrożony, wyglądał prawidłowo, I odrzucił każde zgłoszenie. Dwie poprawki dostępności, które nie są ściśle tą funkcją, ale są wysyłane na Każda jego strona. globals.css:52 mówi, że nigdy nie używa surowego koloru-podstępnego Dla małego tekstu; baner zgody na pliki cookie zrobił, o godzinie 2.18:1, na każdej stronie Strona i RelatedContent zrobił to samo na rozwiązania, integracjach, Alternatywy i glosariusz. Obaj teraz używają czytelnego akcentu, a także Linki do polityki banera są białe — kolor-akcent-on-canvas jest obliczany Uderz dokładnie 4,5:1 w płótno, które nie pozostawia miejsca na głowę dla lekko podniesioną powierzchnię znajduje się sztandar. Wszystkie 19 stron serwisowych, Strona główna, /pr.ing i /rozwiązania/- teraz przejdą siekierę w WCAG 2.2 AA z zerem Naruszenia; odznaki o opłatach z własnego zestawu treści nadal nie działają i Zostawiają się sami.

  20. · kamo-marketing

    Artykuł o liczeniu subskrypcji oprogramowania, a baner wskazuje na to

    /all-in-one-business-software pyta, ile subskrypcji płaci firma: lista kontrolna, która Liczmy je i sumuje miesiąc i rok, gdy czytelnik je zaznacza, co kosztuje stos poza jego faktury, co wszystko w jednym musi oznaczać być wartym cokolwiek, pytania, które należy zadać przed konsolidacją, I jak KamoCRM zajmuje tę samą ziemię. Dwie zewnętrzne liczby, każda wymieniona w kopii i połączona na stopa: Zylo's 2026 SaaS Management Index na niewykorzystanych licencjach i kto kontroluje wydatki na oprogramowanie, oraz Raport Cledara 2025 Software Spend Report o tym, jak daleko firmy nie doceniają liczby swoich narzędzi. Ogłoszenie o służbie publicznej banera wskazuje teraz tutaj, a nie w artykule o zasiłku. To jego Etykieta jest nowym kluczem, a nie nową wartością dla starego: słownikowy rurociąg pomija klucz, którego Tłumaczenie już różni się od angielskiego, więc każdy inny język zachowałby stary Pytanie o link do tego artykułu. Wymienione w menu Zasoby, centrum Zasobów i mapa strony.

  21. · kamo-internal

    Opaski wyrzutni otwierają się na własną powierzchnię zrzutu

    Pas administratora i opaski pinned-app są malowane z górnym paskiem gradient, a następnie odpowiedział unoszący się z czymś z innej aplikacji całkowicie: Biała karta z napojami unosząca się dwanaście pikseli poniżej pasma i – na pinned app Chip – popover MUI z szarymi napisami i bez szwu do rzeczy, z której się wydostał. Dziewięć z nich, z których każdy pojawia się i znika. Niewłaściwa paleta, błędna Kształt, przybywający z niewłaściwego miejsca. Teraz otwierają się na powierzchnię SAME, z którego korzysta menu górnego paska. Jest pomalowany na Marka organizacji, jej górna krawędź przyjmuje dokładnie taki kolor, jaki ma pasek na miejscu Pozostawia z nich, filety spawają do tej krawędzi, a jedna powierzchnia ślizga się i Zmień rozmiar od wejścia do wejścia, gdy wskaźnik podróżuje po wierszu - więc zespół czyta się tak, Otwieranie zamiast jako karta ułożona nad wyrzutnią. NavTopMenuHost przyjmuje dowolny element przypominający poprzeczkę, a nie tylko nagłówek NavTop: a "edgeGap" na gospodarza, ponieważ zespół zakręcił poprzek, którego nie robi, i Zarówno panel, jak i jego filet muszą spotkać się z malowaną opaską. Pomieszczenie, które ma panel Dorastanie jest mierzone od miejsca, w którym faktycznie się zaczyna (--kmenu-max-height) Zamiast z wysokości nav, co nic nie znaczy w połowie drogi w dół strony. NavTopMenuPanel zyskuje „w naturze”: ta sama powierzchnia i ten sam ruch, Proza o spuście zamiast wyborów. Zadaje, że nie ma roli w menu I nie skupia się, więc opisy baru administratora pozostają opisami I Enter nadal podąża za linkiem, który opisują. Przypięty chip aplikacji rysuje same wiersze nav (NavToolSectionsPanel, Wyjście z NavToolBarMenu), więc jedna opcja odpowiada jednym menu w dowolnym miejscu Jest oferowany - grupy zagnieżdżone, odznaki, skrzynka filtracyjna i wszystko. Oba zespoły odczytywały swój gradient z navTopSeam.ts. Dosłowna kopia Postoje są dokładnie tym, co dryfuje, a szew jest tylko niewidoczny, podczas gdy Panel i zespół zgadzają się co do tego. Testy: pręt administratora renderowany i pracował z myszką, palcem i klawiatura (jedna powierzchnia, przekazana od wejścia do wejścia, nigdy nie kradzież fokusowa), plus Strażnik źródłowy, do którego żadna z opasek nie sięga po popover lub drugą kopię Znów gradient.

  22. · kamo-marketing

    Osadzaj wideo marketingowe na stronie głównej w artykule o opłatach CRM z białym etykietą

    Daj czytelnikom ten sam kołowrotek produktu ze strony głównej po intro, przed sekcją odsprzedanego oprogramowania.

  23. · kamo-shared-library

    WebinarNotifyMember, lista notyfikowana dodatkowo organizacji

    Jeden wiersz na (organizacja, członek zespołu) w webinarium_notify_member, stworzony przez Firma KamoInitializerWebinNotifyMberMigration firmy KamoInitialService i już stosowana. W tym, w tym, w tym, w pot wt., w pot wt. w tym, że w tym, w tym, w tym, w tym, w tym, w tym, w tym, w tym, Repozytorium dołącza do członka zespołu, ponieważ każdy czytelnik chce tego człowieka. Brak klucza obcego, pasujący do migracji, więc aktualizacja inicjera ddl-auto Nigdy go nie dodaje.

  24. · MediaService

    Blindcopy-ploskopię członków zespołu powiadomionego dodatku na e-mailach prezenterowych

    GET/PUT /api/webinar/notify-members (MANAGE_SUPPORT) czyta i zastępuj Lista powiadomień organizacji, a także każda id musi być członkiem zespołu. Organizacja, najwyżej 25. WebinarEmailNotifier dodaje własne Lista organizacji jako ślepych kopii na każdym liście do prezentera — zarezerwowana, Uczestniczy dołączony, uczestnik odwołany, sesja odwołana, przypomnienie – nigdy na List uczestnika, nigdy adres prezentera, każda osoba raz i Tylko osoby nadal kwalifikują się do pisania.

  25. · EmailService

    Kopie ślepo na szablonie usługi do usługi

    SendTransactionalRequest pobiera opcjonalną listę bcc, przenoszona przez sendToUser i dostarczaj do koperty SMTP – w tym dochodzenie w sprawie zadośćuczynienia nad platformą – tak samo skopiowanej otrzymuje dokładnie wiadomość, którą otrzymuje adresat.Oślepione kopie trymuje, Upuszcza adresat i duplikaty oraz zamyka listę na 25. Brak istniejącego dzwonienia Zmiany: bez bcc wysyłanie obiera ścieżkę, którą zawsze robił.

  26. · InitializerService

    Webinar_notify_member, członkowie zespołu skopiowali na e-maile prezenterowe

    Jeden wiersz na (organizacja, członek zespołu): Lista powiadomionych dodatkowo na Zaplanowana karta Ustawienia webinaria. MediaService blind-copiepis te adresy na Każdy e-mail webinarowy wysłany do prezentera dla organizacji, która jest właścicielem Rodzaj webinarium. Nowa tabela, więc żaden stół nie czytany jest żaden stół, który jest zmieniany; nie ma wierszy To znaczy, że nikt nie jest kopiowany. Stosowany do produkcji 2026-09-13.

  27. · kamo-internal

    Pozwól administratorowi wybrać, kto jest kopiowany na e-mailach prezenterowych

    Zakładka Planowanych webinariów zyskuje sekcję "Dodatkowo notyfikowany" obok Lista rodzajów webinariów. Wybrani tam członkowie zespołu dostają ślepą kopię Każda automatyczna wiadomość e-mail wysłana do prezentera (nowa rezerwacja, uczestnik przyłączony lub Anulowane, sesja anulowana, przypomnienie) dla wszystkich organizacji Webinacje. Czyta i zastępuje listę poprzez /api/webinar/notify-members, picks osoby z tym samym wieloselectowym katalogiem, którego używa zakładka Prezenterzy, I oszczędza wyraźnie za pomocą niezachwianych zmian wskazówek i zapisanego potwierdzenia. 403 ukrywa sekcję, nieudane obciążenie oferuje raczej ponowne próbę niż pustą Lista, odmowa zapisanie pokazuje powód serwera i zmianę innego administratora Przejrzeć na żywo w temacie webinaru or-change.

  28. · kamo-shared-library

    Szablony kanoniczne dla każdego listu rezerwacyjnego

    Siedmiokrotnie meet.webinar_ - szablony - zarezerwowany / uczestnik przyłączony prezentera / Uczestnicy odwołali powiadomienia, potwierdzenie i odwołanie uczestnika, Sesja-anulowany list i zaplanowane przypomnienie — zarejestrowane w CANONICAL_KEYS, z WebinarEmail budując jedną zmienną mapę wypełniającą je: Czasy w strefie czytelnika, forma bukmachera odpowiada dla prezentera, Zapraszamy do łącza gości i łącza do rejestracji osobistego dla uczestników, link konsoli dla Prezenter i blokuje to załamuje się, gdy nie ma nic do pokazania.

  29. · kamo-marketing

    Pozwól odwiedzającemu anulować rejestrację z e-mailowego linku

    /webinar/cancel/'token> jest miejscem, w którym wysyła ktoś e-mail z potwierdzeniem webinaru Kto już nie może tego zrobić. Wygląda na rejestrację przez społeczeństwo API webinarium, pokazuje webinarium, prezenter, datę i godzinę (w przypadku odwiedzającego Własna lokalizacja i strefa czasowa, ze strefą nazwiskową) i długością, i anuluje ją Za pomocą potwierdzenia kroku. Nieznany link, już anulowana rejestracja I webinarium, które już zostało zorganizowane, każdy z nich ma swój stan, a Odmowa z API jest pokazana jako wyrazy API. noindex/nofollow, a nie w mapie strony: ścieżka jest dynamiczna, więc Stronamap walker pomija go i nic nie generuje dla niego wpisów. Kopiuj życie w Nowa przestrzeń nazw webinariówCancel.

  30. · KlusterServices

    Zarejestruj się,ID w podpisach DKIM

    Gmail liczy przesłanie kampanii w stronę swojej pętli opinii tylko wtedy, gdy nagłówek Feedback-ID jest Napis DKIM domeny wysyłanej. local.d/dkim.conf utrzymuje domyślne podpisanie przez rspamd Nagłówki i dodawanie feedback-id.

Twój wszechświat czeka.

Rozpocznij bezpłatnie w kilka minut.Dodaj produkty, kiedy tylko będziesz gotowy — bez migracji, bez nowych logowań.

Bezpłatne na zawsze — nie wymaga karty kredytowej