Aggiungi la visualizzazione dei nomi dei membri e unssign pulsante per la scheda di estensioni per-instance
Mostra i nomi dei membri e aggiungi un'azione Unassign alla scheda estensioni di livello org
Configurazione del cavo VOIP per provider + selettori di estensione con l'esecuzione dell'assegnazione
Aggiungere DTO digitati, metodo API senza firma e aggiornare MembershipPermissionsTab VOIP tipi
Aggiungi l'assegnazione del DELETE endpoint a VoipExtensionsController per admin unassign
Aggiungi MemberVoipConfigController per il membro VOIP config con l'assegnazione dell'estensione
Aggiungi i metodi di query findByAssignedMemberId a PhoneExtensionRepository
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...
Persist casella di posta attiva nei param di query dell'URL
Cambiare le caselle di posta aggiorna l'URL (?mailboxType, ?mailboxId, ?mailbox) così rinfrescante il browser ripristina la stessa casella di posta. MessageBrow...
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...
Show accurate provider connection status from isConnected field
Replaces the old logic that showed "Connected" for any provider with no sync error (including brand-new providers that were never tested). New three-state badg...
Persist connection test result to isConnected field
- test() endpoint saves isConnected=true/false to DB after every health check - update() resets isConnected to null when configJson changes (credentials may h...
Add isConnected field to VoipProviderInstance
Nullable Boolean: null = never tested, true = last test passed, false = failed. Requires KamoInitializerService schema migration to add IS_CONNECTED column.
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...
Mostra banner di offerta attiva con conto alla rovescia dei millisecondi dal vivo
Possiede il server di promozione attivo sulla home page e rende un HeroOfferBanner tra la sottotena e il callout gratuito. Il banner mostra la quantità di scont...
Cavo Disponibile / Interruttore non disponibile per eseguire il backup e correggere il bug di presenza OFFLINE
- Rinominare Paused/Active chip a Disponibile/Non disponibile in NavTop - Prestare la disponibilità iniziale sul montaggio e perseverare con le nuove API me/ava...
Aumentare TTL da 90s a 300s per evitare il falso OFFLINE sulla scheda throttling
Add isAvailable to by-department risposta and me/availability endpoints
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 ...
Live distintivo illeggibile + rimbalzo sul nuovo messaggio agente
- Mantiene LiveSupportPanel montato fuori schermo mentre il widget è minimizzato (solo quando esiste una sessione di supporto) in modo che l'abbonamento STOMP r...
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 ...
Trasmissione contante in sospeso + non letto su agente leggere & visitatore invio
- Ora deleghe a... Il conto e' cosi'. riflette sessioni con messaggi e decrementi non letti dei visitatori quando agente chiama markAsRead. - Un nuovo pubblico....
Conto non letto + helper di ricerca per sessione
Aggiunga il navtop. SupportButton badge può contare i biglietti di supporto che in realtà hanno bisogno attenzione (hanno messaggi di visitatori non letti) inve...
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...
Ricostruire per tirare l'ultimo kamo-shared-library
Riprende il nuovo. domande e il ramo SUPPORT TICKET in..
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...
Come quello che vedi la spedizione?
Tutto questo arriva nel vostro spazio di lavoro da solo. Iniziare sul piano gratuito e leggere di nuovo questa pagina in un mese.
