Arată numele membrilor și adaugă acțiunea Unassign la fila extensii org
Configuratie VOIP de sarma catre selectorii de pret+extensie cu aplicare a misiunii
Adăugați DTO-uri, metoda API neasignată și actualizați tipurile de VOIP-uri ale membrilorTab
Adăugați obiectivul de atribuire DELETE la VoipExtensionsController pentru admin unassign
Adaugă MemberVoipConfigController pentru membru VOIP config with extension asignation
Adăugaţi găsirePrinMetode de interogareAtribuitePhoneExtensionRepository
Ascunde cardul ATF în întregime atunci când toate câmpurile sunt blocate după modelul aplicat
Proba de evaluare a modelului principal și fixați ID-ul model org aplicat
- Înlocuiți poarta aplicatăModel.Source cu o sondă directă de /api/security/master-model on mount; r.ok=fals (409) means the org este guvernată de un tip de suc...
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ă căsuța poștală activă în parole URL
Comutarea căsuţelor poştale actualizează acum URL-ul (?mailboxType, ?mailboxId, ?mailbox) atât de revigorant browser-ul restaurează aceeași cutie poștală. Mesaj...
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...
Handle IMAPInputStream in getMessage pentru a preveni ClassCastException
JavaMail poate returna un IMAPInputStream în loc de un string decodat de la part.getContent() atunci când conținutul mesajului nu a fost pre-inventat. ă mulaje ...
Arată banner de ofertă activă cu numărătoare inversă de milisecunde live
Fetches activ de promovare server-side pe pagina de start și redă un HeroOfferBanner între linia subheadline și apel gratuit pentru totdeauna. Bannerul arată su...
Wire Available/Indisponibil switch to backend and fix OFFLINE present bug
- Redenumește cipul întrerupt/activ disponibil/ indisponibil în NavTop - Adu disponibilitatea inițială pe montare și persistă comutații prin intermediul noi min...
Crește TTL de la 90 la 300 pentru a preveni fals OFFLINE pe trepidație filă
Adăugați răspunsul de la distanță și criteriile finale de disponibilitate
Rescrie toate întrebările/mutările GQL împotriva introspecţiei de schemă live
Verificat fiecare nume de câmp și tip împotriva schema FreePBX 17 reale. Set complet de corecții: Întrebări: - aduceţiAllExtensii: eliminaţi câmpul inexistent ...
Pasează dosarul selectat către ThreadDetailView astfel e-mail:foldere schimbate cu un dosar valid
conversation.folder este întotdeauna nedefinit deoarece Conversația JavaEntity are foldIds (text[]) nu este un câmp de coarde. Acest lucru a cauzat sarcinaThrea...
Numele de câmp GrafQL corect pentru a aduceAsteriskDetails
FreePBX API întoarce "Aţi vrut să spuneţi "AsteriskDetails"? verifică interogarea și accesorul traseului de date în consecință.
Adăugați antetele XHR/Accept și răspunsul String parsing la clientul GraphQL
Același model ca FreePBXTokenCache: adăugați X-Requested-Cu + Accept: aplicație/json pentru a suprima răspunsurile de redirecționare HTML FreePBX, și comuta toa...
Sincronizează căsuţa poştală dropdown în căsuţa poştală primară la încărcare
Dropdown implicit la primul element listă deoarece selectat Mailbox inițializat fără o cutie poștalăId, ceea ce face ca actualValue să se rezolve la "personal" ...
Mărește limita de încărcare a fișierului la 500MB
Primavara Boot implicit capac piese multipart la 1MB, provocând imagini de fundal uploads to fail with 500 in request.getParts(). Potrivire serviciu de securita...
Erori HTTP de suprafață, astfel încât defecțiunile de încărcare sunt vizibile
Consolă silențioasă înlocuită.Avertizare cu o eroare aruncată la starea non-OK, astfel încât utilizatorul vede motivul de eșec real (status + răspuns organism) ...
Adăugaţi antetele Accept+XHR şi răspunsul la coarda brută pentru criteriul final de evaluare
FreePBX returna textul/html când a fost apelat prin cluster DNS deoarece Antet gazdă nu se potrivește cu PBX HOSTNAME configurat. Adăugarea Accept: aplicație/js...
Drive minimizat-tab intrare prin controale de animație
Comutarea animației = {...} la animație={tabControale} a rupt intrarea animație: tabControale nu are o țintă coadă pe montare, astfel încât butonul a rămas la p...
Coarde OAuth2 corecte pentru API FreePBX
Domeniul de aplicare FreePBX sunt identificatori de nivel superior: "gql" (toate GraphQL) și "rest" (toate odihnă). Formatul "gql:read" înseamnă GQL pentru un m...
Insigna necitita live + sari pe noul mesaj agent
- Păstrează LiveSupportPanel montat offscreen în timp ce widget-ul este minimizat (numai atunci când există o sesiune de sprijin) astfel încât abonamentul STOMP...
Expune portul 8088 direct pe serviciul ClusterIP
Serviciul a avut doar port 80→8088 cartografiere. Servicii interne care utilizează - Nu. (de exemplu, VOIPservice API token cereri) au fost calendarul pentru că...
Trust backend waitingCount, drop client offsets
Platforma în așteptareCount este acum necitit-based (contele SPECIAL TICKET sesiuni cu mesaje mai noi decât ultima vizionare a proprietarului). Când agentul se ...
Difuzare în curs de numărare + necitite pe agentul citit & vizitator trimite
- ***************acum delegaţii Nu-ţi face griji. reflectă sesiunile cu mesaje vizitatori necitite și decrements atunci când Agentul îl cheamă pe MarkAsRead. - ...
Număr necitit + ajutor de căutare-prin-sesiune
Adds ***************** astfel încât navtop Insigna de sprijin Button poate conta biletele de sprijin care au nevoie de fapt atenție (au mesaje necitite vizitato...
Adaugă eșuează2ban-config ConfigHartă pentru k1m1
Referințe de desfășurare eșuează2ban-config ConfigMap (jail.local + asterisc-security.conf) dar nu a existat, blocând pod la Muntele Volume. Setare și prevenire...
Reconstrui pentru a trage cele mai recente kamo-împărțit-library
Picks the new *************** întrebări și Ramura de sprijin TICKET în *************
MarkAsRead după ce agentul trimite atât de ultimele avansuri vizionate
Pe biletele de sprijin, atât mesajele vizitatorilor, cât și ale agenților sunt stocate sub Același membru al sistemului, astfel încât interogarea necitit-conte ...
Bilete de sprijin au nevoie de numărătoare necitite agnostică a membrilor
Mesajele vizitatorilor de pe biletele de sprijin sunt stocate sub acelaşi sistemMember pe care agentul o autentifică, astfel încât sesiunea CHAT existentă să nu...
Adăugați logare la uploadBendment Background
Log org/index, info fișier, userId, auth decides, and MinIO staging cheie pentru a urmări de ce upload-uri de fundal nu apar în găleată de așteptare.
Ca ceea ce vezi de transport maritim?
Fiecare dintre aceste actualizări aterizează automat în spațiul de lucru. Începe gratuit și urmăriți-l crească săptămână după săptămână.