Mergi la conținut
KAMOUniverse

Jurnal de schimbări

Ce e nou.

Fiecare îmbunătățire a platformei, pe măsură ce se livrează.

  1. · kamo-marketing

    Add Flowroute to integrations hub page

  2. · kamo-marketing

    Add Flowroute to INTEGRATED WITH banner

  3. · kamo-internal

    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 badge driven by isConnected (null/true/false): - null / never tested → grey "Not tested" (HelpOutlineIcon) - false → red "Not connected" (ErrorOutlineIcon) - true + sync error → amber "Sync error" (WarningAmberIcon) - true → green "Connected" (CheckCircleIcon) - RingCentral no OAuth → amber "Needs reauth" (unchanged)

  4. · VOIPService

    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 have changed, requiring a re-test before showing Connected) - toDto() exposes isConnected so the frontend can distinguish: never tested / connected / not connected

  5. · kamo-shared-library

    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.

  6. · kamo-marketing

    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ă suma de reducere, durata, și o numărătoare inversă live *************** la 50ms) cu un animat limita de gradient-lumină și shimmer matura. Nu dă nimic când nu e activ. sau promovarea neexpirată există.

  7. · kamo-internal

    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 mine / disponibilitate API - Adăugaţi un câmp accesibil interfeţei membre şi propunerii MemberItem - Permisele de membruList pot fi obţinute de la un răspuns de la un departament la altul - MemberItem arată eticheta ONLINE/OFFLINE/INAVAILABIL cu culoare portocalie pentru indisponibilitate - Fix OFFLINE bug: adăugați schimbare de vizibilitate bătăilor inimii și 120s periodice vrac re-fetch

  8. · SecurityService

    Adăugați răspunsul de la distanță și criteriile finale de disponibilitate

  9. · InitializerService

    Backfill este disponibil = TRUE pentru membrii existenți

  10. · kamo-shared-library

    Adaugă câmp accesibil pentru disponibilitatea membrilor

  11. · kamo-internal

    Elimină fila Access & Domains și componenta DomainManager

  12. · kamo-marketing

    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 rămâne în viață și pe NereadMesaj incendii pentru mesajele de agent primite chiar și atunci când Vizitatorul nu se uită la discuţie. - Animează insigna cu o scară de primăvară pe fiecare schimbare de conte (chey trick remontează elementul) plus un inel continuu de ping wind în timp ce > 0. - Bate si inclina fila minimizata in sine ori de cate ori numarul merge in sus, şi îl fumează cu o strălucire aşa că atrage atenţia de pe toată pagina. - mânerExpand deja șterge conta pe deschis, astfel încât nu este necesară nicio schimbare Acolo.

  13. · MediaService

    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. - Nou public *** *** *** *** *** *** ajutor. - ***************acum (a) redifuzează agenţilor pe perioadă de sesiune sarcină utilă necitită după ultimele avansuri vizionate și (b) solicită ajutor astfel încât Navtop SupportButton rămâne în sincronizare fără a aștepta următorul sondaj din anii '60. - *************, de asemenea, sună ajutorul astfel încât Cucuie de navtop live atunci când un vizitator trimite. Naufragiul se potriveşte acum cu insigna pe rând. după clic și după o reîmprospătare browser.

  14. · kamo-shared-library

    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 vizitatorilor) în loc de doar PRE TICKET/NEW Starea. Contele este citit direct de la DB astfel încât să supraviețuiască o reîmprospătare. De asemenea, adaugă ********************* astfel MediaService poate rezolva proprietarul org dintr-o sesiune GUID după markAsRead.

  15. · KlusterServices

    Adăugați media la lista de autorizare a subdomeniului

  16. · kamo-internal

    Adaugă subdomeniu media la pseudonimele DNS necesare

  17. · kamo-internal

    Adaugă coloana locației la ticket datagrid

    Citiri Nu-ţi face griji. direct de pe TicketDTO de sprijin (acum instantaneu pe entitatea bilet la timpul de creare Înregistrează pavilionul + orașul/regiunea/țara cu IP-ul prezentat într-un tip de instrument; cade înapoi la un em-dash atunci când nu există date geo este pe bilet. Doar privelistea agentilor. TicketHeader consumă deja aceleași câmpuri DTO, astfel încât instrumentul popup fereastra arată acum instantaneu prea pe redă.

  18. · kamo-shared-library

    Snapshot visitor geo on ticketent

    Adaugă VIZITOR IP ADDRESS, VISITOR COUNTRY CODE, VISITOR COUNTRY NAME, VIZITOR CITY, VIZITOR SUBDIVISION Coloane. Capturat la crearea de bilete astfel încât criteriile de evaluare a listei/detaliilor nu trebuie să facă niciodată o scanare a intervalului GeoLite sau un control separat al mesei de vizitare la ora citirii. KamoInitializerService (hibernate.ddl-auto: actualizare) va adăuga coloane la următoarea alergare; rândurile existente cad înapoi la înregistrarea vizitatorilor Codul de țară stocat în toDTO.

  19. · MediaService

    Adăugați /ws/public-chat-nativ simplu WebSocket obiectiv alături de SockJS

    Înregistrează un al doilea criteriu de evaluare STOMF fără SockJS la /ws/public-chat-nativ astfel că frontend se poate conecta cu un WebSocket nativ (brokerURL) fără a avea nevoie biblioteca șosete-client, care înregistrează un handler descărca care încalcă Permisiunile site-ului-Policy. Obiectivul final original /ws/public-chat SockJS este menţinut pentru compatibilitatea inversată.

  20. · kamo-internal

    Per-tichetă necitită + filtru "doar mesaje noi"

    - Lista biletelor arată o insignă de chat-bubble cu numărul necitit lângă # ori de câte ori sesiunea are mesaje mai noi decât a agentului ultimul mesaj vizualizat. - Adaugă un "doar mesaje noi" comutator filtru la bara de filtrare. - TicketChat sună acum... incarca si ori de cate ori un mesaj de intrare ajunge, astfel insigna clar ca Agentul citeşte conversaţia. Se bazează pe schimbarea kamo-împărtășit-library care se extinde GăsițiMembership-uri de cătremembriId pentru a include sesiuni de sprijin TICKET, plus MediaService difuzat în ***************

  21. · MediaService

    Contorizare necitită difuzată către agent la mesajul vizitatorilor

    După ce un vizitator trimite un mesaj de sprijin, împingeți cele mai recente numere necitite Încărcătura la ************* astfel încât lista de bilete a agentului Insigna și Navtop contra actualizare în timp real. Oglindeşte transmisia MediaController.trimiteMesaj pentru chat-uri de la membru la membru.

  22. · kamo-shared-library

    Include sesiunile de sprijin TICKET în interogarea necitită a membrilor

    cautăChatMembershipsPrin membreId returnează acum membri atât pentru CHAT cât și SUPORT TICKET tipuri de sesiune, astfel încât existente per-membru necitit-conte Infrastructură (get UnreadCountsByMember, /topic/chat/necitit/{memberId} Emisiunea, GET ***************** acoperă automat Bilete de sprijin prea. Permite agenţilor să vadă indicatori pe baza unui nou mesaj în lista de bilete și o insignă totală necitită în Navtop.

  23. · KlusterServices

    Producţie eşuată2ban cu închisori PJSIP şi stat persistent

    - Adăugaţi eșuare2ban-configmap.yaml cu [asterisk] şi [freepbx-web] închisori, Creştere treptată a interdicţiei (1h→24h→30d plafon), LAN ignoreip şi a filtru personalizat asterisc-securitate.conf care vizează înregistrările PJSIP SecurityEveniment - Mount fail2ban-config ConfigMap și gazdăPath /var/lib/pbx/fail2ban (ban starea persistă pe întreaga capsulă de repornire) atât în cazul implementării k1m1, cât și în cazul k2m1 - Configurații de sârmă în startup.sh înainte de a eșua2ban-client începe pe ambele noduri

  24. · kamo-shared-library

    Add resetHasAttachmentsForFolder query to ConversationRepository

    Allows sync to reset stale has_attachments flags before re-indexing so corrected MIME detection can rebuild the field from actual attachment data.

  25. · KlusterServices

    Integrate Coqui TTS with norman voice (VCTK p267)

    - Deploy coqui-tts server (VCTK VITS model, CPU-only) as ClusterIP service on port 5002 with model cache at /var/lib/coqui-tts on k1m1 - Inject coqui_tts.agi into /var/lib/asterisk/agi-bin on each boot: calls HTTP API, caches 8 kHz mono WAV under sounds/coqui-tts/, streams via AGI STREAM FILE — use AGI(coqui_tts.agi,text) in any dialplan context - Write say.conf on each boot to route all Asterisk built-in say functions (digits, numbers, dates, times) through Coqui TTS

  26. · KlusterServices

    Add LAN DNS pod for split-DNS on k1m1

    Deploys a dnsmasq pod with hostNetwork on k1m1 that listens on 192.168.4.22:53. Overrides pbx.k1.kluster.kamocrm.com -> 192.168.4.22 so LAN phones reach the PBX directly without NAT hairpin. All other queries are forwarded to 8.8.8.8/8.8.4.4. Router DHCP must be pointed to 192.168.4.22 as the primary DNS server for LAN clients to pick this up.

  27. · kamo-internal

    File de configurare a platformei (General / VOIP & SMS / System User / Advanced)

    Ambalaje ******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** - General: citire-doar platforma de ansamblu număr de instanță, număr de instanță activă furnizor de SMS, ultima sincronizare VOIP la nivel mondial timbru temporal. Citeşte din nou. - VOIP & SMS: editare voipSyncIntervalMinutes (1.1440) şi voipSyncEnabled, ultima suprafataGlobalVoipSyncAt, plus un buton "Run global sincronizare acum" care Calls SecurityService → VOIPService /intern/voip/sync-global. - Utilizator sistem: Existent System Access Grants UI, ridicat din ConfigurareClient verbatim într-o componentă de filă (nicio schimbare de comportament). - Advanced: paralel "Trigger global VOIP sincronizare acum" buton pentru ops, plus un mesaj explicit de stare goală pentru controalele viitoare. ConfigurationClient este acum un orchestrator subţire. UtilizarePlatformAdminGuard Rămâne la nivelul orchestratorului, aşa că toate cele patru file sunt aranjate.

  28. · DaemonService

    Sincronizare VOIP globală (interval maxim)

    VoipGlobalSyncJob ticăie în fiecare minut și, pe fiecare căpușă, citește SystemConfigurare singleton pentru a decide dacă o sincronizare globală este datorată: - Dacă voipSyncEnabled este fals → skip. - Dacă lastGlobalVoipSyncAt + voipSyncIntervalMinutes > acum → skip. - Altfel: POST /intern/voip/sync-global to VOIPService with the Antet interior AuthFilter; actualizare ultimaGlobalVoipSyncAt pe succes. Acest lucru permite operatorilor de platforme ajusta cadența la rulare de la - Nu. → VOIP & SMS fără repornirea serviciului Daemon sau atinge expresiile Cron. Înregistrat în QuartzConfig alături de locurile de muncă existente. k8s/configmap.yaml adaugă cron (1 minute implicit) și kamo.services.voip.base-url + Intern.auth.secret astfel încât apelul HTTP outbound poate autentifica.

  29. · SecurityService

    Etapele finale ale sistemului-config + ale platformei

    Suprafata de configurare la nivel de platforma, poartata de proprietarul de nivel superior existent paznic (matches SystemUserConfigController's requireTopLevelOwner model). Puncte finale: - GET /api/security/system-config - Put /api/security/system-config VoipSyncEnabled. Actualizări parțiale susţinută; executarea validării interval 1,1440 minute. - GET /api/security/platform-overview numărul de telefon activ/SMS; ultima oră de sincronizare, curent interval + pavilion activat). - POST *************** Calls VOIPService /intern/voip/sync-global via InternalAuthFilter (intern Aut secret) astfel încât operatorii de platforme pot trage o sincronizare VOIP globală la cerere de la noua configurare a platformei → fila VOIP & SMS / fila avansată. Config: - kamo.services.voip.base-url (defaults to VOIPService cluster-local service URL). - Reuses existente interne.auth.secret.

  30. · VOIPService

    Controlori de resurse perintență + agregate org + sincronizare internă

    Resurse perintentale CRUD (extensii / utilizatori / dispozitive / voicemail): - VoipExtensiiController la ************* - VoipUsersController la /api/voip/instances/{id}/utilizator - VoipDevicesController la ************* - VoipVoicemailController la *************** - Fiecare GET acceptă ?refresh=real to force-fetch from provider and refresh cache; În caz contrar, servește de la cache-ul local pentru squippy UI. - Fiecare cale de a scrie apeluri furnizor ȘI Upserts local cache astfel agregate Vederile rămân consistente fără a aştepta următoarea sincronizare programată. - Voicemail GET / {vmId}/audio curge audio brut de la furnizor prin StreamingResponseBody astfel încât UI poate <audio src=...> direct. Org-orz (VoipOrgAggregateController la /api/voip/org): - /extensii, /utilizatori, /dispozitive, /voicemail-uri inapoi randuri peste fiecare instanta cu pastile. UI le transformă în agregate file în /setări/fetures/telefon. - /Health ruleaza checkHealth() on every active instance in paralel per-intence (printre numărul de cache al Tribunalului SyncService), responsorsHealthDto[]. - POST / Sync runnsCentralSyncService împotriva tuturor instanţelor active ale org curent. Putere de nivel chiriaș "Sync acest org acum" buton în UI. Sincronizare internă (VoipNORALSyncController): - POST /intern / Voip / sync-global bucle toate cazurile active la nivel de platformă. Numit de serviciul lui Daemon Quartz. Protejat de cele existente Intern AuthFilter in VOIPService. Construiește verde.

Universul tău te așteaptă.

Începeți gratuit în câteva minute.Adăugați produse oricând sunteți pregătit — fără migrare, fără autentificări noi.

Gratuit pentru totdeauna — nu este necesar un card de credit