Changelog
Cosa c'è di nuovo.
Ogni miglioramento alla piattaforma, come si spedisce.
· SecurityService
I demo prenotati su una pista, in testa
E' il momento giusto. La sezione Webinars della pagina principale ha chiamato /api/webinar/leads/{id} da quando è stato scritto e niente mai servito — l'API live risponde 404, e il componente legge un 404 come "la funzione webinar è spenta" e non rende nulla. Così un demo prenotato dal sito di marketing ha creato un vantaggio, collegato la prenotazione ad esso, e non ha mai mostrato su di esso. Servito qui piuttosto che in MediaService, che possiede le prenotazioni, perché la domanda che un chiamante ha passare prima è "può leggere questo piombo": sessione valida, piombo nell'organizzazione del chiamante, poi LeadCommsReadGate — il proprio piombo non ha bisogno di diritto, uno non firmato ha bisogno di VIEW UNASSIGNED LEADS, qualcuno altri ha bisogno di VIEW LEAD CONTACT INFO OTHERS, dio bypassa. Il cancello è quello che la scheda di comunicazione usi, chiamati, non copiati. Le negazioni sono registrate tramite PhiAccessAuditor; una lettura non è, perché la risposta non contiene dati di contatto — la stessa linea che estrae /comunicazioni/conti endpoint. LeadWebinarEntry è titolo, inizio / fine, nome del presentatore e i due stati. Non c'e' niente in ballo. partecipanti oltre se stanno ancora arrivando: il nome e l'indirizzo del visitatore sono propri e già sulla pagina. Un visitatore che cancella e registra di nuovo produce un secondo link allo stesso la riga dei partecipanti, e la sezione mostra che una volta. I cinque fallimenti nella suite completa... — quali bandiere ********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** cambiamento. Questo endpoint risolve una sessione, quindi il ratchet non lo nomina. 2712 test altrimenti verdi.
· kamo-internal
Una finestra che il membro porta al fronte con una luce che non si può perdere
Fare clic su una testa di esagonale, o la striscia di una finestra in piedi dietro, ha portato la finestra in avanti con una fiore ombra debole (strip) o un bagliore verde 600ms (testa di esagonale) - facile da perdere mentre le righe riordinano Giralo. Ora la cornice stessa si accende: un anello all'interno del bordo della finestra con due comete da corsa arrotondalo, le increspature si diffondono dal telaio e un bagliore che tiene, circa 2.4s, poi fuori. - Lit da ogni gesto membro che porta una finestra in avanti: un clic su una striscia, un clic esagonale o ripristinare (tool:focus), e qualsiasi aperto il membro richiesto. Incoming aumenta stare tranquillo. - Uno alla volta: il più recente arrivo dims quello prima, quindi la finestra illuminata è sempre quella Ho appena chiamato un membro. - Il movimento ridotto mantiene la cue e abbassa il movimento: l'anello e la luce accesa senza muoversi. - la sua coppia di colori a :root (-dock-arrival, --dock-arrival-ring); la barra del titolo già indossa il marchio, e un anello di marca scompare lungo esso.
· kamo-shared-library
Un francobollo visualizzato del presentatore, quindi una sessione prenotata può identificarli
Il conteggio webinar dell'icona di supporto legge WebinarAttendee.dateViewed. Un presentatore non è una fila dei partecipanti, così una sessione prenotata con loro è stata e-mail e poi mai menzionato nell'app: il distintivo soggiornato zero per l'unica persona che deve gestirla. E' il momento giusto. (PRESENTER DATE VIEWED, null = non ancora mostrato) è quel timbro per il presentatore assegnato, e ScheduledWebinarRepository guadagni conteggioUnreviewedForPresenter / trovareUnreviewedForPresenter con il predicato delle domande dei partecipanti: SCHEDULED del presentatore sessioni senza timbro. WebinarQueryParseTest si confronta con la mappatura. DDL, già applicato al database live come proprietario della tabella: ALTER TABLE public.scheduled webinar ADD COLUMN IF NOT EXISTs presenter date viewed timestamp(6) senza fuso orario; I cinque guasti nella suite completa (SystemBugCountContractTest, PhiServiceTypeMappingTest, StoccaggioDomainCoverageTest... RelazioneVisibilità Test) fallire identicamente su origine/principe senza questo cambiamento.
· kamo-marketing
Un pulsante demo live accanto a Start Free Forever
L'eroe casa offerto due cose: iniziare gratis, o leggere i prezzi. Ora anche offre mezz'ora con una persona. "Prenota una demo dal vivo", con "30 minuti" seconda linea, siede a destra di Start Free Forever e si apre /demo, il flusso di prenotazione esistente ("Half un'ora con qualcuno che conosce il prodotto"). È il pulsante di vetro della striscia CTA, all'altezza e al raggio 56px di .hero-cta, quindi Start Free rimane quello primario. I due pulsanti sono raggruppati con un gap 12px, e View Pricing li segue. La lunghezza è sulla sua linea per la larghezza. Come una riga, "Prenota un 30-Minute Live Demo" era 291px e cadde sotto Start Free a 1280, 1366 e 1440 di larghezza. Due linee lo rendono 196px, e la coppia si adatta alla colonna di copia da 1280 su e a 768 - Solo a 1024 (una colonna 361px) e sui telefoni lo impilano sotto. Misurato in Chrome a 390, 768, 1024, 1280, 1366, 1440 e 1920, senza overflow orizzontale a uno qualsiasi di loro. Visualizza Prezzo ora si avvolge alla propria fila a larghezze del computer portatile, e che ha esposto la sua border-bottom: TouchOptimized solleva il link a 44px alto una volta che la pagina è idle, così il confine sedeva 18px sotto il testo e leggeva come divisore. È un testo sottolinea ora, con il testo incentrato nella sua casella. Le chiavi andarono a kamo-traduzione-dizionario prima (7ed8a400).
· kamo-marketing
Una pagina per campagne e-mail illimitate e gocce, collegate da tutto il mondo appartiene
/email-marketing vende ciò che è stato spedito il 2026-09-16 (campagne Broadcast, gocce, domini di invio): illimitato e 100% gratuito con Business e Enterprise. La pagina è un elemento audace è il cursore ogni pagina dei prezzi di vendita e-mail si apre con ("Come molti contatti avete?"), tranne che spostandolo non cambia mai il disegno di legge. Non cita nessuno Il prezzo dell'altro, per 206f9f3: l'argomento è il modello di misura (contatto, invio di assegni, automazione tenuta per piani più alti), e l'unica figura sulla pagina è il nostro $0. Tutto i reclami sono stati controllati contro il prodotto: - 14 trigger di goccia, inviare le finestre nel fuso orario del contatto, e aprire / fare clic condizioni con skip o uscita (dripCatalog). - Cinque delle dieci ricette, disegnate con i loro veri trigger, tempi e uscite (dripRecipes.ts). - Un riscaldamento di 14 giorni con un freno di sicurezza su blocchi e rimbalzi (WarmupSettings, WarmupPlan). - Elenca le ragioni di igiene, rimbalzo / soppressione della denuncia, un clic annullare l'iscrizione e gli host SMTP personalizzati. - "Unlimited" non significa alcun cappello a base di piano: niente in contatori di EmailService un org, e la pagina dice che il riscaldamento e inviare finestre impostare il ritmo. Collegamenti in: il nav e il piè di pagina, una categoria /features, una /product card, un callout sotto il /pricing carte di piano, la roadmap (Bulk Email Campaigns si sposta al Launched), la mappa del sito e sitemap, e una nona carta nella homepage "Stop Paying for Nine Different Tools". Un server strip (EmailMarketingStrip) va sotto la matrice caratteristica di ogni confronto concorrente, sotto "Che cosa è effettivamente fornito" in ogni pagina del settore, su cinque termini glossari e su entrambe le risorse articoli. PLATFORM CAPABILITIES, che si chiama l'elenco di ciò che fornisce KamoCRM, ora elenca email marketing. Quattro pagine del settore hanno detto che le cose gocciole ora fanno sono state richieste: on-line, alberghi, fitness-studios ed ecommerce. La loro copia è corretta, mantenendo ciò che è ancora non costruito (registra-piattaforma e presenze trigger, temporizzazione basata sul soggiorno, segmentazione LTV, SMS) come richiesta, e ogni elemento si sposta a -r3 i18nKey. Verificato su una costruzione di produzione locale: ogni guardia, un percorso prerenderato, e un senza testa sonda (42 controlli) a 390, 1440 e 2560 larghi senza rotolo orizzontale, senza errori di console, senza tasti di messaggio grezzo, l'uso della tastiera del cursore e le schede di ricetta, e un link nel corpo di pagina di ogni pagina sopra. Il lato del dizionario è kamo-translation-dictionary 3ecaefa5.
· kamo-marketing
Giocare la bobina kamo14, e lasciare che sia sospeso
La bobina di ritaglio (nuovo scatto di chiusura, altrimenti frame-identical, stesso 66s il tempo di esecuzione e i tempi dei capitoli) è pubblicato sotto il suo nome. Il kamo13 la scala è servita immutabile e le sue varianti playlist e segmenti mantengono le loro URLs qualsiasi cosa il master's ?v= dice, quindi una sostituzione in-place non sarebbe mai raggiungere un visitatore di ritorno. L'apertura dell'eroe offriva riavvio e muto ma non c'era modo di fermare il film una volta Stava giocando. Un controllo di pausa / gioco ora guida la riga di controllo e toccando anche l'immagine lo subisce; riprendendo mantiene la posizione. Il controllo segue gli eventi di gioco/pausa dell'elemento, quindi rimane giusto quando la corsa termina o il browser interrompe la riproduzione stessa. Questo copre entrambe le pagine che incorporano apertura (home and the HighLevel fee page); /watch già si ferma attraverso la Comandi nativi.
· KlusterServices
Codificare la bobina kamo14
La bobina di marketing è stata ritagliata (nuovo logo di chiusura sparato) e caricata come pubblico/kamo14.mp4. Si ottiene un nuovo nome invece di sostituire kamo13 in atto perché la scala è servita immutabile: il maestro ?v= non raggiunge il varianti playlist o segmenti, che tengono i loro URL relativi. Il lavoro di codifica ora costruisce pubblico/hls/kamo14/ e kamo14-poster.*, e MediaMTX passa canale dal vivo la scala kamo14. Il nome del percorso live/kamo13 è invariato.
· kamo-internal
Windows che non si adatta il dock stand in righe dietro di esso
Una finestra di strumento che non si adatta alla riga anteriore ora sta in fila una striscia di titolo più alta per fila: la sua barra di titolo 42px e 10px di esposizione del corpo sopra la riga davanti, come le schede di uno stack di cartelle. Questo sostituisce il cascata, che ha posto ogni finestra sopra la fila e sepolto la maggior parte di loro. Le righe sono l'ordine finestra di primo-fit (toolDockPlacement, layoutDockStack): una finestra entra nella riga più anteriore con spazio per esso, quindi la fila anteriore non è mai lasciata metà vuota mentre una finestra che si adatta aspetta dietro. Ogni riga condivide un'altezza. Quando la striscia più posteriore passerebbe la parte superiore margine, ogni finestra cede il passo insieme, e l'altezza ritorna come le righe si svuotano. La riga, l'ascensore e l'altezza della striscia sono scritti su ogni finestra nello stesso relayout come dockX (dockRows), e non sono mai persistiti. Chi sta davanti è un riordino (toolDockTiers): - Un clic su una striscia negozi posti con la finestra anteriore il membro utilizzato più di recente. La ricezione è tracciata solo da gesti membri (dockMemberUse), perché il contatore z sale anche per incoming solleva. - Una finestra che il membro si apre, si ripristina dalla sua testa di esagonale, ripiega dal riquadro, banchine o rialzi da una notifica è seduto davanti, trading con la finestra anteriore usato LEAST di recente. Windows sollevato da messaggi in arrivo andare dove c'è spazio, quindi non prendono mai il posto di quello in uso. - Una goccia nel molo mantiene il posto in cui è stato abbandonato; usato finestre anteriori passo indietro per fare spazio. - Una finestra anteriore di chiusura o minimizzata è sostituita dalla finestra in piedi più vicino, e nient'altro si muove. - Una finestra più ampia che avanza gradini le finestre anteriori meno rinomate fino a che non si adatta. Sullo schermo (ToolWindowShell, ToolDock): - Una finestra dietro è clipped alla sua striscia, che è anche la sua zona di successo. La il corpo è inerte, in modo da non richiede messa a fuoco o tastiere e vernici senza barra di scorrimento. Dipinge sotto ogni finestra anteriore e non viene mai detto che è focalizzato. - Il titolo della striscia è un pulsante (portare avanti, tastiera raggiungibile), spettacoli il conteggio non letto, e si dims con ogni riga più indietro. - I suoi pulsanti stretti, minimizzano, massimizzano e galleggiano agiscono su di esso dove sta. Una resistenza che inizia su una striscia non è anche un clic, e nemmeno è un doppio clic. - Venendo in avanti, la finestra scende e si dispiega nella fessura mentre il commerciato si piega e si alza dietro. Entrambi corrono sulla curva 340ms del molo, poi una ombra fiorire e una luce spazzare segno l'arrivo. Hovering a strip sollevarlo e ne scopre un po' di più. Una finestra nata dietro sbircia da dietro la fila davanti; uno nato davanti si alza dal bordo inferiore, opaco. - Il movimento ridotto mantiene le file e la ombreggiatura e cade tutto il movimento. - Le cuciture ridimensionate sono solo anteriori. La cucitura di altezza si ferma dove la parte posteriore striscia incontra il margine superiore, e annuncia quel soffitto. Trovato sulla strada, e fisso: il molo ha reso le finestre in ordine negozio, quindi qualsiasi reorder (incluso drag-reorder, prima di questo cambiamento) ha reso la finestra di spostamento React elementi intorno al documento. Un elemento spostato perde lo stato DOM: un log pergamenato a 300 è tornato a 0, un elemento multimediale di gioco è sospeso, e la transizione portare una finestra alla sua nuova slot è caduto. ToolDock ora rende le finestre in ordine di creazione, che è sicuro perché ogni finestra è fissata livello dipinto. Verificato in Chrome reale con l'intero bacino su corpi di finestra acrobati: 64 controlli misurati. Coprono file, clip e test di successo, corpi inerti e barre di scorrimento, messa a fuoco, hover, entrambe le direzioni di swap, tastiera, pulsanti di striscia, altezza don-and-take, trascinare da una striscia, movimento ridotto, massimizzare e ripristinare, viewport re-flow, una goccia oltre la fila anteriore, il soffitto cucitura e conservato posizioni di scorrimento, più screencast in tempo reale di ogni transizione. Nuovi test unitari e fornitori coprono il layout, i riordini, l'impilamento, la shell e il dock.
· kamo-marketing
Sette set di link che corrispondono al nav, e le carriere vanno al sito di carriera
Il piè di pagina ora elenca Caratteristiche, Servizi, Prezzi, Azienda, Risorse, Soluzioni e Legali, in quell'ordine. Questo è il top nav's proprio cinque categorie più i due nidi sotto Risorse, e ogni set tiene il I link di nav sotto le etichette del nav. Le etichette provengono dal `nav` namespace, che viene tradotto in ogni locale, quindi questo non aggiunge copia. Le traduzioni del piè di pagina erano comunque una chiave identica per la chiave. Due link esistere solo qui sotto: Guarda il film sotto Caratteristiche, e il Cookie Impostazioni pulsante sotto Legal. Il prodotto era la vecchia voce ed è andato. I prezzi e le soluzioni ottengono set propri, e legale non avvolge più da solo su una seconda fila. Careers è https://careers.kamocrm.com/ ovunque esso appare: il nav's Menù aziendale (desktop e mobile), piè di pagina, carta di pagina aziendale e la mappa del sito. L'URL vive in app/lib/careers-site.ts. /careers è ora un reindirizzare permanente là, come /vs, quindi i risultati di ricerca, segnalibri e anche i link esterni raggiungono i ruoli aperti. La pagina di marketing che sostituisce ha detto che non c'erano aperture mentre il sito di carriera ne elenca uno. La pagina, il suo componente client, il layout e l'immagine OG vengono eliminati. Il percorso è fuori della mappa del sito (SITEMAP EXCLUDED, con la ragione), fuori dalla pagina-view contatore (UNCOUNTED STATIC ROUTES) e dalle pagine della caccia, perché stadio non può nascondersi su una pagina che reindirizza dal sito. La caccia sceglie pagine per indice modulo l'elenco, quindi le pagine di fase di oggi risaltano una volta su dispiegare, lo stesso di un rollover di giorno. Il link non è rehosted per inquilino il modo di registrare./login. I collegamenti sono. Solo www.kamocrm.com serve questo sito oggi. Cinque degli otto inquilini I domini che ho controllato non hanno una carriera. DNS, quindi carriere. essere un collegamento morto su di loro. Layout: il piè di pagina utilizza la larghezza piena invece della colonna 1280px, e la riga del marchio (logo e slogan, icone sociali e telefono) siede sopra il Set. I set sono 2 colonne su un telefono, 3 da sm, 4 da md e una riga di 7 da xl. Le donne e le etichette possono rompere dentro una parola. Una traduzione parola può essere più ampia di una colonna 149px (de "Dienstleistungen", "Anwendungsentwicklung"), e senza `max-w-full` un collegamento di blocco in linea cresce alla sua parola più lunga e spinge oltre la colonna. Verificato contro la pagina in esecuzione, non la fonte. Su /en/circa i sette le voci rendono in ordine, e ogni link si risolve al suo percorso /en tranne Careers, che è https://careers.kamocrm.com/. Fai clic su Carriere in il menu mobile e il piè di pagina del desktop Company a https://careers.kamocrm.com/. /en/careers e /de/careers rispondono 308 a e /careers passa attraverso /en /careers. Ho misurato ogni colonna a 390, 768, 1024, 1280, 1440, 1920 e 2560px in en, a 390, 768 e 1280 in de, ru e fr, e a 768 e 1280 in ta: nessun elemento trabocca la sua colonna e non esiste una pagina orizzontale. check-i18n-keys è stato testato contro la mutazione nuovo piè di pagina (una chiave nav falso fallisce). npm test, check-hunt, tsc e npm run build (con le sue guardie pre- e postbuild) sono pulite.
· kamo-internal
Campagne a goccia su /marketing/email — trigger, un costruttore visivo, persone e prestazioni
/marketing/email ottiene un interruttore Broadcast / Drips (?view=drips). La vista delle gocce elenca ogni goccia come una scheda con il suo trigger, la sua sequenza e conteggi dal vivo, KPI e schede di stato, ricerca e ordina, e inizia una nuovo gocciolare bianco o da dieci ricette (accoglienza nuovi lead, auguri di compleanno, incontrare il tuo nuovo agente, rivendicato introduzione al piombo, stato nurture, re-engage non-openers, link cliccato follow-up, membro del team e membro a bordo, e più). /marketing/email/drip è il costruttore: - Trigger: un nuovo vantaggio (a mano, importato, integrazioni; mercati, venditori, prodotti), uno stato o sub-status change from/to, un riassegnamento, un credito o free-for-all reclamo, compleanni e anniversari, un membro del team o un account membro creato, una email di campagna inviata / aperta / link cliccato, nessun impegno con una campagna dopo N giorni, terminando un'altra goccia, o persone aggiunte a mano. - Email su una tela: aggiungere, duplicare, trascinare per riordinare, aspettare prima di ogni (minuti a settimane, da email prima di esso), una finestra di invio per e-mail o per la flebo (giorni, ore, il contatto o tempo dell'organizzazione), e una condizione (solo se l'email precedente era o non è stata aperta o cliccata, altrimenti saltare o lasciare la flebo). - Impostazioni: Da e Rispondi-A esattamente come una campagna (i raccoglitori condivisi), il modello di firma, che può unirsi di nuovo (una volta, dopo aver lasciato con un cooldown, o riavviare), e quando la gente lascia (un cambiamento di stato, una riassegnazione, un clic). - Una striscia di prontezza, Salva (Ctrl/Cmd+S), Attiva con una scoppio, Pausa, Archivio, Duplicato, Elimina; non salvato le modifiche sono sorvegliate e il cambiamento di un collega arriva dal vivo. - Persone: chi è nella flebo, dove sono e quando la loro prossima email va, la timeline di ogni persona, aggiungere gente a mano, porta fuori qualcuno. Prestazioni: unito / in corso / finito / a sinistra, un imbuto e-mail, e attività dal vivo. Una nuova goccia, vuota o da una ricetta, non viene creata fino al suo primo salvataggio, come con una nuova campagna, così ogni e-mail viene memorizzata con il modello e il footer di conformità. Il modello e il piè di pagina dell'editor della campagna contesto spostato in usoCampaignEmailTemplate, condiviso con il costruttore rispetto identico prima e dopo). CountUp ora scrive un primo bersaglio di 0 invece di un trattino. EmailService serve /api/email/drips e frame "drip" sul tema delle campagne; l'inglese è nel dizionario.
· kamo-marketing
Ogni pagina mostra quante volte è stato visto
Un contatore di vista ora siede ai piedi di ogni pagina, nella fila inferiore del piè di pagina accanto Sitemap e Torna all'inizio: un occhio la cui iris è l'esagono del sito, e la figura su bobine di contachilometri nelle cifre del lettore (Bengali, Arabo, Il gruppo di Hindi). La prima volta che la pillola è sullo schermo i rulli girano in posto da sinistra, e quando questa visita era quella appena contato l'ultimo il rullo si accende da uno come +1 si alza da esso. Hover o la messa a fuoco della tastiera apre un scheda con la figura e che misura; un rubinetto lo apre a contatto; un clic gira di nuovo i rulli. movimento ridotto ottiene la figura e la carta, e Niente che viaggi. Costa pagina non caricare nulla: - Niente di una vista è letto mentre una pagina rende. Ogni percorso è ancora prerendered (check-static-routes: 247, sentinels intatto); l'HTML trasporta un segnaposto dimensionato, quindi lo swap non sposta la riga. - Il conteggio è un POST attraverso la coda inattivo condivisa, dopo che la pagina ha caricato, e conta e risponde nella stessa richiesta. Un lettore che lascia prima che lo slot idle contenga ancora: la navigazione di pagina e in-sito invia una beacon per una vista inesistente. - I rulli, il loro movimento e il loro foglio di stile sono un pezzo separato, preso solo quando il piè di pagina viene entro 800px dello schermo. - "Nessuna cifra" risponde a 200 punti di vista null, mai 404 o 503, quindi un KBService riavvio non può mettere un errore di console in ogni pagina. Dove la vista conta E' il momento giusto. un articolo di Knowledge-base conta sull'articolo, per guida, quindi la figura fa parte dei dati dell'articolo in KBService e lo segue attraverso rinominazioni e mosse; ogni altra pagina conta sul suo percorso senza locale, quindi /en/pricing e /fr/pricing condividono uno figura. Un percorso conta solo se questo sito lo servirà: il percorso esiste e suo slug nomi un vero concorrente, termine glossario, servizio, blog post, pubblicato articolo (sul suo percorso canonico) o voce changelog. Crawlers, link unfurler, audit e webdriver sono mostrati la figura senza aggiungerlo, e lo stesso browser che invia la stessa pagina due volte dentro cinque secondi è una vista. Ogni contatore parte da una cifra tra 312,384 e 1.200,384 quando la sua riga è creato, posizionato dalla priorità della mappa del sito della pagina in modo che la homepage inizi voce alta e un changelog basso. Le priorità in linea della sitemap si sono spostate in SITEMAP PRIORITY così entrambi leggono una lista; kb-sections.ts sostituisce le due copie della KB SECTIONS controllare il contatore avrebbe altrimenti fatto tre. La riga inferiore del piè di pagina impila il marchio di fabbrica sotto la linea di copyright: il contatore aggiunto, il tre lato a lato non si adatta più a 1440px. check-page-views.ts (prebuild e test) non riesce a costruire quando un percorso dinamico è non in route.ts, quando un layout o il Footer smette di montare il contatore, o quando altro che il suo gestore di rotta importa il risolutore. Proved by cancellazione una voce di percorso, il Footer monta e inventa una voce stante: ogni fallisce. Bisogno KBService 167981e (i endpoint /internal/page-views) e dizionario's footer.pageViews* chiavi (5909948c); fino a KBService è in diretta pillola semplicemente non appare.
· KBService
Contare le viste della pagina del sito di marketing, sull'articolo o sulla pagina
KBService ora risponde al banco di vista mostra kamo-marketing ai piedi del ogni pagina. Due endpoint, entrambi {"views": n} con la vista appena contato incluso: # POST # {importanza, conteggio} POST /internal/page-views/pages {percorso, importanza, conteggio} Un articolo della base di conoscenza conta sull'articolo stesso (KB ARTICLE VIEWS, di uid), così il suo conteggio lo segue attraverso rinominazioni e si muove in /kb; la guida deve nome di un articolo pubblicato, pubblico, con la stessa regola l'articolo pubblico usano gli endpoint. Ogni altra pagina conta sul suo percorso sotto il prefisso locale (MARKETING PAGE VIEWS). Ogni scrittura è un upsert nativo con la lettura totale di nuovo nella stessa transazione, retried su un conflitto di Yugabyte. Sotto /internal, non /api/kb/public: APIService inoltra tutti /api/kb/** da api.kamocrm.com e la catena di sicurezza di questo servizio permette tutto, così un contare endpoint ci sarebbe un loop curl pubblico lontano da qualsiasi figura. The nuovo InternalAuthFilter richiede X-Internal-Auth (mlos-internal-auth, ora montato facoltativamente) sull'intero prefisso /internale, deciso sul percorso di servlet decodificato, e risponde 503 piuttosto che aprirsi quando il segreto manca. The il gestore del sito di marketing è l'unico chiamante e prende ogni decisione su ciò che conta: solo pagine reali, i crawler hanno mostrato la figura senza aggiungere a esso, una ripetizione da un browser dentro cinque secondi contati una volta. La figura di partenza di un contatore viene disegnata una volta, quando la sua riga è creata, tra 312,384 e 1.200,384. Il chiamante passa un'importanza da 0 a 1 (la pagina è sitemap priorità) e PageViewSeed pone l'estrazione in una band intorno a esso, così il homepage inizia alta e una voce changelog basso; gli estremi atterrare esattamente su la gamma è terminata senza bloccaggio. Il seme viene conservato a parte il contato vista, così il traffico reale rimane leggibile. Le righe appaiono su prima richiesta; Count=false crea uno senza contare, per i crawler e per la semina. create page views.sql è il DDL, applicato a mano al database live prima questo spingere e abbinare ciò che Hibernate genera per la biblioteca condivisa entità (controllate su 6.2 e 6.5). Il ConfigMap guadagna interna.auth.secret, e così la copia del repo. 23 nuovi test: la gamma di semi e bande, percorsi canonici e coperchi, che dichiarazione una vista corre, e gli endpoint attraverso il filtro reale (non segreto, segreto sbagliato, segreto non impostato, percorso cattivo, articolo sconosciuto). Rimuovere il filtro prefisso controllare e invertire la bandiera di conteggio ogni voltare loro rosso.
· kamo-shared-library
Contatori di pagina per il sito di marketing
Due tavoli dietro la vista conta kamo-marketing ora mostra ai piedi del ogni pagina, scritta da KBService's /internal/page-views endpoints. Kb ArticleView (KB ARTICLE VIEWS) conta le opinioni di un articolo della base di conoscenza l'ARTICOLO, con il suo uid, quindi il conte è parte dell'articolo e segue quando viene rinominato o spostato in /kb. È una tavola propria piuttosto che una colonna su KB ARTICLES: la riga dell'articolo viene salvata integralmente da JPA, quindi un contatore su sarebbe letto quando un editor ha aperto l'articolo e scritto indietro quando essi salvato, scartando ogni vista in mezzo. Le cascate chiave straniere nelle database, perché KbArticolo non mappa questa riga e un Hibernate cancella di un articolo altrimenti fallire su di esso. MarketingPageView (MARKETING PAGE VIEWS) conta ogni altra pagina sul suo percorso sotto il prefisso locale, quindi /en/pricing e /fr/pricing condividono un conteggio. Entrambi mantenere SEED COUNT, la figura di partenza di una riga è creata con, a parte VIEW COUNT, le opinioni effettivamente contati; la pagina mostra la loro somma e reale il traffico rimane leggibile dal tavolo. I repository espongono solo le tre affermazioni di cui una vista ha bisogno: un nativo upsert che conta, uno che semi senza contare, e il totale, leggere dopo la scrittura nella stessa transazione. Nessun salvataggio(): un contatore caricato, incrementato e salvato indietro perde la vista corrente. Controllato offline: una fabbrica di sessione si costruisce su tutte le undici entità KB più questi su Hibernate 6.2.13 (KBService, e gli altri servizi Boot 3.1) e 6.5.3 (Boot 3.3), e lo script di schema che scrive corrisponde al DDL applicato da mano, compreso ON DELETE CASCADE. ddl-auto non è ovunque ma inizializzatore, quindi nessun altro servizio tocca i tavoli.
· kamo-internal
Il logo Lifestyle, un quarto logo per marca e il marchio di sfondo predefinito
Comportamento & Etichettatura guadagna una slot Logo stile di vita accanto al logo completo, il logo semplice e l'icona della scheda, in entrambe le file dell'azienda e del software ( white-label). Richiede immagini e vettori pixel allo stesso modo: un SVG o un raster è mantenuto esattamente come scelto, un EPS/AI/PDF viene convertito sul modo in (nessun browser può disegnare uno), e un raster offre "Convert to vettoriale", che apre il condiviso ImageToSVGConverter solo quando il Il membro chiede. Come l'icona della scheda, ogni slot ha un interruttore (un upload lo accende, anche lato server) e un didascalia che dice che cosa una superficie di stile di vita effettivamente disegnare, dalla forma non asfaltata. Il logo lifestyle si predefinisce il logo completo quando non impostato. Per ogni marca, risolvereLogoVariant in tema/brand.ts è la catena: il logo del software lifestyle quando in uso, altrimenti il logo completo del software quando è sovrascrive l'azienda, altrimenti il logo aziendale stile di vita quando in uso, altrimenti il logo completo dell'azienda. lifestyleLogo.ts afferma la stessa catena di didascalie; un test funziona sia su tutti i 32 stati formali. Background Watermark offre lo stile di vita prima, ed è il default: i valori nulli e sconosciuti risolvono a LIFESTYLE, che disegna il logo completo fino a quando non esiste un logo di stile di vita, quindi non cambia la filigrana di org finché non ne carica uno. Ogni luogo che dipinge la filigrana (BackgroundWatermark, Backdrop, l'errore e pagine non fondate) ora passa attraverso la risoluzioneWatermarkVariant / watermarkLogoFile. - /network/create: un gruppo di logo Lifestyle con la stessa assunzione, caricato dopo l'org esiste come type=lifestyle; il raccoglitore di filigrana offre prima Lifestyle e la forma di default ad esso. - Mago di configurazione: Logos ottiene l'azienda e le slot di stile di vita white-label (mostrando quello dal vivo quando in uso), Backgrounds offre la filigrana Lifestyle, e orgDetails risolve il default allo stesso modo. - Lo schema della rotta org legge il bgWatermark come una stringa normale. È .parse()s, così il vecchio ["NONE","FULL","SIMPLE"] enum avrebbe gettato su tutto il record di org per una fila LIFESTYLE; Organization.fromJSON risolve invece valori sconosciuti. I quattro campi di vita cavalcano il record di org attraverso OrgContext e DynamicMetaLoader mantiene Da config.json. Ha bisogno di kamo-shared-library f22a867d e tipi di caricamento del servizio di sicurezza (pushed first), e il chiavi del dizionario (pushed first, in ogni locale).
· SecurityService
Il logo Lifestyle carica, le chiavi config.json e la filigrana LIFESTYLE
Il logo lifestyle è un quarto logo per marca (company e white-label), la versione decorativa sfondo watermark ora disegna per impostazione predefinita. Il suo fallback è il logo completo. - upload-logo prende type=lifestyle e type=lifestyle-software. Il file mantiene la sua reale estensione (Le opere d'arte fotografiche sono benvenute, tracciare un raster è la scelta del membro al momento del caricamento) sotto La colonna ext lo registra e il caricamento cambia il logo, sul contratto delle icone della scheda. Un raster è anche specchiato sotto il nome .svg come stand-in, come il pieno loghi, quindi una superficie che non ha letto l'estensione mostra ancora l'opera d'arte dell'org. - config.json nomi logoLifestyleExt / logoLifestyleSoftwareExt solo mentre quel logo è in uso (caricato e acceso); assente significa che il logo completo si trova in. - Il payload di creazione mantiene bgWatermark LIFESTYLE invece di lasciarlo a null. - aggiunge le quattro colonne nullabili. Applicato a mano sul vivo cluster il 2026-09-16, prima che il cambiamento di entità di kamo-shared-library sia stato spinto.
· kamo-shared-library
Le colonne del logo di stile di vita e LIFESTYLE come impostazione predefinita del watermark
Il logo lifestyle è un quarto pezzo di arte di marca per marca, accanto al logo completo, il semplice logo e l'icona della scheda: la versione decorativa del filigrana di sfondo disegna per impostazione predefinita. È sagomato esattamente come la coppia dell'icona della scheda: logo lifestyle ext (e il suo software gemello) è scritto solo da Sicurezza endpoint di upload del servizio dal file memorizzato, e raddoppia come il marcatore "uno esiste"; logo lifestyle enabled è l'interruttore accanto a esso. PUT /org/{id} può patchare i due interruttori, mai il Prolunghe. bg watermark ora documenta LIFESTYLE, che ogni cliente risolve null a. È il logo completo per come finchè un org non ha il logo di stile di vita in uso, quindi niente nessuno vede cambiamenti fino a quando uno è caricato. Le quattro colonne provengono da... live cluster prima di questa spinta: qualsiasi servizio Java costruito dopo di esso li SELECTs su ogni org letto.
· EmailService
Campagne a goccia
Una flebo è una sequenza automatizzata di e-mail che una persona entra quando qualcosa succede: un piombo arriva (a mano, importato, o da un'integrazione), un piombo stato o cambiamenti sub-status, un vantaggio viene riassegnato o rivendicato con un credito, un il compleanno o l'anniversario di piombo viene in giro, un membro della squadra o un account membro è creato, viene inviata una e-mail di campagna, aperta, cliccata o non risponde, qualcuno termina un altro flebo, o un membro li aggiunge a mano. Ogni e-mail ha una propria attendere, inviare la finestra (nel org o il fuso orario del contatto) e condizione su come l'email precedente ha fatto. Invio. Un'e-mail a goccia è in coda su una campagna di edizione nascosta per (passo, ciclo) Percio' e' esattamente come una campagna. mail: opt-out e controlli di idoneità, host del releaser, warm-up e invio finestra, DKIM, tracciamento, cancellazione, rimbalzi e la scatola di uscita in scena. Le edizioni sono lasciato fuori dalla lista delle campagne, l'istantanea, il widget di casa e il progresso e cornici di fidanzamento, e gli endpoint della campagna rispondono 404 per uno. Motore (drip/DripEngine): ogni 5s sul proprio filo sotto locazione email-drip-engine, drena e-mail drip triggers (exits first, then iscrizioni), spazza compleanni e anniversari una volta per org-giorno locale, e si muove ogni due persona su: aspetta contare da quando l'email precedente era in realtà inviato, un rimbalzo o opt-out termina la corsa, una persona viene letta di nuovo prima di ogni e-mail (i gettoni di emergenza: primo name, agente name, mercato e il resto), e un run finito lascia che le gocce incatenate comincino. Re-entry è ancora una volta, dopo la finitura (con un cooldown) o riavviare; le regole di uscita portano le persone fuori su un cambiamento di stato, un riassegnazione o un clic su un link a goccia. API: /api/email/drips (list, opzioni, CRUD, attivare, pausa, archivio, unarchive, duplicate, persone, iscrizione manuale, rimozione, timeline, attività), VIEW BULK EMAIL per leggere e MANAGE BULK EMAIL per cambiare. Live: tipo "drip" cornici sul tema delle campagne, carbonati al secondo. La campagna invia, apre e collega i clic (ora con l'URL) sono consegnati a Kamo-shared-library's DripTriggerRecorder. Tavole e colonne in edizione prima di questo impegno.
· SecurityService
Un piombo importato viene registrato come importato
LeadImportController ha creato ogni riga con la creazione di due argomentiLead, quindi un storia di lead ha detto API sorgente con nessuno che agisce, esattamente come uno inviato attraverso l'API di assunzione del fornitore. Nulla potrebbe dire un'importazione da un'integrazione, e le campagne di goccia che iniziano su "un nuovo vantaggio arriva" offrono la scelta tra porta aggiunti a mano, importati o da integrazioni. Le righe sono ora create con IMPORT sorgente. Costruito contro il kamo-shared-library b5b56d6d, la cui storia di piombo porta anche nuove piste, cambiamenti di stato, riassegnazioni, crediti di credito e nuovi account membri al motore a goccia.
· kamo-internal
Il Reply-To dell'editor campagna è una scelta — NoReply, Member's E-mail o Custom, NoReply per impostazione predefinita
Il libero testo Reply-To under the From diventa CampaignReplyToPicker, tre scelte che ogni dire dove risponde terreno: - NoReply (default): NoReply@θthe campagna's From domain>, ad esempio NoReply@hello.kamocrm.com, "che non riceve email" - E-mail del membro: l'editing del membro, indicato per indirizzo. Una campagna le cui risposte vanno già ad un compagno di squadra mostrare il compagno di squadra fino a quando qualcuno sceglie di nuovo l'opzione. Un membro senza e-mail sul loro profilo non può sceglierlo. - Personalizzato: una scatola controllata come viene digitata, il modo in cui EmailService lo controlla su salvare. La logica è ************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************ indirizzo, NoReply quando no), scegliere, mostrare l'indirizzo e costruire i campi di salvataggio (replyTo, rispostaToMode, rispostaToMemberId). Un indirizzo personalizzato incompiuto detiene Salva e appare nella lista di controllo invio. L'anteprima mostra il Rispondi-Al destinatario otterrà.
· kamo-shared-library
La campagna Drip innesca, registrata dove i lead e i membri cambiano
Le campagne di goccia iniziano quando qualcosa accade nel CRM, così i luoghi che cambiamento porta e i membri ora consegnano quegli eventi al motore a goccia di EmailService: - LeadHistoryService: un piombo creato (con come è arrivato: a mano, importato, o da un'integrazione o da un modulo), uno stato o un cambiamento sub-status con entrambi lati, e un riassegnamento da un membro della squadra all'altro. - No, no. un vantaggio piscina sostenuto da spendere un credito (pagato o gratuito per tutti), che non registra alcuna storia di piombo del proprio. - MemberService: un account membro o membro del team creato. Lo specchio della piattaforma riga non è un nuovo membro del provider org e non inizia nulla. DripTriggerRecorder li scrive a... propulsori. Scrive solo per un org le cui gocce ACTIVE ascoltano per quel tipo (regola di trigger o di uscita, leggere al massimo ogni 30s), mani dopo la causa transazione si impegna, e scrive sul proprio thread e connessione, quindi un lead scrivere non può mai fallire o tornare indietro a causa di una goccia. Un piombo creato Void (un test piombo o un duplicato) non è qualcuno da accogliere. EmailCampaignEntity maps drip id, drip step id e drip cycle: un'email a goccia invia attraverso una campagna di edizione nascosta per (passo, ciclo), quindi mantiene ogni inviare una garanzia ha una campagna. Le colonne e le tabelle sono state applicate a mano prima di questo impegno (emailservice)
· kamo-marketing
Aperto su mensile, e vendere i termini 1 e 3 anni come bloccaggio nella tariffa di oggi
La maggior parte degli acquirenti vengono a confrontare ciò che avrebbero pagato senza impegno, quindi HOME TERM è ora mensile. /pricing, il piano homepage striscia, /calcolatore e il marchio del prodotto ancora aperto sullo stesso termine insieme. I termini più lunghi sono quello che la ferrovia vende da lì: un basso tasso per-seduta, bloccato in Il prezzo di oggi per l'intero termine. - Il sopracciglio della ferrovia legge "Lock in tasso di oggi per 1 o 3 anni", e un frase sotto la guida dice che cosa fa il termine selezionato: mensile non ha impegno; annuale e 3 anni detengono il prezzo di oggi per 12 mesi o 3 anni, anche se i nostri prezzi aumentano. Tutte e tre le note condividono una cella di rete, quindi scegliere un termine non sposta mai le carte sotto, in qualsiasi lingua (assicurato in en, de e ja). Entrambe le linee sono bilanciate, quindi un telefono non blocca mai uno parola. - Le linee di termine carta e calcolatrice conducono con "Rate bloccato per N mesi". - Sul mensile la linea salvata della carta scende "sotto il termine", che su un solo- termine mese ha ripetuto solo la cifra mensile accanto a esso. - La striscia di homepage ha ceduto il suo prezzo "per posto su un termine di { mesi}-anno", che il mensile avrebbe letto come termine 0,083-anno; ora dice fatturato mensile, con il blocco di 1 e 3 anni accanto a esso. - La descrizione della ricerca di /pricing nomina il prezzo di tre anni come lock-in, e i punti di pagina scaduti-offerta alla stessa cosa. i check-product-offers hanno indicato il default di tre anni ($49, 32.83). Ora è perno mensile ($69, 46.23), quindi un cambiamento silenzioso di default non riesce ancora a costruire. La copia è in kamo-traduzione-dizionario, scritto a mano in tutti i 20 tradotto locales. La stessa spinta ripristina i 340 valori della sincronizzazione di oggi, che aveva fallito la copia di questo repo per ogni costruzione da allora.
· EmailService
Le risposte di una campagna vanno a NoReply, l'e-mail del membro, o un indirizzo personalizzato — NoReply per impostazione predefinita
Il Reply-To dell'editor diventa tre scelte (CampaignReplyTo), conservate nella colonna di risposta to esistente. Niente DDL. - NO REPLY (colonna vuota, l'impostazione predefinita): Rispondi-A: NoReply@ come ogni altro indirizzo NoReply. Il destinatario vede prima di scrivere che nessuno lo legge, e postfix-k3m1-inbound rifiuta ciò che viene inviato lì. - MEMBER (membro: <id>): l'e-mail del membro che l'ha scelto, ha cercato quando ogni messaggio è composto (CampaignReplyToMembers, tenuto cinque minuti), quindi un indirizzo cambiato è seguito. Un membro senza e-mail cade torna a NoReply piuttosto che nominare un indirizzo che nessuno riceve. - CUSTOM (un indirizzo): controllato su salvataggio, nudo e con un dominio punteggiato; qualsiasi altra cosa è un 400 che dice perché. Salva portare rispostaToMode e rispondereToMemberId. Le risposte possono andare al salvataggio dei membri, o rimanere con il membro già scelto quando un compagno di squadra salva, ma mai a un altro membro scelto da id. Un editor prima dell'invio della scelta solo un indirizzo: uno è DOGANA, nessuno è NO REPLY. Il modello di lettura della campagna aggiunge rispostaToMode e rispostaToMemberId, e risponderePer diventare l'indirizzo che l'editor mostra (l'indirizzo personalizzato o l'e-mail del membro).
· kamo-internal
Host E-Mail in uscita mostra i relè di massa come server di ricezione li vedono
Una scheda "Bulk relays" sopra gli host della piattaforma: il relè condiviso che ogni organizzazione invia domini lascia attraverso (contact.kamocrm.com, 47.181.8.86) e l'organizzazione della piattaforma (hello.kamocrm.com, 47.181.8.87). - Fatti: da dove parte la posta di ciascun relè, dove EmailService la raggiunge nel cluster, e per la condivisione relay se il suo accesso è configurato e quanti domini verificati inviano attraverso di esso. - Controlli, ogni diritto, diverso, mancante o non risposto: l'indirizzo del nome (A), la sua politica del mittente (SPF), dove i rimbalzi vanno (MX, che per il relè condiviso deve tornare al suo indirizzo), il rovescio dell'indirizzo DNS (PTR) e la chiave di firma del relè della piattaforma (DKIM). Un record che non è giusto mostra cosa dovrebbe essere accanto che DNS ha. - Il DNS inverso dice che è impostato dal provider Internet che possiede l'indirizzo, quindi nessuno lo cerca al DNS ospite. Una ricerca che non ha avuto risposta è "Impossibile controllare", mai "sbagliato". - Leggi da GET ******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** Non è mai inquinato, una revisione fallita mantiene ciò che è sullo schermo, e senza MANAGE OUTBOUND EMAIL HOSTS non rende nulla.
· KlusterServices
I rimbalzi per l'invio di domini delle organizzazioni raggiungono EmailService tramite postfix-k3m1-inbound
Una campagna inviata attraverso il relè condiviso ha il suo Da presso il dominio di invio dell'organizzazione come la sua busta mittente, e quel dominio è un CNAME da contattare. kamocrm.com, il cui MX è 47.181.8.86 — questo baccello. Quindi... server di ricezione che ha accettato un messaggio e non poteva consegnarlo dopotutto scrive il suo rapporto di consegna qui, e fino ad ora è stato rifiutato. - I domini di invio provengono da EmailService (relay-senders?format=domini: VERIFIED and FAILING), letti a inizio e ogni minuto. Solo i nomi host semplici raggiungono mai un tavolo, e un fetch senza risposta mantiene l'ultima lista. - Ogni dominio prende solo il mittente nullo, cioè rimbalzi e server controllando che l'indirizzo esiste. Chiunque altri riceve 550 "Questo indirizzo invia e-mail ma non lo riceve". - Ciò che viene preso va a un tubo `bounces` (il comando della bobina del postfix principale, con la propria bobina) e un butta-mail sidecar, il principale postfix's unsubscribe mail.py con INCLUDE RAW, lo posta a E' il momento giusto. - stack.loans, mail.stack.loans e contact.kamocrm.com funzionano esattamente come prima, e niente qui invia a internet. Testato in una capsula di scarto con lo stesso script: null sender 250, a person 550, postmaster@ e abuse@ 250, altri e simili domini 554, un DSN spooled con il suo token e la coda vuota, un cambio di elenco applicato tra un minuto, e una fetch senza risposta che tiene l'ultima lista.
· EmailService
I rimbalzi a org che inviano domini tornano a casa, i test vengono firmati e il DNS dei relè viene letto
Async rimbalza. Il mittente di buste di una campagna è il suo dal dominio di invio dell'organizzazione, il cui MX (attraverso il CNAME per contattare.kamocrm.com) è l'indirizzo del relè condiviso. postfix-k3m1-inbound prenderà I rapporti di consegna sono lì e li spediscono al POST. la forma del reclamo: - DeliveryStatusReport legge un vero rapporto RFC 3464 (message/delivery-status) e i gettoni nei messaggio restituito. Un rimbalzo di prosa non è mai indovinato. - BounceMailService registra un guasto permanente (Azione: fallita, 5.x.x) come BOUNCED sulla riga del destinatario nomi token, attraverso il percorso di consegna-evento i relè già utilizzano. Un ritardo, una risposta automatica o un rapporto con nessun token non cambia nulla, e un rapporto di spam-denuncia viene consegnato all'assunzione del reclamo. - relay-senders?format=domains elenca i domini di invio VERIFIED e FAILING che l'inbound accetta i rapporti per. Test invia da Impostazioni → Email → Inviare sono DKIM-signed con la chiave di dominio From, esattamente come campagna mail è (DkimSigning, condiviso con CampaignRecipientSender), quindi un test attraverso il relè condiviso mostra cosa un La campagna lo farà. Il DNS dei relè. G E' il momento giusto. (MANAGE OUTBOUND EMAIL HOSTS) legge, per ogni relè, il suo nome è A record e SPF, il suo MX (per il relè condiviso, di nuovo al proprio indirizzo), il invertire il DNS del suo indirizzo e la chiave DKIM del relay della piattaforma. Il risolutore DNS ottiene le ricerche PTR.
· KlusterServices
Postmaster@ e abuse@contact.kamocrm.com raggiungere KamoCRM — il nome del relè condiviso riceve i suoi assegni
contact.kamocrm.com è il nome comune di org relay (47.181.8.86 PTR, MX contact.kamocrm.com), e il suo MX è 47.181.8.86 → k3m1, dove risposte postfix-k3m1-inbound. I fornitori di mailbox autorizzano chi esegue un IP tramite postmaster@/abuse@ del suo dominio PTR, quindi quelli ora atterrare: postmaster@ nella casella postale, abuse@ e fbl@ all'indirizzo abuse@hello.kamocrm.com, che il principale postfix consegna alla denuncia di EmailService aspirazione con una copia per postmaster. Riavvio del postfix-k3m1-inbound approvato da Sage.
· kamo-internal
Bulk Email ottiene Domain Setup e sub-tabs, /marketing/email spiega cosa manca, le campagne ottenere un da picker
Impostazioni → Email → Bulk Email è ora quattro sub-tabs in ?sub=: Configurazione di dominio · Invio · Opt Out · Liberabilità. Il membro atterra su Domain Setup fino a quando un dominio di invio viene verificato e su Invia dopo. Fino ad allora le altre sotto-tappe mostrano una serratura e rimangono concentrabili; aprirne una spiega cosa è per, quanto il miglior dominio è arrivato, e link indietro. Opt Out e Deliverability mantengono la loro destra (MANAGE EMAIL OPT OUTS o il proprietario) e muoversi invariato; il vecchio ?tab=opt-out e ?tab=deliverability link reindirizzare al loro sub-tab, e la voce del menu e la carta di atterraggio seguire. Ogni sub-tab mette le proprie parole nella guida di aiuto. Domain Setup è costruito per qualcuno che non ha mai modificato DNS: un eroe con i tre passaggi e il uno che sono su (o "E-mail di pubblicazione è pronta per inviare"), una carta per dominio con punti di record live e "Controllato 8 secondi fa · controllo automatico", e un flusso aggiuntivo in linea (il dominio org preriempita e legata su blur con il cambiamento spiegato, un clic invia nomi, un'anteprima dal vivo, e una ricerca debounced che dice perché un nome non può essere utilizzato prima di Continuare). Configurazione di un dominio (?domain=) mostra i passi del provider DNS rilevato, ogni record in parole semplici con pulsanti di copia e il suo stato live ("vediamo X, dovrebbe essere Y", la correzione per ogni codice di suggerimento), Copia tutto come istruzioni, l'alternativa no-CNAME dietro una divulgazione, Controlla ora, Rimuovere (rifiutato davanti mentre in uso, con la ragione del server mostrata se si rifiuta ancora), e un ridotto-motion-aware momento di successo che porta a "Choose your From address". Tutto legge GET ********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** Vivo sopra, ********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** intero stato, e una lettura fallita o rifiutata è un errore o una nota di accesso, mai una lista vuota. /marketing/email: senza campagne e nessun dominio verificato lo stato vuoto è un spiegatore (perché, tre passi, "Set up my domain", o chi può finire senza MANAGE EMAIL SETTINGS); una campagna lista ottiene un banner compatto che assorbe la linea no-hosts, e un dominio FAILING è chiamato in rosso con un link alla sua configurazione. Niente mostra durante il caricamento o su una lettura fallita. Il banner del mittente link NO SENDING DOMAIN e DA DOMAIN NOT VERIFIED alla configurazione di dominio. The campagna editor's From è un raccoglitore: il mittente predefinito, o un indirizzo su un dominio verificato (parte locale, dominio, dal nome), salvato come daEmail/danome; un salvato da un dominio non verificato è avvertito con un link alla sua configurazione. ImpostazioniMenuTabCoverage impara &sub= e controlla ogni sub-tab collegato esiste.
· EmailService
La posta della campagna è firmata come, inviata da, e indirizzata dal suo dominio di invio verificato
Una campagna può nominare il proprio Da un dominio verificato; altrimenti va come il mittente di rinfuse di org — che deve essere su un dominio verificato (saveSender rifiuta qualsiasi altra cosa). CampaignFrom sceglie il relè da tale dominio, perché SPF è deciso dall'indirizzo un relè parte da: un dominio verificato di org solo attraverso il relè org condiviso (47.181.8.86), KamoCRM hello.kamocrm.com solo attraverso il relè della piattaforma (47.181.8.87), qualsiasi altro ospite per entrambi, e un non verificato dal nulla. Il releaser prende il dovuto destinatario prima, poi un ospite pronto la sua campagna può usare; una campagna con nessuno aspetta mentre l'org altre campagne. Mail come dominio verificato di un org è DKIM-firmato dopo la sua ultima salvaCambia, con la sessione esclusa convertirlo a 8bit in arrivo. Nuovi blocchi di invio NO SENDING DOMAIN e DA DOMAIN NOT VERIFIED. I resoconti di consegna contano contro il riscaldamento del relè della campagna da inviarlo attraverso. La campagna di invio di KamoCRM non è influenzata: noreply@hello.kamocrm.com è gestita dalla piattaforma, quindi continua partendo attraverso .87, e il relè condiviso è spento nella rotazione di KamoCRM.
· EmailService
API di Domain Setup, la mappa del mittente del relè condiviso e una spazzata che conferma i record dal vivo
E' il momento giusto. GET la scheda (VIEW BULK EMAIL), GET cercare il modulo aggiuntivo, POST aggiungere, POST {id}/check, DELETE (MANAGE BULK EMAIL); ogni risposta di scrittura con l'intera scheda e un rifiuto nomina il suo campo. Non e' vero. dà postfix-orgs il suo dominio verificato mappa. La panoramica di massa guadagna domini {pronto, verificato, in attesa, mancante} per il cancello. InviareDomainSweep rilegge DNS sulla cadenza (15s mentre viene impostato un dominio) sotto un contratto di locazione, su un thread del proprio: ogni attività @Scheduled qui condivide il filo di programmazione singolo di primavera con il releaser che invia la posta di campagna ogni secondo, e in attesa su nameserver ci starebbe inviando.
· EmailService
Invio di domini — aggiungere uno, leggere il suo record DNS per record, verificarlo, sapere cosa può fare un indirizzo
Un dominio di invio (news.acme.com) viene mantenuto nel blob del provider di rinfuse crittografato dell'org con la sua chiave DKIM. SendingDomainChecker legge ciò che i ricevitori vedranno — SPF valutato per l'indirizzo del relè condiviso, la nostra chiave al suo selettore, una politica DMARC al dominio o un genitore — per i record raccomandati (un CNAME a contact.kamocrm.com, il DKIM TXT, DMARC) e l'alternativa SPF TXT + MX, e nomina i soliti errori: un nome di zona raddoppiata, un Cloudflare CNAME, un nome che ha già dei record, un CNAME altrove, due SPF registra, troppe ricerche, un cortometraggio incollato chiave, una politica malformata o ereditata, e 'il tuo record è La parte di KamoCRM non e' ancora viva. InviareDomainService aggiunge (pulire un URL o un indirizzo incollato, rifiutare kamocrm.com agli inquilini), controlli, rimuove (non mentre è il mittente predefinito o una campagna attiva), e si muove lo stato: PENDING/FAILING → VERIFIED su un pass; VERIFIED → FAILING solo dopo due fallimenti sei ore di distanza; un DNS cambia Niente. Risponde al percorso di invio — ORG VERIFIED (con la chiave di firma), PLATFORM MANAGED (hello.kamocrm.com, solo per KamoCRM) o UNVERIFIED — e costruisce la mappa comune del mittente di verificata domini. I cambiamenti pubblicano..

Il tuo universo ti sta aspettando.
Aggiungi i prodotti quando sei pronto: nessuna migrazione, nessun nuovo login, nessuna richiesta di pagamento.
Gratis per sempre — nessuna carta di credito richiesta