Changelog
Cosa c'è di nuovo.
Ogni miglioramento alla piattaforma, come si spedisce.
· kamo-internal
Crea una sessione per chat di gruppo aperte da memberIds
ChatTool ignorato props.memberIds: un gruppo aperto è arrivato con un vuoto userId e nessuna sessioneGuid, quindi il 1:1 creareSession rilasciato presto e il La finestra non ha mai avuto una sessione. Ora quando membroIds è presente ChatTool risolve la sessione tramite POST /sessions/chat/find-or-create { memberIds } (il percorso iniziale di MemberIds dello stesso punto finale utilizza; il backend aggiunge il chiamante stesso). L'elenco dei membri è contrassegnato come una stringa ordinata stabile quindi l'effetto non si riaccende sull'identità dell'array, e la guida risolta scorre attraverso il writeback esistente in modo che la finestra di gruppo è interfacciata GUID per Dedup.
· APIService
Passaggio pubblico per email OAuth provider callback
Avanti GET ****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** (strips auth, no redirect successivo), che rispecchia il callback RingCentral OAuth. Questo è l'URI di reindirizzamento pubblico fisso registrato con Microsoft/Google/Zoho.
· EmailService
Ridirezione pubblica fissa + gateway-forwards
Piattaforma email OAuth (Microsoft 365 / Google / Zoho) non aveva pubblico valido redirect URI: il reindirizzamento è derivato dall'host richiesta, che in prod è l'indirizzo di servizio cluster-internal, e l'unico gestore di chiamata era Solo POST. Aggiungere un URI rediretto fisso e pubblicamente accessibile utilizzato per entrambi la richiesta di autorizzazione e lo scambio di token, e un callback GET pubblico che il provider reindirizza il browser a (org viene trasportato in stato, quindi no la sessione è richiesta). Restituisce una pagina HTML auto-closing.
· kamo-internal
Gate lead contact-info per incarico + nuovi diritti sulla privacy
Specchio i tre nuovi diritti CRM. Sulla pagina di dettaglio di piombo, maschera / bloccare il Contatti primari, indirizzi postali e indirizzi di proprietà per i lead non assegnato al membro corrente a meno che non abbiano la vista/modifica diritti di contatto (e, per indizi non firmati, VIEW UNASSIGNED LEADS); campo di stato è sempre visibile. Accendere il cancello di assegnamento-pane ASSIGN LEADS. Sulla griglia /leads, cancelli l'opzione filtro Unassigned di VIEW UNASSIGNED LEADS, rilascia i filtri e-mail/street ora svuotati il valore della colonna e-mail, e mostrare lo stato di proprietà-vs-mailing tramite un flip.
· SecurityService
Enforce lead contact-info privacy rights
ottenereAllLeads ora restituisce il magra LeadListDTO e nasconde piste senza firma dai membri senza VIEW UNASSIGNED LEADS. getLeadById maschere contatto info (stato conservato) per cavi non assegnati al chiamante a meno che essi tenere VIEW LEAD CONTACT INFO OTHERs, e 403s non firmati conduce per quelli mancante VIEW UNASSIGNED LEADS. updateLead gates manuale riassegnamento (ASSIGN LEADS) e modifiche contact-info Non e' vero. contare i campi di proprietà ipotecario solo quando effettivamente cambiato. Dio bypass.
· kamo-shared-library
Lead contact-info privacy rights + elenco magra DTO
Aggiungi tre diritti CRM (161-163): "Assegnato ad altri: View/Edit Lead Contatto Info" e "Vista Piombo Unassigned". Aggiungi LeadListDTO - un magra proiezione per la griglia /leads senza informazioni di contatto tranne il campo di stato. Aggiunta al telefono. indirizzo e-mail/mailing+property (stato conservato) per i lettori gated.
· kamo-register
Invia il tipo di iscrizione dai percorsi /member e /team
/team signups creare un TEAM MEMBER (creato PROSPECT, in attesa di attivazione di amministrazione); /member le iscrizioni creano un MEMBER. RegisterFlow prende un membroType prop fornito da ogni percorso avvolgere e includerlo nel corpo della richiesta del registro; il backend crea l'abbinamento tipo di appartenenza.
· SecurityService
/team crea un TEAM MEMBER (PROSPECT), /member crea un MEMBER
La registrazione pubblica ora onora il membroTipo il sito del registro invia (da /membro vs /team path): /team crea un TEAM MEMBER — come PROSPECT, quindi un amministratore deve attivarli prima di poter accedere (per il cancello di login) — e /member crea una base MEMBER. Applicato sia per i nuovi utenti che per i percorsi di utilizzo esistenti tramite creareRegistrationMembership(). The lo specchio di sicurezzaProvider è invariato (sempre una base MEMBER, e saltato quando l'org è il suo proprio fornitore di sicurezza). In precedenza ogni registrazione ha creato una base MEMBER, quindi un /team richiedente è atterrato come un MEMBER e poi non poteva essere aggiunto come membro del team tramite l'UI (409 già-a-member).
· SecurityService
Esponere l'estensione del telefono di lavoro del team-membro in team-membri-appaltatori
Il filtro agente /leads ha bisogno dell'estensione del telefono di lavoro per le opzioni di etichetta come "Nome (ext 8080)". L'estensione esiste già su TeamMember (getPhoneWorkExtension) ma non è stato serializzato — solo il numero nudo è stato.
· kamo-internal
Il popup di supporto di richiesta mostra argomenti condivisi da genitore-org
Indicare il tema della creazione del biglietto a discesa al nuovo /api/support/topics/ endpoint disponibile (own-org + argomenti condivisi dai genitori) così gli utenti di baby-org possono contattare il supporto del loro genitore org tramite il argomento configurato del genitore.
· MediaService
Superficie genitore-org argomenti condivisi in richiesta-support popup
Gli utenti di Child-org non potevano vedere gli argomenti di supporto condivisi del loro genitore org (assignToOwnOrg=false) quando si richiede il supporto, perché il popup solo ha recuperato i propri argomenti. Aggiungi GET /api/support/topics/disponibile (proprio + parent-shared, no MANAGE SUPPORT gate) e fissare ottenereParentOrgTopics da usare il corretto AssignToOwnOrgFalse query. Filare contro un genitore condiviso argomento già indirizza il biglietto al genitore org tramite creareTicket.
· SecurityService
I nuovi figli ereditano la sicurezza del genitoreProvider
Quando si crea un org bambino da kamo-internal, impostare il nuovo org di sicurezzaProvider a il genitore org's securityProvider (il org è creato sotto) invece di lasciarlo di default per auto. Abbina il backup dei dati che indica ogni org esistente securityProvider al top-level KamoCRM org, così l'iscrizione mirroring si impegna per tutti gli org e i loro figli futuri.
· kamo-login
Mostra l'avviso collegato all'account su ?linked=1
Quando si registra un account esistente a un nuovo org, si reindirizza qui con ?linked=1. Mostra "Hai già un account Kamo - abbiamo aggiunto questa organizzazione a Ecco. Accedi con la password esistente." e precarica l'e-mail. Specchi l'esistente ?email verified handling.
· kamo-register
Mantenere la risposta collegata all'account per gli utenti esistenti
Quando l'email inserita appartiene già ad un account ACTIVE, il backend collega questo og a esso e ritorna ACCOUNT LINKED. Collegare direttamente gli utenti all'accesso (?linked=1) al posto del flusso di e-mail-verificazione — essi entrano con il loro esistente password. I nuovi utenti e le iscrizioni per il riconoscimento dei placeholder mantengono il percorso di e-mail di verifica.
· kamo-internal
Wire up membro/team-member creare + Prospect-gate UI
- Aggiungere le rotte di proxy POST mancanti /api/security/members/creare e /create-team-member (questo 405'd prima, quindi la creazione non ha mai raggiunto il backend). Stato + JSON corpo passare attraverso così il modulo 409 "già un membro" riutilizzare la gestione funziona. - MemberCreateForm: fissare il campo Status Membership in cui si sovrappone l'etichetta galleggiante il segnaposto "Seleziona uno stato" (etichetta pista + notched OutlinedInput), e aggiungere un notare che solo i membri del team "Active" possono accedere.
· SecurityService
Riutilizzare gli utenti esistenti, specchio per la sicurezzaProvider, gate team-member sign-in
Riutilizzo (senza account duplicati per la stessa persona): - MemberCreateController ora riutilizza un utente esistente tramite email personale case-INSENSITIVELY (era case-sensibile, mancante legacy e-mail miste-case). - SecurityController.register riutilizza un account esistente invece di creare sempre un nuovo utente: già membro dell'org -> 409 ALREADY MEMBER (si prega di firmare) account ACTIVE esistente -> collegare l'org, mantenere la password, restituire ACCOUNT LINKED; segnaposto non attivato (non verificato E mai registrato) -> rivendicarlo con password digitata. Un modulo pubblico non può mai sovrascrivere la password globale di un account attivo. securityProvider mirror: - Sia la creazione interna/team-member che il registro pubblico ora chiamano E poi ogni nuovo membro atterra. sotto la sicurezza dell'orgProvider org (come membro di base). Cancello di attivazione: - il login blocca un TeamMember il cui stato di appartenenza!= ACTIVE con "Il tuo account esiste ma non è attivo in questo momento." Membri regolari e membri del team attivo passano. Indurimento ad org risoluzione (X-Forwarded-Host siblings): - ottenereExternalProviders e PortalController.resolveOrg utilizzare il risolutore alias-fallback e rilasciare il getServerName() fail-open (fallito chiuso invece di perdere la piattaforma org).
· kamo-shared-library
SecurityProvider adesione specchio + riutilizzazione / patch
# Specchio un utente # la sicurezza dell'orgProvider org come membro di base (incorporato; no-op quando l'org si assicura o l'utente è già lì). La regola che ogni nuovo l'appartenenza anche atterra sotto la piattaforma/security-provider org. - No, no. caso insensibile, Ricerca e-mail per il riutilizzo di account cross-org (email non è globalmente unico, quindi un singolo ricercatore opzionale avrebbe gettato). - Smettila di resettare la sicurezza. ogni modifica org (solo backup quando null), quindi un bambino org mantiene il suo link al fornitore della piattaforma lo specchio dipende da.
· kamo-internal
Wire Tasks scheda per backend reale + eliminare azione + conteggio live
Aggiunge i Prossimi percorsi proxy per /leads/{id}/tasks[/{taskId}] (la scheda ottieneTasks/ addTask/updateTask/completeTask chiamate erano 404ing), un'azione deleteTask nell'ambito task grid, e deriva la stat 'Open Tasks' dalla lista delle attività in diretta in modo che rimanga corrente come eventi TASK CHANGED refetch compiti.
· SecurityService
Leader task REST API + in tempo reale TASK CHANGED
Implementa il backend /leads/view Tasks scheda era già chiamando ma che mai esistito: GET/POST/PUT/DELETE Non e' vero. (LeadTaskController + LeadTaskService), org-guardato come gli endpoint della serratura. Ogni creazione / aggiornamento / cancellazione emette TASK CHANGED in modo aperto viste di piombo rinfrescare dal vivo.
· kamo-shared-library
LeadTask entità per attività di follow-up di piombo
Backs /leads/view Tasks scheda (precedentemente un frontend-solo stub senza persistenza). LeadTask (tabella LEAD TASK) rispecchia la frontend TaskItem forma E' il momento giusto. + LeadTaskDTO e repository. Le mutazioni di attività trasmettono TASK CHANGED sul canale in tempo reale di piombo esistente.
· kamo-internal
Datagrid in tempo reale + vista live lead con serrature per-pane edit
/leads griglia è ora completamente live su websocket (NATS→STOMP): righe aggiungere/remove/aggiornamento contro il filtro attivo automaticamente e le celle cambiate lampeggiano una volta per altre modifiche dei membri; il pulsante di aggiornamento morto viene rimosso. /leads/view/[id] si applica dal vivo lead/history/task/stats aggiornamenti e guadagni per-pane esclusive serrature di modifica con un 'attualmente modifica' roster, conto alla rovescia dal vivo, e auto-save su idle/disconnect. Aggiunge l'usoLeadsAdesso gancio, piomboLocksApi + Prossimo proxy percorsi, e un riutilizzabile MemberContactCard (nome + estensione di lavoro, softphone click-to-call / open-chat). Aggiornamenti di piombo uniscono null-preservingly così parziali payloads mai celle vuote.
· MediaService
Org-guardare l'abbonamento /topic/leads/rt/{orgId} in tempo reale
Protezione cross-tenant SUBSCRIBE per il nuovo tema in tempo reale di piombo, specchiando il esistente /topic/social/feed guard: un membro può iscriversi solo a Il flusso di piombo di Org. L'esistente e' gia' arrivato. relays security.leads.rt.* to /topic/leads/rt/*, quindi non è necessario alcun cambiamento di relè.
· SecurityService
Per-pane edit-lock REST API + auto-save spazzatrice
Aggiunge /api/security/leads/{id}/locks E' una cosa da fare. LeadLockService: prenotazione esclusiva per-pane, battito cardiaco abbordante che resettare un TTL a 5 minuti e una spazzatrice programmata che apre automaticamente il buffered bozza e rilascio su idle-expiry o presenza-grace timeout. Idle-expiry è emessa come epoca assoluta millis. Configurazione sotto lead.lock.* (configmap).
· kamo-shared-library
In tempo reale NATS pubblicazione + per-pane edit-lock entità
Pubblica gli eventi principali org-scoped su security.leads.rt.{orgId} (creato/updated/ cancellato con le chiavi del campo modificato, la cronologia-appended) in modo che la griglia /leads e /leads/view page può aggiornare dal vivo. Ora torna. le chiavi di registro cambiate utilizzate per guidare l'interfaccia utente. Aggiunge l'entità LeadPaneLock (table LEAD PANE LOCK, unico (LEAD UID,PANE)) e il backup del repository esclusivo per-pane edit locks; l'editore emette idle-expiry come epoca assoluta millis (timezone-safe number) per il conto alla rovescia.
· kamo-internal
Integrare le schede primarie nell'intestazione sulle pagine di Style A rimanenti
Seguire la spazzata Style A→B, che copre pagine che non attraversano Visualizza impostazioni: - /kb: KbNavBar diventa un intestazione gradiente eroe con gli articoli / risorse / Recensioni schede integrate e l'azione del nuovo articolo direttamente allineato; layout ottiene lo sfondo radiale condiviso. - No, no. il mini intestazione posteriore + Generale/ Domini schede MUI diventano un intestazione di eroe gradiente con schede integrate. - /leads/view/[id]: le schede primarie si spostano nel gradiente HeaderBar intestazione; l'editor di stato/sub-status in linea viene aggiunto all'intestazione azioni allineate a destra (stile per il gradiente), sostituendo il separato scheda.
· kamo-internal
Rilocare le barre di conta inferiore nell'intestazione attraverso le schede sociali, importazioni
Si applica il trattamento dei vendor-tab alle superfici delle impostazioni CRM in sibling in modo che il standalone "x • y" barra riassuntiva in basso non mangia più pagina immobiliare: - Connessioni sociali & Importazioni automatizzate: azioni di intestazione allineare e conta le pile della linea direttamente sopra i pulsanti Refresh + Add/Create. - Importazioni manuali sotto-tabs (Importazioni dei parassiti, Modelli di importazione): il conte si sposta a a sinistra dell'icona solita Refresh (traspazio), lasciando cadere la barra inferiore.
· kamo-internal
Spostare il contatore/prodotto sopra le azioni dell'intestazione, in basso allineare Refresh + Add Vendor
Riprende la pagina immobiliare la barra di riepilogo del fondo standalone utilizzata per occupare — la linea "x vendors • x prodotti" ora impila sopra l'azione pulsanti nell'intestazione, e i pulsanti in basso-allineare con il blocco titolo.
· kamo-internal
Integra le schede primarie nell'intestazione della pagina (Stile B) attraverso le pagine Style A
Ogni pagina gradiente-eroe che ha reso le sue schede primarie in una scheda separata sotto l'intestazione ora li rende all'interno dell'intestazione gradiente stesso, corrispondente /account e /supporto. - ImpostazioniVisualizza: tab bar spostato nell'intestazione gradiente (converte tutto ~23 /settings/* pagine contemporaneamente); colonna di aiuto, intestazioneAzione, backHref, e scheda icona/glow/alignRight extras conservati; hideTitle mantiene ancora le sue schede. - /leads/reports: schede di report spostate nell'intestazione. - /commerce (PipelineView): schede per-market (con icone verticali) spostate in l'intestazione; il mercato unico / onboarding stati invariati.
· kamo-internal
Freccia posteriore in intestazione ritorna a /leads
Aggiungi un optional backHref/backTooltip a SettingsView che rende un bianco freccia posteriore sinistra del titolo, e collegare la pagina impostazioni CRM per inviare la membro di nuovo a /leads. Tooltip riutilizza l'esistente localizzato lead.view.header.backToBrowser ('Back to lead') stringa.
· kamo-internal
Impostazioni CRM Bold:' prefisso, separatori di tubi, hover-solo sottolineano sui link di scheda
Prefazione dei collegamenti delle impostazioni CRM con un'etichetta grassa 'CRM Settings:' ****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** invece di uno spazio nudo, e passare i collegamenti da sempre sottolineato a Sottotitoli.

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