Salta al contenuto
KAMOUniverse

Changelog

Cosa c'è di nuovo.

Ogni miglioramento alla piattaforma, come si spedisce.

  1. · kamo-internal

    Storia di livello di produzione + schede di segreteria con strumento di media-player

    Scheda di storia (SoftphoneHistoryTab.tsx): - Pergamena infinita tramite IntersezioneObserver all'interno del contenitore di scorrimento del pannello - Filtro chip: All / Inbound / Outbound / Missed / Registrato - Icona di registrazione in azioni di riga quando il lato dell'immagine ha una riga di registrazione - menu overflow (Aggiungi ai contatti) - Fare clic su chiamata tramite il dialpad esistente Scheda segreteria (SoftphoneVoicemailTab.tsx): - Infinito scorrimento, filtro chip (Tutto / Non letto / Ha audio) - Per-row Play / Richiamare / Altre azioni - Auto-mark-read on play - Due opzioni cancellare dialogo: Archivio (soft-hide, tutti gli utenti) vs Permanently delete (gated by VOIP VOICEMAIL PERMANENT DELETE right; rientra allo stato disabilitato per gli utenti senza di esso) - Pulsante Mark-all-read con la convenienza no-op-When-zero Strumento popup MediaPlayer E' il momento giusto. - Audio: scrubber di forma d'onda sintetizzato, click-to-seek, Replay10/Forward10, velocità di riproduzione (0.5x-2x), loop, volume + muto, dispositivo di uscita onorato dalle impostazioni AV - Video: viewport contenuto, PiP, fullscreen, stesso scrubber + controlli - Selettore multi-track per le registrazioni delle chiamate (master + ogni gamba per canale) - Scarica - Due modalità di sorgente: registrazione di voipApi (call/VM) o risorsa di imaging da imgId - Registrato in strumenti/registry/registrations.ts come multi-instance Gancio + idraulico: - useSoftphone espone paginated storia + voicemails (loadMore, hasMore, isLoading) e archivio/permanente-delete azioni - voipApi acquisisce lookupRecordings, getRecordingMetadata, archivioVoicemail, paginated getVoicemails - /api/voip proxy passa i corpi audio/video/video/octet-stream attraverso con **************************** intatto (senza buffering) in modo che gli elementi multimediali scrub - Nuovo ************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** - VOIP VOICEMAIL PERMANENT DELETE aggiunto al frontend RoleRightType registro in modo da controllareRetto cancelli cancella UI

  2. · InitializerService

    Corrente di migrazione per colonne di registrazione provider-lookup + colonne di archivio VM

    Aggiunge RECORDINGS.provider instance id (UUID) e provider external id (VARCHAR(64)) più l'indice composito idx recordings provider lookup utilizzato dal punto di estremità di ricerca della scheda softphone History. Aggiunge anche PHONE VOICEMAIL.is archived + date archived per il nuovo flusso soft-archive. Assume qualsiasi riga preesistente RECORDINGS / RECORDING EXTS nello stesso passaggio — naturalmente idempotent (il predicato corrisponde solo a righe il cui provider external id è ancora NULL, che non accadrà una volta ConversionService è sul nuovo percorso del codice). Ordini 35 — dopo il ********************** (30) così le tabelle di registrazione esistono prima che i ALTERs atterrano.

  3. · ConversionService

    Fornitore persistInstanceId + providerExternalId su Registrazione a ingest

    Filetta X-Phone-Server-Id e X-Asterisk-Unique-Id (già in UnprocessedRecording) sui nuovi campi RecordingMetadata in modo che le righe call/voicemail nel sistema di imaging portino la chiave di collegamento alla riga del fornitore di origine. Per i voicemail l'aiutante invia il nome base del file grezzo (ad esempio msg0000); si spoglia il prefisso msg e gli zeri principali in modo che la chiave memorizzata corrisponda a ciò che la segreteria REST API di FreePBX ritorna come il messaggio id.

  4. · DocsService

    Aggiungi il supporto HTTP Range

    Endpoint di streaming generico per immagini audio/video, utilizzato dallo strumento Kamo-internal MediaPlayer. Riutilizza l'autorizzazione ImageService (stesso come /download/...) ma i flussi con Accept-Ranges + Content-Range in modo che gli elementi multimediali possano strofinare senza caricare il file completo.

  5. · VOIPService

    Riproduzione di registrazione, archivio segreteria, paginated voicemail, arricchimento di storia

    - Nuova registrazione Controller con lookup di massa, audio a range per master + tracce per canale, e metadati per la finestra degli strumenti media-player - CallController.getCallHistory / getVoicemails arricchiscono ogni riga con registrazione di immaginiId tramite il nuovo RecordingLookupService — singolo giro, no N+1 - PhoneProvider.getVoicemails ora prende (memberId, pagina, dimensione); FreePBX impagina lato client da un fetch, RingCentral utilizza la paging nativo, KamoPBX continua a lanciare NotSupported - Voicemail archive endpoint (soft-hide via PhoneVoicemail.isArchived) e permanente-delete gated da VOIP VOICEMAIL PERMANENT DELETE — dioIl bypass attivo richiede sia l'ammissibilità GD che la pratica attiva - PhoneProvider guadagna getInstanceId() in modo che i controller possono risolvere la chiave di unione per la registrazione di ricerche senza una seconda chiamata di fabbrica

  6. · kamo-shared-library

    Tasti di ricerca del fornitore su Registrazione, archivio di segreteria, MinIO gamma di streaming

    - Registrazione: aggiungere providerInstanceId + providerExternalId per unire provider call-history / voicemail righe di nuovo alle attività di imaging - PhoneVoicemail: add isArchived + dateArchived per il soft-hide da elenchi di softphone - RoleRightType: aggiungere VOIP VOICEMAIL PERMANENT DELETE (porta elimina distruttiva; l'archivio rimane a disposizione di tutti) - MinIOStorageService: aggiungere openRange() + RangeStream in modo che gli endpoint audio/video possano onorare la gamma HTTP - RecordingImagingService: provider di thread id + id esterno tramite RecordingMetadata sulla riga di registrazione all'ingestione

  7. · kamo-internal

    Aggiungi scheda Storia — paginated audit timeline con ricerca e filtri

    - LeadHistoryPanel: barra degli strumenti filtro appiccicosa con ricerca debounced, ************************ Filtri, tabella MUI con impaginazione, chip evento codificati a colori, risoluzione dei nomi dei membri per campi di assegnazione/account - leadApi: getLeadHistory() e getLeadHistoryFilters() con supporto completo query-param - LeadHistoryEntry, LeadHistoryActor, LeadHistoryFieldMeta, LeadHistoryPageResponse, LeadHistoryFilters Tipi di risposta - Le vie del proxy Next.js per i filtri. - LeadViewClient cablato per rendere LeadHistoryPanel quando la scheda Storia è attiva

  8. · SecurityService

    Aggiungi i punti finali GET /{id}/history e /{id}/history/filters

    Endpoint di lead-history, filtrabile e ricercabile con caricamento in batch dell'attore (no N+1). Filtri endpoint restituisce campi usati distinti, tutti i campi del Registro di sistema, attori distinti e tutti i tipi di eventi. Tutti gli endpoint mutanti ora passano il membro chiamante come attore a LeadHistoryService per l'attribuzione.

  9. · kamo-shared-library

    Add lead-history audit log — entità, registro, servizio, DTO, LeadService hooks

    - entità LeadHistory (UUUID PK, FK lunghi normali — nessun vincolo FK per consentire la cancellazione del piombo / conversione) - LeadHistoryEventType enum con etichette leggibili dall'uomo - LeadHistoryFieldRegistry: unica fonte di verità per ~55 campi di piombo tracciati; l'aggiunta di un campo è una linea - LeadFieldDescriptor record (chiave, etichetta, categoria, estrattore) - LeadHistoryService: snapshot/diff pipeline, ************************ paginated+filtered findHistory, distinteFields/Actors for filter dropdowns - LeadHistoryDTO con ActorDTO nidificato; tutti i Long ID serializzati come String for CockroachDB JS sicurezza di precisione - LeadService: ganci di storia su creare, aggiornare, eliminare, assegnareLead, assegnareLeadAccount, unssignLeadAccount

  10. · SecurityService

    Filo LeadHistoryService attore di monitoraggio in LeadController

  11. · kamo-internal

    Aggiunga l'assegnazione del conto di piombo UI, il sistema di valuta, assegna/nuove pagine del conto, le impostazioni campo valuta

  12. · SecurityService

    Aggiungi endpoint di assegnazione del conto principale, aggiorna AccountController per CurrencyType

  13. · kamo-shared-library

    Aggiungi CurrencyType enum, aggiorna CountryType con la valuta primaria, aggiungi la valuta a Account/Organization, aggiungi l'assegnazione del conto principale a LeadService

  14. · kamo-internal

    Etichetta di tipo di membro dinamico nel titolo della pagina del mio account

    Il titolo ora legge "Il mio account {Member|Team Member}" utilizzando il configurato org etichette di comportamento, commutazione automatica una volta che il tipo del membro è caricato.

  15. · kamo-internal

    Crea il pulsante Document nella barra degli strumenti DocManager

    Il pulsante era disponibile solo su /doc/manager tramite le azioni prop. Spostato tutta la logica (stato, handler, DOC TYPES, menu) in DocManager così appare su ogni istanza incorporata. Pagina semplificata.tsx solo rendere DocManager senza azioni prop.

  16. · kamo-internal

    Spostare l'indirizzo di posta in 3 colonne con Lead Info e Primary Contatto

  17. · kamo-internal

    Sostegno internazionale — CountrySelect, LanguageSelect, Subdivision Campo in tutte le forme

    - Aggiungi CountrySelect riutilizzabile (207 paesi, icone della bandiera), LanguageSelect (26 lingue, icone della bandiera), SubdivisionField (Stato USA a discesa con bandiere; altri paesi mostrano un campo di testo etichettato) - Aggiungere costanti di paese (countries.ts, languages.ts, usStates.ts, timezones.ts) - Scheda dettagli: per-card inplace editing con ******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** - Modulo di creazione del piombo: riduzioni del paese intero/sottodivisione/timezone sostituendo elenchi in linea limitati - Impostazioni LabelManager: org lingua predefinita nella Sezione 8, CountrySelect+Subdivision Campo in indirizzo - ContactInfoStep (network create wizard): CountrySelect+SubdivisionField sostituendo selezioni limitate - MyAccountTab: CountrySelect+SubdivisionField che sostituisce i campi di testo semplici - tipi/leads.ts: aggiungere il paese e i campi di suddivisione

  18. · kamo-shared-library

    Aggiungi supporto internazionale — Lead country/subdivision/timezone, Org language, CountryType isProvince

    - CountryType: aggiungi PROVINCE NAMES set, isProvince(), getSubdivisionLabel() - Organizzazione: aggiungere lingua (LanguageType) campo - Lead: add country (CountryType), suddivisione (String), timezone (TimezoneType) campi # Add to country, subdivision, timezone # - LeadService.createLead: gestire nuovi campi; lingua predefinita + paese dalle impostazioni di org - LeadService.updateLead: gestire nuovi campi # Add to add language #

  19. · kamo-internal

    ASSIGN LEADS destra, filtro agente non firmato opzione, pulizia della colonna della griglia

    - Gate 'Unassigned Leads' opzione filtro agente dietro ASSIGN LEADS destra - 'All Leads' esclude i lead non firmati per i membri senza il diritto - Rimuovere le colonne Street, Product, Source; rimuovere i rilievi del filtro prodotto/fonte - Rimuovere la colonna della Società; La colonna di contatto mostra il nome dell'azienda, torna al nome di contatto - La colonna del venditore mostra la tooltip con il prodotto – Dettaglio sorgente - Le colonne della data cadono il prefisso del giorno della settimana, si restringono da 170px a 140px - DateTimeDisplay: aggiungi showWeekday prop (default false)

  20. · kamo-shared-library

    Aggiungere ASSIGN LEADS destra (ID 137) nella sezione CRM

  21. · kamo-internal

    Aggiungi Assegna Per la sezione Mercato e Assegnazione su /leads/new

    - Fetches membri del team attivo da... - Membri dei gruppi per dipartimento con dipartimenti e membri ordinati in ordine alfabetico - Formatta i nomi come "Last, First"; prima opzione è "Auto Assign / Unassigned" - Reorders sezione campi: Lead Market, Assegna a, Miglior tempo di contatto, Venditore, Prodotto, Tipo di Prospect (tutti lg=4) - Fixes conduceApi.ts per inviare assegnatoTeamMemberId invece del campo morto assegnatoUser - Aggiunge assegnatoTeamMemberId al tipo di piombo

  22. · kamo-asterisk-support

    Emit recordedAt + per-file extension in upload manifest

    - Watcher: every emitted Recording carries RecordedAt, derived from the EPOCH segment of our managed **************** filename, falling back to file mtime for voicemail / legacy files. - Grouper: CallBatch now tracks FileExtensions[] (one per file, parallel to Files[]) and the batch's overall RecordedAt (earliest leg start). Sort key for legs is RecordedAt with FinalizedAt as tiebreaker so the master leg is deterministic. - Uploader: manifest now includes top-level recordedAt and per-file extension. ConversionService consumes both to write the Recording (date_recorded, length from ffprobe) and per-leg RecordingExt rows.

  23. · ConversionService

    Passare i metadati di registrazione a imaging — lunghezza di ffprobe + parsing manifesto

    - No, no. run ffprobe -show entries format=duration sul master Opus/WebM, restituisce ms. 0 = sconosciuto (non fatale). - Ora... * esegue sondaDurationMs sul master per ottenere la lunghezza di registrazione; * parses il manifesto (sent by kamo-asterisk-support) per registratoAt e per-file estensione / dati del canale, cadendo indietro alla riga di staging dataCreated and canale-name parsing for old payloads; # Passa un appuntamento # # registrato # longMs, Estensioni partecipanti) a RecordingImagingService in modo che può scrivere le nuove righe Recording + RecordingExt.

  24. · kamo-shared-library

    Registrazione + RecordingExt entità, RecordingImagingService li scrive

    - Nuova entità di registrazione (UUUID id, IMG ID, IS MASTER, IS VM, EXTENSION, MEMBER ID, LENGTH, DATE RECORDED, DATE CREATED [DB-defaulted via @CreationTimestamp]). Una riga per segreteria finale o registrazione chiamata caricata su imaging. - Nuova entità RecordingExt (UUUID id, RECORDING ID, EXTENSION, MEMBER ID, IS MASTER). Una riga per canale che ha partecipato alla registrazione; la la gamba principale è contrassegnata IS MASTER=true, ogni altra gamba falsa. # Now take a RecordingMetadata # fascio (phoneServerInstanceId, dateRecorded, longMs, partecipanteExtensions) e persiste Registrazione + RegistrazioneExt righe in la stessa transazione del Img/ImgDat. memberId viene risolto per gamba via E' una cosa da fare. Istanza VOIP originaria (null quando non firmata).

  25. · kamo-internal

    Aggiornare le schede di amministrazione della piattaforma per abbinare la struttura della scheda unificata

    Sostituire le due carte stanti (Organizzazioni pagina standalone + Configurazione) con cinque carte corrispondenti alle schede reali: Generale, Organizzazioni, VOIP & SMS, Sistema Utente, e Avanzato — ogni collegamento direttamente al corretto ?tab= param.

  26. · kamo-internal

    Il layout della griglia a tutta larghezza e spostare il trigger di sincronizzazione dalla scheda Avanzata

    - Ridisegnare la scheda VOIP & SMS per utilizzare la larghezza dell'area del contenuto completo: la riga superiore, Elaborazione di registrazione e Programma di sincronizzazione globale siedono fianco a fianco in una griglia a due colonne a lg+ breakpoint - Le schede statistiche Pipeline mostrano conti in diretta con segnali di stato zero ed errore colore codifica; auto-refresh ogni 30s annotato in sottotitolo - La scheda Global Sync consolida le impostazioni di pianificazione, la riga di timestamp di ultima sincronizzazione, e trigger manuale in un pannello; chip abilitato / incollato in testa - Spostare "Force Global VOIP sync" dalla scheda Avanzate (duplica di trigger già presente su VOIP & SMS); Scheda avanzata ora mostra il testo segnaposto

  27. · kamo-internal

    Unisci le organizzazioni nella pagina di configurazione con scheda unificata nav

    Aggiunga le Organizzazioni come un tabellone. (Generale · Organizzazioni · VOIP & SMS · System User · Ordine Avanzato) - Cancellare la pagina standalone - Aggiornare la piattaforma Amministrazione nav in ImpostazioniStatusWindow per elencare tutte le 5 schede come sub-items che punta alla configurazione?tab=... - Fissare il layout su tutte le schede: coerente p: {xs:2, sm:3} imbottitura così il contenuto non viene più eseguito in pareti di carta - Migliorare le schede statistiche GeneralTab con sfondi icona e ritmo di tipografia più stretto - Aggiornamento ImpostazioniVisualizza titolo/sottotitolo per la pagina unificata

  28. · kamo-marketing

    Add Go logo to BUILT WITH banner

  29. · kamo-internal

    PHONE SERVER ID di superficie nella scheda panoramica di installazione del telefono

    Gli operatori che configurano il supporto kamo-asterisk su un host FreePBX devono incollare il VoipProviderInstance UUID corrispondente nel file di configurazione dell'aiutante come PHONE SERVER ID. Fino ad ora hanno dovuto grub attraverso la barra degli URL o la database. Nuova sezione "Phone Server ID" su /settings/features/phone/{id} la panoramica mostra l'UUUID in un campo monospazio di sola lettura con un solo clic copia pulsante (CopyableIdField helper, anche riutilizzabile per futuro simile identificatori).

  30. · kamo-internal

    L'estensione VOIP cliccabile in Interaction Center apre softphone con numero preriempito

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