Nascondi la scheda ATF interamente quando tutti i campi sono bloccati dal modello applicato
Sonda modello master endpoint e fix applicatoModello org ID
- Sostituire applicatoModel.source-based gate con una sonda diretta /api/security/master-model sul montaggio; r.ok=false (409) significa org è regolato da un ti...
Gate censorship tab options by applied model constraints
- Hide EDIT MASTER MODEL button when org is governed by a branch type (use appliedModel.source instead of unreliable org context branchTypeID) - Hide ATF fiel...
Mark-as-read and message fetch for shared/member mailboxes
Classic mode now loads shared mailbox messages via the correct /messages/{folder} endpoint (was calling the non-existent /conversations endpoint). Fetching a fu...
Mark-as-read for shared and member mailboxes
EmailController.setFlags now accepts an optional mailboxId query param and routes through resolveProviderWithMailbox so member-mailbox flags are set against the...
Use extensionId as external ID, not Relay node id
FreePBX returns the same Relay id (ZXh0ZW5zaW9uOg== = "extension:") for every extension because the id field is not populated. Using it caused all extensions to...
Maniglia IMAPInputStream in getMessage per evitare ClassCastException
JavaMail può restituire un IMAPInputStream invece di uno String decodificato da part.getContent() quando il contenuto del messaggio non è stato pre-fetched. The...
Aumentare TTL da 90s a 300s per evitare il falso OFFLINE sulla scheda throttling
Riscrivi tutte le query/mutazioni GQL contro l'introspezione dello schema live
Verificato ogni nome del campo e digitare contro lo schema effettivo FreePBX 17. Set completo di correzioni: Query: - fetchAllExtensions: rimuovere il campo "v...
Passare selezionatoFolder a ThreadDetailView in modo e-mail:fuochi cambiati cartella con una cartella valida
conversazione.folder è sempre non definita perché la conversazione Java ha folderIds (text[]) non un campo di stringa cartella. Questo ha causato il carico. cal...
Corretto il nome del campo di GraphQL per fetchAsteriskDettagli
FreePBX API restituisce "Vuoi dire fetchAsteriskDetails?" — rinominare la salute controllare query e il suo percorso di dati accesso di conseguenza.
Aggiungere le intestazioni XHR/Accept e l'analisi della risposta di stringa al client GraphQL
Stesso modello di FreePBXTokenCache: aggiungere X-Requested-With + Accettare: applicazione/json per sopprimere le risposte redirect HTML di FreePBX, e passare t...
Sincronizzazione casella di posta a discesa nella casella di posta primaria sul carico
Dropdown predefinito alla prima voce dell'elenco perché selezionatoMailbox inizializzato senza mailboxId, causando correnteValuta di risolvere a nudo 'personale...
Aumentare il limite di dimensione del file di upload a 500MB
Spring Boot predefinisce il tappo di parti multipart a 1MB, causando l'immagine di sfondo caricamenti per fallire con 500 in request.getParts(). Match SecurityS...
Gli errori HTTP di superficie così i guasti di upload sono visibili
Sostituito console silenziosa.warn con un errore gettato sullo stato non-OK, così l'utente vede il motivo di fallimento effettivo (status + corpo di risposta) i...
Aggiungete le intestazioni Accept+XHR e la parsing di risposta cruda per il punto finale di token
FreePBX stava ritornando testo/html quando viene chiamato tramite cluster DNS perché L'intestazione host non corrisponde al PBX HOSTNAME configurato. Aggiunta A...
Guidare l'ingresso minimizzato-tab attraverso i controlli di animazione
Cambiare animate={...} per animare={tabControls} ha rotto la voce animazione: tabControls non ha un target in coda sul montaggio, quindi il pulsante è rimasto a...
Correggere le stringhe di portata OAuth2 per FreePBX API
Gli ambiti FreePBX sono identificatori di alto livello: 'gql' (tutti GraphQL) e 'rest' (tutti REST). Il formato 'gql:read' significa GQL per un modulo chiamato ...
Esposizione porto 8088 direttamente sul servizio ClusterIP
Il servizio aveva solo il porto 80→8088 mappatura. Servizi interni Non e' vero. (ad es. token API VOIPService richieste) erano tempi out perché porto 8088 non a...
Trust backend pendenteCount, drop client offset
Backend Paese in sospeso è ora non letto (conti SUPPORT TICKET sessioni con i messaggi più recenti dell'ultima vista del proprietario). Quando l'agente si apre ...
Aggiungi fail2ban-config ConfigMap mancante per k1m1
Riferimenti di distribuzione fail2ban-config ConfigMap (jail.local + asterisk-security.conf) ma non esisteva, bloccando la capsula MountVolume. Impostare e impe...
MarkAsRead dopo che l'agente invia così lastViewed avanzamenti
Sui biglietti di supporto, sia i messaggi dei visitatori che degli agenti vengono memorizzati sotto stesso sistemaMember, quindi la query ilread-count è membro-...
I biglietti di supporto hanno bisogno di conteggi non letti
I messaggi dei visitatori sui biglietti di supporto vengono memorizzati sotto lo stesso sistemaMember che l'agente autentica come, in modo che l'attuale session...
Passare la cartella per caricareIl pulsante di riprovazione
loadThread prende (threadId, cartella); il pulsante di ripristino di errore solo passato threadId, rompendo la costruzione kamo-internal. Abbina la chiamata a l...
Corretto JsonIdentity Info proprietà da 'uniqueId' a 'id'
Ente membro ha dichiarato @JsonIdentityInfo(property = "uniqueId") ma il campo chiave principale effettivo è chiamato 'id'. Jackson ha lanciato "non può trovare...
Rimuovere la guardia SSR causando errore di idratazione; goccia SockJS per nativo WebSocket
- Hero.tsx: rimuovere il tipo di finestra controllare intorno ParticleField — ParticleField già ha ssr:false così la guardia ha prodotto un errore server/client...
Indicatori illeggi chiari quando si apre la conversazione
ThreadDetailView invia ora e-mail:folder-changed dopo markConversationRead riesce così MailButton refetches il conteggio del distintivo di inbox navtop. Convers...
Move CORS to Traefik via kamo-middlewares, remove in-app CorsFilter
The CorsFilter @Bean in the Spring app was silently not applying headers after WebConfig.java was removed. CORS is now handled entirely at the Traefik layer by ...
Use /public/{mainDomain}-{tld} path matching actual MinIO bucket layout
The getThemePath() was generating /domain/{tld}/{split}/kamosite paths that don't exist in MinIO — theme files live in the public bucket under kamocrm-com/, bad...
Break min-w-0 chain to contain email scroll in body column only
Add min-w-0 to outer container and main content flex div so flex children cannot expand to email min-content width, which was causing the page-wide horizontal s...
Fornitori di hoist sopra ToolProviders
Stessa causa principale del paranco ChatWebSocketProvider: SupportTicketWindow chiamate E ChatBox chiama. useUnread().markAsRead(), ma entrambe le finestre dell...
Aggiungi soppressioneHydrationWarning e fissare immagini segnaposto rotto
soppressioneHydrationWarning su <html> impedisce React errore #418 causato dal browser estensioni (ad esempio tradurre, modalità oscura) che mutano gli attribut...
Consentire /domain/ percorso prefisso sul tema IngressRoute per CORS
Il tema config a tema.kamocrm.com/domain/... non è stato abbinato dal regole di rotta esistenti (solo /pubblico/ e /internal/ sono stati autorizzati), quindi Tr...
Rimuovere duplicati CorsFilter e striscia a monte intestazioni CORS nel gateway
WebConfig.java ha definito un secondo fagiolo CorsFilter in competizione con CorsConfig. Java bean, rischiando di scrivere l'intestazione duplicata. L'ha cancel...
Rimuovere il fagiolo CorsFilter che causa il doppio intestazione Access-Control-Allow-Origin
L'esplicito fagiolo CorsFilter ha causato un secondo filtro CORS accanto alla primavera Supporto CORS integrato di sicurezza (che utilizza CorsConfigurationSour...
Rimuovere le dichiarazioni debug console.log e aggiungere le rotte mancanti
Rimuovi tutti i debug temporanei aggiunti durante il tracciamento di WebSocket ChatBox, TicketChat, MemberItem, ChatTool e useChatWebSocket; aggiungi reindirizz...
Evitare l'intestazione del messaggio da espandere la colonna su indirizzi lunghi
L'intestazione sinistra flex bambino non aveva min-w-0, così lunga e-mail infrangibile indirizzi in Da/To/Cc ha forzato la sua larghezza min-content per crescer...
Hoist ChatWebSocketProvider sopra ToolProviders
ToolDock (e le sue finestre degli strumenti come SupportTicketWindow → TicketChat) è montato all'interno ToolProviders, che si trova ABOVE PresenceWrapper nell'...
Drop Shadow DOM in e-mail renderr così overflow-x-auto incendi
Shadow DOM era la causa principale. Ampio contenuto di email (tavole di larghezza fissa) all'interno dell'albero ombra dipinto oltre l'ospite senza contribuire ...
Allineare il percorso di importazione ChatWebSocketContext al fornitore di corrispondenza
TicketChat e ChatNotificationListener hanno importato il contesto tramite '@/app/contexts/...' mentre PresenceWrapper (il fornitore) lo importa attraverso il pe...
Contenimento dell'ospite dell'ombra della forza con stili in linea + contengono: layout
Il overflow-x-auto basato sulla classe sull'host ombra non stava vincendo in modo affidabile contro l'ombra ':host { tutto: iniziale }' reset, così ampia e-mail...
Scorrere ampio contenuto di email all'interno ombra DOM, non fuori
I precedenti tentativi di aggiungere overflow-x-auto agli antenati DOM leggeri non poteva catturare ampio contenuto di e-mail perché la visuale dell'albero ombr...
Utilizzare getHasAttachments() per abbinare il tipo di wrapper Boolean
E' un Boolean, quindi Lombok. genera getHasAttachments() non èHasAttachments(). Quest'ultimo solo esiste per il booleano primitivo. Utilizzare Boolean.TRUE.equa...
Espandi la scansione del repository JPA per includere il pacchetto di commercio
La nuova biblioteca di kamo-shared porta in mezzo a... che richiede Non e' vero. (in com.kamo.z.shared.commerce). MediaService solo scansionato donotmodify.dao....
Ripristinare l'importazione HashMap in ChatWebSocketController
Il refattore precedente ha rimosso l'importazione HashMap ma la manigliaTyping metodo ancora costruisce un HashMap per il payload dell'evento di digitazione, ca...
Aggiungi min-w-0 al contenuto di e-mail div così overflow-x-auto incendi
Senza min-w-0, la larghezza minima predefinita del bambino flex-col: l'auto si risolve a min-content, lasciando ampie tabelle di posta elettronica espandere il ...
Rimuovere il doppio collegareStomp chiamata in sendMessage
Quando il primo messaggio crea una nuova sessione, gli aggiornamenti suSessionCreated che innesca utilizzareEffect per chiamare connectStomp. La chiamata in lin...
Proattivamente creare il consumatore NATS alla creazione di sessione per prevenire la perdita di messaggi
Precedentemente il consumatore di spinta NATS JetStream è stato creato solo quando un client STOMP inviato /app/chat/subscribe. Con DeliverPolicy. Nuovo, qualsi...
Chiudi gap di ricollegamento causando messaggi in tempo reale
Rimuovere `collegato` dall'uso dell'abbonamentoDeps difettosi in TicketChat e ChatBox. In precedenza, ogni connessione WebSocket ha innescato l'effetto pulizia ...
Consenti all'utente di sistema di gestire il marchio org e fissare il logo auth
- Aggiungi bypass utente di sistema come prima guardia in canManageOrgBranding così piattaforma sistema utente ha pieno controllo di marca su tutti gli org non-...
Come quello che vedi la spedizione?
Ognuno di questi aggiornamenti atterra automaticamente nello spazio di lavoro. Inizia gratis e guardalo crescere settimana dopo settimana.