Salta al contenuto
KAMOUniverse

Changelog

Cosa c'è di nuovo.

Ogni miglioramento alla piattaforma, come si spedisce.

  1. · 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.

  2. · 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.

  3. · 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.

  4. · 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.

  5. · 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.

  6. · 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.

  7. · 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.

  8. · 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).

  9. · 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.

  10. · 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.

  11. · 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.

  12. · 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.

  13. · 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.

  14. · 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.

  15. · 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.

  16. · 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).

  17. · 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.

  18. · 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.

  19. · 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.

  20. · 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.

  21. · 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.

  22. · 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è.

  23. · 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).

  24. · 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.

  25. · 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.

  26. · 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.

  27. · 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.

  28. · 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.

  29. · 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.

  30. · 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