Changelog
Cosa c'è di nuovo.
Ogni miglioramento alla piattaforma, come si spedisce.
· EmailService
Un giorno di riscaldamento nulla è stato inviato non conta
Un giorno di riscaldamento usato per essere la N-th 24 ore dall'inizio, se o non tutto è andato, così accendendo il riscaldamento nei giorni prima della prima campagna silenziosamente trascorse i suoi giorni bassi. Un giorno che finisce senza tentativi ora ripetuti: e ogni giorno successivo scorrere in avanti per tutti i giorni che è andato inutilizzato, qualsiasi numero in una volta, mentre i giorni che sono stati utilizzati mantenere il loro Finestre e storia. La composizione si muove con loro, e lo stato di riscaldamento riferisce idleDaysSkipped. La corsa è stabilita prima che il percorso di invio contenga qualcosa, quindi un invio è mai contato contro un giorno che sta per essere ripetuto; e quando i contatori non possono essere letti il run è lasciato come sta piuttosto che chiusura un giorno sugli zeri.
· kamo-internal
Una campagna che il backend non può inviare dice perché e come risolverlo
EmailService ora mette in pausa una campagna invece di fallire i suoi destinatari uno di uno quando non può inviarlo: il suo Da è fuori dal relè della piattaforma dominio, o non c'è alcun mittente di massa affatto. Si rifiuta di inviare, programmare e riprendere mentre la causa sta, e lo riferisce sulla campagna come InviaBlocker. - l'editor e la visualizzazione del progresso mostrano un banner con la causa, la stessa frase del server e la correzione come due passi: cambiare il Da (o utilizzare il provider predefinito) e riprendere, o aprire il mittente di massa impostazioni e curriculum. Il curriculum rimane disabilitato mentre la bozza continua ha la causa - Riprendere ora salva la bozza prima, quindi un corretto Da raggiunge il backend invece della campagna che viene ripresa come memorizzato e rifiutato di nuovo - l'invio, l'orario o il curriculum rifiutati sono visualizzati in posizione con messaggio del server, non solo in un brindisi, e la campagna è riprodotta così il suo stato e il blocco sono attuali - la griglia delle campagne segna una campagna bloccata accanto al suo stato, con la ragione su Hover - gli errori della campagna API preferiscono il messaggio umano su un nudo codice macchina, e portare lo stato e il codice
· kamo-internal
Warm-up dice che i giorni inattivo non contano e disegna le date che slitta
Un giorno di riscaldamento in cui nulla viene inviato non conta più: le diapositive di corsa in avanti e il giorno ripete quando si inviano i curriculum, che fa commutazione riscaldamento prima della prima campagna sicura. Il pannello ora dice così, accanto l'interruttore e di nuovo nelle note idle e non-started. Quando i giorni sono saltati, l'anello del giorno dice quanti, con il il programma è andato avanti da molti. Ogni tegola di programma mostra la sua data, e i nomi di tooltip del grafico, leggere da ogni giorno come il backend ha ora piuttosto che contare dal primo, quindi le date slid sono le disegnati. Su /marketing/email, un riscaldamento idle con nulla in attesa legge come "on, inizia con la tua prossima campagna" piuttosto che rivendicare la consegna ritmo.
· EmailService
Campagna posta il relè piattaforma si rifiuta subito fallimenti invece di essere retried
Il relè invia solo come proprio dominio e risponde a qualsiasi altra cosa con un 451, quindi una campagna la cui Da è su un altro dominio usato per riprovare ogni destinatario tre volte, ogni riprovare un tentativo di riscaldamento, prima che qualcuno abbia imparato La Dava era sbagliata. Quando il fornitore dell'org è l'host e il porto del relè e il dominio di From non è il dominio di invio del relè, il destinatario è ora contrassegnato FAILED con la correzione nel suo errore: no SMTP, no retry, no soppressione, e nulla ha contato contro il riscaldamento o la sua slot.
· EmailService
Il nuovo warm-up ospita un org's campagna mail e lo rilascia al ritmo di riscaldamento
Mentre il riscaldamento di un org è acceso, il speditore lascia le sue campagne da solo e un releaser invia loro un messaggio alla volta, il primo dovuto prima attraverso le campagne dell'org, mai oltre il cappello orario di una campagna e mai oltre il cappello di riscaldamento della giornata. Funziona ogni secondo sotto locazione propria del mittente, così i due non possono mai inviare lo stesso destinatario da diversi baccelli. Le impostazioni, i giorni decisi e i freni di sicurezza live nel fornitore di massa blob crittografato; i contatori vivono in Redis e sono ricostruiti da file destinatari se perso. GET, PUT e resetta gli endpoint sotto /api/email/bulk-provider/warmup segnalare lo stato, l'orario, la coda e la salute. Entrambi i percorsi ora inviano attraverso un metodo per-recipiente, che sostiene fila SENDING prima che il relè lo veda. I contatori della campagna sono scritti senza salvare la campagna, la spazzata interrotta inclusa; salvare una volta ha messo una campagna pausa mid-batch di nuovo a SENDING.
· kamo-internal
Recipienti righe portano contattato, e già-sent righe mantenere il loro segno accanto allo stato
Il destinatario di EmailService DTO ora segnala se la campagna ha già e-mail ogni indirizzo. Il pastore lo trasporta, insieme con ultimoError, e riempie la campagna se il DTO lascia fuori. Una riga già contatta non è mai tenuta dal warm-up e mai e-mailed di nuovo, così la griglia di progresso non gli dà più la nota di riscaldamento, e quando il suo ultimo risultato è tutt'altro che Sent il chip di stato mantiene un piccolo Marchio "già inviato". Nella fase dei destinatari, una riga contrassegnata "Already inviato" mostra anche come quell'invio finito quando non è semplicemente uscito.
· kamo-internal
La campagna Dal campo dice quando il relè di massa lo rifiuti
La campagna è propria Dal campo, predefinito dal fornitore di massa, avverte quando l'indirizzo è fuori dal dominio del fornitore, come posta che può atterrare Spam. Sul relè della piattaforma che non è un rischio ma una certezza: EmailService fallisce ogni destinatario di una campagna il cui dominio From non è il dominio di invio del relè ("Il relè di massa invia solo come @domain"). Così quando il fornitore di massa trasporta un relè della piattaforma, un off-domain From è un errore: il campo è segnato, un avviso dice cosa accadrà e offre il provider predefinito quando questo è sul dominio del relè, e preflight blocchi invio fino a quando non è fissato. Organizzazioni sul proprio SMTP provider ancora ottenere il più morbido avviso di spam.
· EmailService
Ogni messaggio di campagna nomina la sua riga di destinatario in X-Kamo-Ref
Il relè di massa registra l'intestazione contro la sua coda id e lo spoglia prima consegna, così i risultati di consegna possono essere abbinati alla riga destinataria esatta. I test del compositore indicano anche il resto di ciò che lascia un messaggio di campagna con: l'indirizzo e il nome della campagna, ciascuno cadendo alla rinfusa fornitore; un nome di visualizzazione che non può avviare un'intestazione propria; annullare la casella di posta sul dominio da cui proviene la posta; e Rispondi a solo quando la campagna imposta uno.
· EmailService
I rapporti di consegna del relè rimbalzano, bloccano e contano la posta della campagna dopo il hand-off
# POST # prende i rapporti del relè della piattaforma di quello che è diventato di ogni messaggio, abbinato alla riga del destinatario dal Intestazione X-Kamo-Ref o, in mancanza, l'ultima riga inviata all'indirizzo gli ultimi sette giorni. Un rimbalzo duro (5.1.x, 5.2.1, 5.4.4) segna la riga BOUNCED e sopprime l'indirizzo. Un blocco (5.7.x) lo segna FAILED ma mantiene l'indirizzo, dal momento che il rifiuto era del mittente, non la casella di posta. Qualsiasi altra cosa permanente è un semplice fallimento. La ragione di un deferral è mantenuta sulla fila fino alla consegna. Solo le righe ancora SENT sono spostate, e il riscaldamento conta ogni rapporto una volta, contro il giorno in cui il messaggio è stato inviato, in modo che il reporter può rivendere un lotto in sicurezza.
· EmailService
Il programma di riscaldamento, le regole di pacing e salute
Un nuovo IP di invio è rampato oltre quattordici giorni di riscaldamento. I giorni 1-7 seguono programma fisso per ritmo (conservativo, equilibrato, aggressivo); dal giorno 8 ogni giorno cresce con la percentuale del ritmo solo se il giorno prima era sano con i suoi tassi di rimbalzo, blocco e deferral, e altrimenti detiene. Ogni giorno è deciso una volta e tenuto con la ragione. I messaggi sono accelerati da quello che rimane del giorno, con uno jitter medio e la rottura occasionale, mai più veloce di quattro volte il tasso costante e mai così tardi che il resto della giornata di bilancio non si adatta più. The freno di sicurezza ferma un giorno che i ricevitori stanno bloccando o rimbalzando.
· kamo-internal
Avvertenza banner su /marketing/email
Mentre il nuovo warm-up ospite è pacing, le campagne vanno molto più lentamente che le loro impostazioni dicono, e niente sulla campagna ha detto perché. The lo spazio di lavoro delle campagne e la vista del progresso di una campagna ora portano un sottile banner con il giorno, gli invii di oggi contro il cappello, il prossimo invio e che cosa sta aspettando, collegandosi alle impostazioni di riscaldamento, e un destinatario in coda spiega che è tenuto. Il banner è nascosto mentre il riscaldamento è spento o completo, e ogni volta che il il riscaldamento non può essere letto.
· kamo-internal
Client del mittente di massa digitato con errori di campo e gli endpoint di riscaldamento
Il cliente sapeva uno stato di provider chiamato PENDING che il backend non invia, quindi un mittente che è stato salvato ma non ancora testato è caduto attraverso a "Non configurato". Ora legge PENDING SETUP (accetta ancora PENDING) e normalizza l'intero stato in un unico posto: il sommario di connessione, quando la password è stata modificata, il relè della piattaforma e se il membro può gestiscilo. I guasti ritornano come BulkEmailApiError, portando lo stato HTTP e, per un 400, il campo forma il backend chiamato, in modo che il modulo può mettere il messaggio su quel campo e un 403 può essere mostrato come uno stato di accesso piuttosto che un errore. I 204 vuoti sono tollerati, e un salvataggio o riscaldamento scrivere che risponde con un chiaro riconoscimento è seguito da un GET invece di essere adottato come lo stato, che è ciò che ha svuotato il modulo dopo ogni salvataggio. Aggiunge le chiamate di riscaldamento: GET e PUT /bulk-provider/warmup e POST /bulk-provider/warmup/reset.
· kamo-internal
Regola di connessione, preset e modello di vista di riscaldamento dietro il mittente di massa
I pezzi puri i nuovi schermi sono costruiti, ciascuno con test: - la regola di connessione port-first del backend, specchiata in modo che la forma possa dire come KamoCRM si collegherà prima che tutto venga salvato: 465 è implicito TLS con il sign-in, 587 è STARTTLS con il sign-in tutto ciò che la sicurezza dice, qualsiasi altro porto con STARTTLS aggiornamenti e segni dentro, e qualsiasi altra cosa è chiarotesto senza segno - preset con un clic per il relè della piattaforma e i fornitori comuni - la forma come valore: cosa è sporco, il corpo di salvataggio e la convalida che richiede solo un nome utente e una password quando il segnale di connessione in - prontezza di installazione e le fasi di un test - la rampa di riscaldamento, conto alla rovescia, inviare il ritmo e i numeri di tabella di pianificazione utilizzareBulkWarmup sonda il riscaldamento ogni 15 secondi mentre la scheda è visibile, si ferma mentre è nascosto, si ferma su un 403, e si applica scrive ottimisticamente con rollback.
· kamo-internal
Scheda del mittente di rinfusa con un nuovo pannello di riscaldamento host
Il Bulk Email Sender scheda è ricostruito da una forma lunga in una serie di carte su una bozza dello stato salvato: - una testata con lo stato live (un mittente salvato ma non testato ora legge "Needs a test"), che invia come, la connessione memorizzata in una riga e quando è stato testato - un binario di prontezza a quattro passi: connessione, mittente, test superato, riscaldamento - la connessione, con preset, un controllo None / STARTTLS / SSL-TLS, un suggerimento quando una porta ben nota è digitata, e un account live di come KamoCRM si connetterà, avvertendo quando la porta supera la scelto Sicurezza - sign-in che è interattivo solo quando il collegamento entra e riga di password che dice se uno viene salvato e quando, con Sostituire e Rimuovere in scena fino a salvare - l'identità del mittente con un'anteprima della casella di posta, avvertendo quando la piattaforma relay avrebbe rifiutato il dominio From - una barra di salvataggio appiccicosa, errori dal backend posto sul loro campo, e lo stato salvato preso dalla risposta del salvataggio - un test in linea invia che disegna dove il messaggio è arrivato, marcando il stadio che ha rifiutato Il pannello New Host Warm Up si trova di seguito: on/off, pace, il giorno corrente come un Anello da quattordici segmenti, oggi manda contro il berretto con un live conto alla rovescia per il prossimo invio, totali, salute di consegna e quanto di esso i rapporti di relè, il programma di 14 giorni con la decisione di ogni giorno e un cappello contro il grafico reale, oggi invia oraria e le lacune irregolari tra recenti invii, la coda, il freno di sicurezza con Resume ora, e Reset. Un membro senza il diritto di cambiare il mittente ottiene una scheda di sola lettura, e uno ha rifiutato la lettura ottiene uno stato di accesso piuttosto che un errore.
· EmailService
Una campagna non può essere inviata o programmata senza un mittente di posta elettronica di massa
Il mittente accettava una simile campagna e poi saltava su ogni Tick, lascialo a SENDING con nient'altro che una linea di log. InviareOra e programma ora rifiutarlo con un messaggio che dice dove impostare il mittente. Un host configurato e la porta è sufficiente; non deve essere stato verificato.
· EmailService
Le impostazioni del fornitore api risposte con lo stato salvato e nomina il campo che rifiuta
PUT ora restituisce lo stato completo delle impostazioni invece di {successo: true}, che svuotato il modulo dopo ogni salvataggio. I campi sono convalidati lato server e rifiutato come 400 {error, field}; un login è richiesto solo quando la connessione in realtà firmerà. Una password vuota mantiene quella memorizzata, chiaroPassword rimuove, e passwordUpdatedAt record quando uno è stato impostato. Lo stato va torna a PENDING SETUP solo quando un campo di consegna-rilevante è cambiato. Ogni scrittura al blob crittografato ora passa attraverso uno bloccato lettura-modifica-scrittura che mantiene le chiavi non possiede, perché il blob è anche per portare il riscaldamento. Lo stato mostra come EmailService collegare, e la piattaforma org è mostrato le impostazioni del relè interno. Il test invia dice dove ha fallito (collegamento, TLS, login, mittente, destinatario, dati) con una breve correzione per ciascuno.
· kamo-internal
Anteprima l'email come inviato, un Personalizzato / No Template pubblico, e un reale Dal campo
Anteprima: una finestra di dialogo che rende la propria buildBodyHtml() output - il stringa Salva i negozi e il mittente invia - quindi l'intestazione del pubblico, firma e piè di pagina e il piè di conformità sono tutti lì e non può deriva dalla vera e-mail. Vista desktop e mobile, "preview as" qualsiasi destinatario o campione, unisci i token riempiti il modo in cui EmailService li riempie, una busta in stile casella di posta, e una cornice sabbiata. Raggiungibile dalla composizione passo, la barra dei piedi, e la vista del progresso di una campagna inviata. Udienza: "Custom / No Template" non avvolge nulla intorno al corpo. È salvato come scopo COMPANY con firmaScope NONE (che il server memorizza e mai legge), e le campagne griglia lo etichetta come Custom. Da: il proprio Da campi di nome e indirizzo, predefiniti dal email di massa provider e modificabile per campagna, con un reset al default e un avviso quando l'indirizzo è fuori dal dominio del fornitore. Questo sostituisce il mittente derivato dal pubblico e dalla radio senza risposta. Recipienti: gli indirizzi della campagna hanno già e-mail sono contrassegnati "Already inviato", con un avviso che non saranno mai più e-mail da esso; EmailService ora riferisce questo per destinatario.
· KlusterServices
Iscriviti hello.kamocrm.com con la propria chiave cliente, dal dominio From
La posta della campagna lascia come hello.kamocrm.com attraverso postfix-bulk. Lo prende propria chiave DKIM (cliente selezionato, pubblicato come cliente. domainkey.hello), e use esld = falso così un ciao. messaggio kamocrm.com è firmato d=hello piuttosto che tornare alla chiave di posta del genitore, che non riesce a Allineamento DKIM (adkim=s) il dominio pubblica.
· KlusterServices
Postfix-bulk, un secondo relè di uscita per la posta di campagna, con i risultati di consegna alimentato indietro
La posta della campagna ora lascia attraverso il proprio relè su k3m1 (egress 47.181.8.87) Salve. kamocrm.com, quindi le lamentele su bulk mail non toccare mai reputazione di mail.kamocrm.com (47.181.8.84). - Relè di testo sul porto 25 solo per EmailService (NetworkPolicy); esso accetta solo @hello.kamocrm.com mittenti e rifiuta qualsiasi altra cosa con un 4xx, mai a 5xx, perché il cacciatore di campagna sopprime su qualsiasi 5xx. - Una guardia d'ingresso tiene la consegna in uscita a meno che l'indirizzo pubblico del pod è 47.181.8.87, così la massa non può mai tranquillamente lasciare come un altro IP. - Un sidecar di eventi di consegna legge il registro di posta e segnala ogni campagna messaggio consegnato / differito / rimbalzato / risultato scaduto a EmailService, unito all'intestazione X-Kamo-Ref, che viene spogliato prima della consegna. Applicato a mano per ora: deploy-services.yml applica i file mail/ per nome e non li elenca ancora.
· EmailService
Una campagna e-mail un indirizzo al massimo una volta, mai
Gli indirizzi sono abbinati ristretto e caso insensibile, e una fila la campagna ha consegnato al relè (sent, in volo, rimbalzato, fallito, o retried) è ora il suo record permanente di quell'indirizzo: mai cancellato, reset o ri-queued. - materializzareI destinatari utilizzati per eliminare ogni riga e ricostruire l'elenco su ogni salvare, quindi la modifica di una campagna interrotta ha messo gli indirizzi già e-mail indietro nel coda. Ora mantiene la storia, aggiorna le righe non ancora contattate al posto, rimuove solo le righe non registrate che hanno lasciato l'elenco, e non re-adds mai un affrontare la campagna ha contattato, tuttavia molte volte è aggiunto. - Il mittente dichiara una fila SENDING prima che la relè la veda. Un incidente tra il relè che accetta un messaggio e la riga che viene contrassegnata SENT usato per lasciare QUEUED e inviarlo di nuovo; ora rimane SENDING e una spazzata chiude come FAILED senza riprovare. - Un destinatario aggiunto mentre una campagna è stata sospesa non ha mai avuto un tempo di rilascio, quindi non è mai stato inviato e la campagna non ha mai finito. I tempi di rilascio ora vanno a qualsiasi riga in coda che manca. - Un indice unico di avvio su (campaign id, inferiore (trim(email)))) supporta la regola al tavolo. L'elenco destinatario endpoint ora restituisce il nome di ogni riga, unisci i valori, sorgente e se è stato contattato, quindi riaprire e salvare una bozza non più cancella la personalizzazione. L'indirizzo Dal rientra al fornitore di massa, e il nome Dal è effettivamente inviato (è stato memorizzato e caduto).
· kamo-internal
NoReply Outbound, un controllo di sola dio della posta inviata come la piattaforma NoReply indirizzo
Una terza sezione sotto Mail, mostrata solo ai membri ammissibili, si apre /messages/outbound/noreply: ogni messaggio EmailService trasmesso al relay come la piattaforma NoReply indirizzo, primo nuovo, con ricerca, un Filtro in ingresso/Failed e cassetto che mostra il messaggio completo. La pagina gira via chiunque non sia dio-eleggibile. Questa è la cortesia, non la serratura: i dati provengono da EmailService, che rifiuta qualsiasi sessione senza GD.
· EmailService
Un registro di ogni messaggio inviato come la piattaforma NoReply indirizzo, leggibile solo da Dio
Registrato in EmailSmtpService a un posto la posta raggiunge il relè, e deciso dall'indirizzo From, quindi modelli transazionali, campagne e le azioni dell'articolo sono tutte coperte senza optare in. I rifiuti sono registrati con la ragione del relè e ancora rilanciare. La scrittura scorre da sola transazione e non getta mai: una riga di audit fallita non può fallire o tornare indietro un invio. GET /api/email/noreply-outbound elenca il registro principale (ricerca, filtro di stato, paging, corpi esclusi); /{id} restituisce un messaggio con il suo corpo. Entrambi richiedere GD sulla sessione e nient'altro: il registro copre ogni organizzazione, quindi nessun diritto org-scoped può aprirlo. La tabella viene creata all'avvio da NoReplyOutboundSchema, come il L'articolo-share del libro principale è.
· kamo-internal
Un link di tracciamento può atterrare sul white-label CRM tasse articolo
Aggiunge **************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** /marketing/tracking, con la sua icona. Il percorso è privo di locale come i suoi fratelli: il sito di marketing 308s a ************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** hop, lo stesso di /pricing (controllato contro il sito live). L'etichetta e il suggerimento della riga sono in kamo-translation-dictionary 7a6fd4e2.
· kamo-marketing
Lasciate che un lettore invii l'articolo della seduta a qualcuno che conoscono
Un modulo "passa" ai piedi del... raggiunto da un chip in cima e una linea dopo le sette domande. I nomi dei lettori fino a tre persone e e-mail ciascuno di loro l'articolo una volta, con il nome del lettore su di esso; possono anche aprirlo nel proprio client di posta o copiare il link invece. POST /api/share-article lo porta prima EmailService lo vede: stesso-origine solo, un *** server-side verificato contro il *** servizio (l'altro forme qui inoltrare il carico di pagamento senza che nessuno lo controlli), e auto-send solo per i visitatori dell'UE/SEE, del Regno Unito e della Svizzera. Si inoltra un corpo costruito da campi delimitati, con l'indirizzo del visitatore il nostro ingresso registrato, a EmailService's /api/internal/article-share, che applica i limiti e la lista di opt-out della piattaforma org. Deployment legge INTERNAL AUTH SECRET dal mlos-internal-auth esistente segreto (opzionale, quindi il sito inizia ancora senza di esso) e guadagni EMAIL SERVICE URL e CAPCHA SERVICE URL.
· EmailService
Invia un articolo a qualcuno, come la piattaforma org, con un opt-out funzionante
Un visitatore sul sito di marketing può inviare l'articolo della seduta fino a tre persone. POST /api/internal/article-share (X-Internal-Auth, come ogni altro /api / endpoint interno) invia ciascuno di loro una e-mail come il livello superiore organizzazione, da "occusender> via KamoCRM" con Reply-To the sender. Riutilizza ciò che esiste invece di aggiungerne una seconda copia: - Opt-outs live in email suppressions, keyed to the platform org's id, so an opt-out qui non tocca mai una lista di org ospitato e una lista di org mai blocca questo. Il link è un token firmato (orgId|email, HMAC) che il esistente UnsubscribeController e la pagina ora accettano accanto alla campagna gettoni, con lo stesso RFC 8058 List-Unsubscribe intestazioni campagne inviare. - La consegna passa attraverso... DeliveryOptions (vedi nome e intestazioni extra) quindi Da, la decisione SPF e il ritorno a relè soggiorno deciso in un posto. Una lettera costruita dal chiamante non ha riga di modello, quindi il contatore di utilizzo è saltato per esso. Limiti, contati da un registro di sicurezza. creato all'avvio) così ogni pod concorda: tre persone a richiesta, preset note solo, 10 al giorno per mittente e per indirizzo del visitatore, 500 al giorno, una e-mail per indirizzo ogni 90 giorni, mai ad un indirizzo soppresso. Inoltre imposta bulk-email.unsubscribe-base-url nella configurazione prod. Il codice predefinito è vuoto, che invia la posta della campagna senza il suo link di cancellazione.
· kamo-marketing
Mettere ogni pagina in /sitemap.xml stesso, e elencare le pagine solo nelle lingue che hanno
/sitemap.xml era un indice, quindi l'apertura ha mostrato 79 nomi di file piuttosto che le pagine del sito. - /sitemap.xml è ora un <urlset> con ogni pagina: 18.700 di loro, ciascuno a il suo indirizzo inglese, con ogni versione della lingua in cui esiste hreflang alternativo. Questo è all'interno del protocollo 50,000-URL / 50 MB limite per un singolo file; oltre esso, il file è respinto intero. Entrate nel registro entrare senza i loro sostituti, che metterebbe il file vicino a 60 MB. Ogni la pagina di entrata dichiara le sue lingue. - I file per lingua, dove ogni versione linguistica è un URL proprio, passare a /sitemap-index.xml. robots.txt nomi entrambi i file. - Una pagina la cui copia ha il suo namespace del messaggio è elencato, e nomi si alterna, solo nei locali in cui il namespace è realmente tradotto in: almeno il 90% delle sue corde presenti, meno del 30% identico al Inglese (app/lib/message-locales.ts). Il nuovo ****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** traduzioni ancora. Erano in tutti i 21 locali, 20 di loro la pagina inglese sotto un altro prefisso. - Le pagine di raccolta leggono la stessa misura live per `collezioni` al posto di la COLLECTION CONTENT LOCALES. copia raccolta swahili ha stato tradotto da quella lista è stato scritto, così 132 pagine swahili reali indicavano il loro canonico in inglese.
· kamo-internal
Seleziona un dipartimento controlla i membri che mostra
Seleziona usato per cambiare l'intero elenco in modalità selezionata con nulla controllare, e leggere "Done" fino a premere di nuovo. Ora controlla ogni membro del dipartimento. mostra (la ricerca e la striscia All / Online / Offline decidere chi) e lascia andare di chiunque controllato fuori. Si legge sempre Seleziona, ed è disabilitato per quel reparto da solo mentre la selezione è esattamente quelle righe; deselezionare una, controllare qualcuno altrove, o un filtro che mostra diverso le righe lo riportano indietro. La fila dello spettatore è lasciata fuori: una chat di gruppo o una riunione che iniziano li include comunque, e una riunione altrimenti inviare loro una chat invitare a sé. Disabili con aria-disabled in modo che un utente della tastiera si concentri all'interno della trappola del pannello, e dimmerso con opacità perché il colore di .operator-label è !importante sotto il vento di coda `importante: vero`.
· kamo-marketing
Annuncio di servizio pubblico su chi mantiene le tasse del sedile del software
Una nuova pagina. spiegare, per non tecnico proprietari, come risolte piattaforme white-label funzionano: una licenza agenzia piana, per-seat tasse l'agenzia mantiene, e l'uso misurato fatturato in cima. Finisce con le domande chiedere prima di firmare e come KamoCRM differisce. Articolo finanziato dal server con Articolo e BreadcrumbList JSON-LD, il suo OG carta, un calcolatore della sede-fee e CTA per la registrazione gratuita, demo, contatto e telefono. Collegato dal menu Risorse e hub, dal banner del sito come PSA al a sinistra del registro di cambiamento, e elencato nella mappa del sito.
· kamo-marketing
Elenca ogni pagina in ogni lingua in cui esiste, e fai accettare ogni pagina
/sitemap.xml elencato ogni pagina una volta, come il suo URL inglese. Il 17.843 changelog le voci non avevano alcuna lingua alternativa affatto, e ogni pagina del proprio hreflang chiamato tutti i 21 locali, sia che la pagina esistesse in loro. - Ogni versione linguistica è ora un <url> del proprio, portando la pagina piena, cluster hreflang reciproco e x-default: la forma raccomandata di Google, e quello che ottiene una pagina localizzata trovato senza aspettare un crawler seguire un link alternativo ad esso. - Una versione è elencata solo dove è propria canonica: SITE LOCALES per pagine scritte a mano, post del blog e pagine della lista dei changelog; COLLECTION CONTENT LOCALES per confronti, soluzioni, integrazioni e glossario; e per gli articoli KB e le voci del changelog, i locali KBService e SecurityService riferiscono una traduzione reale per. Un'eco dell'inglese non conta. Elencando una versione che canonica a inglese invia un URL che non può essere indicizzato. - Ogni pagina nomina esattamente lo stesso set. localeAlternates() prende il locali una pagina esiste in, e un locale al di fuori di loro canonici per l'inglese con noindex. Pagine di raccolta in locali senza copia di raccolta utilizzate per essere noindex mentre ogni altra pagina li ha ancora chiamati come alterni. - L'indice è diviso per sezione (pagine, collezioni, ogni sezione KB, pagina elenco changelog, voci changelog), ogni file con il suo ultimo e bene all'interno dei limiti 50.000-URL / 50 MB. I file Changelog sono più vecchi prima, quindi un file completo non cambia mai più. - Le pagine della lista dei Changelog 2..N sono elencate; ognuna è una sua canonica. - /sitemap.json è un documento in streaming che tiene ogni pagina e ogni /api/sitemap serve lo stesso documento. - Una fonte che non può essere letta risponde 503 piuttosto che una mappa parziale del sito.
· KBService
Dì in che luoghi ogni articolo pubblico è realmente tradotto in
La sitemap del sito di marketing ora elenca ogni versione linguistica di ogni help-center, documentazione e API-reference articolo, e ogni pagina articolo nomi gli altri come il suo hreflang alterna. Né poteva dire una traduzione da un echo: TranslateService risponde indicazioni che non ha alcun fornitore per la fonte inglese, quindi le righe sw e ta ripetono il titolo e il corpo inglese parola per parola (assicurato 2026-09-11). Naming quelli che puntano motori di ricerca a pagine che canonica di nuovo in inglese. I nodi di albero e le singole letture ora portano `locali`: i locali il cui titolo o corpo differisce dall'articolo inglese. Il corpo da solo è sufficiente - un arabo riga può mantenere il titolo inglese su un corpo tradotto. Computed in one query per richiesta di Kb TranslationLocalesService, che legge attraverso il EntityManager quindi non è necessario un rilascio condiviso-library.

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