Changelog
Cosa c'è di nuovo.
Ogni miglioramento alla piattaforma, come si spedisce.
· VOIPService
Sync TeamMember phoneEstensione di lavoro su configurazione VOIP salvare
· SecurityService
Backfill TeamMember phoneEstensione di lavoro da MemberVoipConfig all'avvio
· kamo-internal
Funzioni delle chiamate via cavo impostazioni end-to-end attraverso l'astrazione del fornitore
- voipApi: aggiungi CallFeaturesDto type, getCallFeatures() e setCallFeatures() Chiamate API - useSoftphone: aggiungilo. da API all'avvio; setCallForward/setAutoAnswer azioni persistono tramite API; auto-answer e gli effetti call-forward si attivano sulle chiamate in entrata quando le funzionalità sono attive - SoftphonePanel: rimuovere lo stato della funzione di chiamata solo locale; cavo ingresso numerico al contesto softphone; cavo Rispondere Auto al contesto softphone; rinominare il pulsante nav per 'Manage Extended A/V Impostazioni - La sincronizzazione del cursore audio era già funzionale tramite l'usoAVSettings event bus — nessun cambiamento necessario
· VOIPService
Aggiungi funzionalità di chiamata API — chiama in avanti + auto-ritorno cablato attraverso l'astrazione del fornitore
- Aggiungi CallFeaturesDto e SetCallFeaturesRichiesta POJOs - Aggiungi bandiere di chiamataForward/autoAnswer a ProviderCapabilities - Aggiungi default getCallFeatures/setCallFeatures all'interfaccia PhoneProvider - RingCentral: implementare tramite le Regole di risposta REST API (Incondizionabile) - FreePBX: implementare tramite GraphQL addCallforward mutation - CallFeaturesController: GET/PUT /api/voip/calls/features — DB primario, sincronizzazione nativa del fornitore
· kamo-shared-library
Aggiungere l'entità e il repository di MemberCallFeatures per le preferenze di chiamata in avanti e auto-ritorno
· kamo-asterisk-support
Impegno iniziale — Caricatore di registrazione FreePBX (GO)
Orologi per le registrazioni WAV finite, gruppi multi-leg chiamata gambe di Asterisk UNIQUEID, e carica ogni lotto a APIService /api/voip/registrazioni/upload utilizzando un VOIP RECORDING UPLOADS-scoped Chiave API. I file vengono eliminati dal disco solo dopo che la piattaforma conferma lo storage. Bootstrap fornisce idempotently un utente AMI tramite manager custom.conf e installa MixMonitor() ganci per canale tramite extensions custom.conf, quindi chiede ad Asterisk di ricaricare i moduli dialplan/manager. Entrambi i blocchi gestiti sono circondati da banner chiaramente marcati in modo che le personalizzazione di amministratore sopravvivano. Include Dockerfile, k8s manifesti per k1m1 e k2m1 (Deployment + ConfigMap + "Segreto modello", "****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** della piattaforma, e un README.txt non tecnico per host FreePBX standalone.
· kamo-internal
VOIP RECORDING UPLOADS campo di applicazione + contatori di pipeline di registrazione/tunables
- APIManager: nuova opzione VOIP RECORDING UPLOADS (utilizzata dal supporto kamo-asterisk su host FreePBX per caricare voicemail e registrazioni di chiamata tramite APIService). - VoipSmsTab: nuova scheda "Recording Pipeline" con quattro contatori (voicemail a processo, chiamate al processo, voicemail in errore, chiamate in errore) — rinfresca Ogni 30 anni, usa... Nuova registrazione Scheda di elaborazione con voipVmBatchSize / voipCallBatchSize / voipPollSeconds Tunables. - systemConfigApi: estendere l'aggiornamento() per inviare i nuovi strumenti; aggiungere la registrazioneStats(). - tipi / telefono: SystemConfiguration Dto guadagna i tre nuovi strumenti; VoipRecordingStatsDto aggiunto.
· SecurityService
Stat di registrazione di configurazione di sistema + elaborazioni di registrazione
- E' una cosa da fare. restituisce i quattro contatori esposto sulle impostazioni kamo-internal → Piattaforma → Configurazione → VoIP/SMS scheda (vmPending, callPending, vmError, callError). - PUT /api/security/system-config ora accetta voipVmBatchSize, voipCallBatchSize, voipPollSeconds per DaemonService che registra-processore sintonizzato. - toDto() include i nuovi campi in modo che il frontend possa leggerli indietro.
· DaemonService
RegistrazioneProcessorJob + scorciatoia NATS per caricamenti freschi
- Nuovo lavoro al quarzo RecordingProcessor Tacche di lavoro ogni minuto, spedisce indipendenti VM e chiamate batch contemporaneamente a ConversionService Non e' vero. E' il momento giusto. voipCallBatchSize} come tappi. - Nuovo RecordingReceivedConsumer si iscrive a voip.recording.received NATS soggetto emesso da ConversionService su upload freschi e attiva un'esecuzione immediata, quindi una registrazione appena stabilita inizia l'elaborazione in pochi secondi piuttosto che aspettare sul sondaggio periodico. - Configmap espone daemon.jobs.recordings.cron e il Parla.
· ConversionService
Registrazione ingest + pipeline di elaborazione FFmpeg
- Novità. endpoint stadi multipart uploads inviato da APIService nel secchio MinIO... e crea una riga di staging UnprocessedRecording. Idemponte su ripiani usando (phoneServerId, asteriskUniqueId). - Nuovo punto finale (chiamato DaemonService) drena righe: scarica WAV in scena, mescola le gambe di chiamata in un singolo Opus/WebM master via FFmpeg amix, transcodes per-channel WAVs come tracce accanto al master, e carica tramite RecordingImagingService con VM RECORDING (8) / CALL RECORDING (9) ImageAssocType. - Nuovo wrapper FfmpegService (transcodeToOpusWebm / mixToOpusWebm) con timeout e la pulizia del templo. - L'editore NATS emette voip.recording.received su ogni upload in fase in modo da DaemonService può tagliare il suo sondaggio periodico. - Dockerfile installa ffmpeg nella fase di runtime (alpine ffmpeg navi libopus per impostazione predefinita). - ConfigMap espone E' il momento giusto. (condiviso cross-service) segreto interno) in modo che i nuovi endpoint possano autenticare APIService e Chiamatori DaemonService.
· APIService
VoipRecordingUploadController per upload di supporto kamo-asterisk
POST /api/voip/registrazioni/upload accetta corpi multiparti da supporto kamo-asterisk in esecuzione su host FreePBX. Convalida la X-Api-Key ha il nuovo VOIP RECORDING UPLOADS ****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** inoltra le intestazioni multipart payload + metadati (X-Phone-Server-Id, X-Asterisk-Unique-Id, X-Recording-Kind, X-Primary-Extension) a ConversionService E' il momento giusto
· kamo-shared-library
UnprocessedRecording staging entità, ImgDat tracce, registrazione servizio di imaging
- Fix ImageAssocType ID collisione: VM RECORDING=8, CALL RECORDING=9 (erano entrambi duplicare MY DOCS a 4). - Aggiungi una registrazione master. Per-channel Opus/WebM traccia accanto al concetto di thumbnail esistente. - Aggiungi ImageMimeType.AUDIO WEBM (audio/webm) per i contenitori Opus-in-WebM prodotto dalla pipeline di conversione. - Nuova registrazione non elaborata (UUUID id, IS VM, PHONE SERVER ID, EXTENSION, ASTERISK UNIQUE ID, IS PROCESSED, IS ERROR, ERROR MESSAGE, RESULT IMG ID, DATE CREATED, DATE PROCESSED) staging enti + repository per il kamo-asterisk-support → ConversionService → DaemonService pipeline. - Nuova registrazioneImaging Servizio che carica un master Opus/WebM master in imaging con binari Opus/WebM per canale collegati tramite ImgDat.trackCount. - SystemConfiguration: aggiungi voipVmBatchSize / voipCallBatchSize / voipPollSeconds per i sintonabili del processore di registrazione DaemonService.
· kamo-asterisk-support
Impegno iniziale — Caricatore di registrazione FreePBX (GO)
Orologi per le registrazioni WAV finite, gruppi multi-leg chiamata gambe di Asterisk UNIQUEID, e carica ogni lotto a APIService /api/voip/registrazioni/upload utilizzando un VOIP RECORDING UPLOADS-scoped Chiave API. I file vengono eliminati dal disco solo dopo che la piattaforma conferma lo storage. Bootstrap fornisce idempotently un utente AMI tramite manager custom.conf e installa MixMonitor() ganci per canale tramite extensions custom.conf, quindi chiede ad Asterisk di ricaricare i moduli dialplan/manager. Entrambi i blocchi gestiti sono circondati da banner chiaramente marcati in modo che le personalizzazione di amministratore sopravvivano. Include Dockerfile, k8s manifesti per k1m1 e k2m1 (Deployment + ConfigMap + "Segreto modello", "****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** della piattaforma, e un README.txt non tecnico per host FreePBX standalone.
· kamo-internal
Sostituisci la scheda di contatti di mock con SoftphoneContatti completamente modificati
Estrae un nuovo componente SoftphoneContacts che collega i contatti softphone scheda ai contatti reali API tramite useContacts(). Sostituisce 4 mock hardcoded contatti con dati dal vivo da tutti i libri di contatto. Caratteristiche: - Pillole di filtro del libro e del gruppo con selettori a discesa - Debounced search, ordina per cognome / nome completo - Avatar codificato a colori (hash deterministico), supporto foto - Elenco contatti con il pulsante di accesso rapido Hover-reveal - Vista dettagliata (sostituisce elenco) che mostra telefoni, e-mail, org, note - Modalità di modifica in linea per tutti i campi (telefoni/email multi-valore con add/remove) - Elimina il contatto con la fase di conferma - Stati scheletri vuoti e di carico - "Nuovo contatto" naviga a /contatti? azione=creare Aggiorna i contatti/page.tsx per aprire automaticamente la finestra di dialogo di creazione quando ?action=creare query param è presente (usato dal softphone "New" pulsante).
· kamo-internal
Sostituire l'estensione Chip con il testo in linea accanto al ruolo nel Centro Interazione
· kamo-internal
Rimuovere il campo di estensione del telefono manuale; scrivere l'estensione VOIP attraverso a SecurityService su salvare
· SecurityService
Includi l'estensione di phoneWork nella risposta di dipartimento; accetti il telefonoExtension sul membro PUT
· kamo-shared-library
Add to****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************
· kamo-internal
Filo VAD + push-to-talk; rimuovere le impostazioni non implementabili
- vadAbilitato ora passato come voceDetezione dell'attivitá nella costruzioneAudioConstraints così il browser onora il gioco quando si apre microfono per una chiamata - pushToTalk auto-muta il microfono a chiamata accettare e installa keydown/keyup ascoltatori che non funzionano mentre il tasto hot configurato è tenuto - Impostazioni rimosse che non avevano cablaggio funzionale e non possono essere implementate tramite browser WebRTC API standard: micGain (no GainNode in pipeline SIP), HighPassFilter, noiseGate, vadThreshold, hdVoice, telecameraBackgroundBlur (richiede ML), fotocameraBrightness/cameraContrasto (solo anteprima CSS) - Pulito l'interfaccia AVSettings e DEFAULT AV SETTINGS di conseguenza; griglie di toggle riequilibrate dopo la rimozione
· kamo-internal
Elenco della suoneria girevole con filtro di ricerca
Fare il pannello del catalogo della suoneria corrispondere l'altezza della colonna destra e la pergamena verticalmente quando l'elenco trabocca, così i membri possono navigare come più toni sono aggiunti. Aggiunge un campo di ricerca che filtra per etichetta o nome file, con un Pulsante chiaro e messaggio a stato vuoto.
· kamo-internal
Aggiungi altre sette suonerie al catalogo
Aggiunge Battleship Horn, Demon Horn, Land Line, 1985 Anello, Office Phone, Ringing Old Phone, e Olé sotto /pubblico/suoni/ringtones/ e fili loro in RINGTONE CATALOG così appaiono accanto all'esistente Predefinito / Sci-Fi / Buzzer / Opzioni silenziose sul sottotab Ringtones.
· kamo-internal
Aggiungi le suonerie Sci-Fi e Buzzer al catalogo
Getta due nuovi beni di suoneria in /pubblico/suono/ringtones/ e li registra in RINGTONE CATALOG così appaiono nelle suonerie subtab e può essere impostato come il tono softphone in ingresso predefinito.
· kamo-internal
Layout audio a tre colonne, drop salvato-banner, larghezza di riempimento
Lays the Audio subtab out as Microphone | Speaker | Advanced through the riga completa su schermi lg+ (md ancora le coppie due-up, xs stack). The La scheda avanzata passa a uno stack verticale all'interno della sua colonna più stretta. Rimuove l'inseguimento "Impostazioni salvate automaticamente" footer — il il comportamento è implicito e la carta stava solo prendendo spazio. Forze sezione Pannelli da carta a larghezza: 100% e aggiunge alignItems="stretch" al Griglia di ogni subtab così le carte riempiono sempre il loro bordo di colonna all'edge.
· kamo-internal
Dividere le impostazioni AV in sottotitoli Audio/Video/Ringtones
Riorganizza la scheda Audio/Video in tre sottotitoli interni e laici ogni uno fuori orizzontalmente così le impostazioni si adattano all'interno della viewport senza la parete di scorrimento verticale che avevamo prima. Corregge anche il catalogo della suoneria a puntare sul reale /sounds/ringtone.mp3 asset invece di percorsi fantasma sotto /sounds/ringtones/, quindi anteprime e la sessione softphone sempre on condividere una singola suoneria canonica.
· kamo-internal
Aggiungere Audio / Video Impostazioni scheda e filo in softphone
Aggiunge un negozio di preferenze AV per dispositivo (localStorage, specifica per macchina, non roaming) più una scheda completa su /settings/member/hyd> per configurare e testare microfono, altoparlante, ringer e fotocamera. La finestra degli strumenti softphone, la riproduzione di suoneria e gli adattatori SIP SDK ora onorare queste impostazioni live: dispositivo routing via setSinkId, getUserMedia vincoli (dispositivo + EC/NS/AGC/sample rate), volume tono DTMF, dispositivo ringer + selezione tono, mute-on-join, e le notifiche desktop.
· kamo-internal
Sempre su sessione SIP con auto-popup + suoneria su chiamate in entrata
Il softphone utilizzato per registrare solo mentre la finestra dello strumento popup era aperta — chiudere e le chiamate in entrata sono state silenziosamente perse. Sollevare la sessione in un SoftphoneProvider montato a AuthenticatedToolWrapper, così SIP REGISTER è tenuto continuamente mentre l'operatore è firmato e qualsiasi INVITE in entrata ottiene l'attenzione dell'operatore. - app/hooks/useSoftphone.ts: rinominare il gancio di implementazione per useSoftphoneSession per rafforzare che deve essere montato esattamente una volta per sessione ( possiede le credenziali SIP e il REGISTER). Il nuovo SoftphoneProvider gestisce la sessione gancio una volta, espone lo stato attraverso il contesto, e reagisce ad hasIncoming Chiamata transizioni — apre la finestra degli strumenti softphone tramite uno strumento:aperto evento personalizzato (single-instance, quindi si concentra solo se già aperto) con ID chiamante in il titolo, e gioca /sounds/ringtone.mp3 su un loop fino all'utente accetta/rifiuti/il telecomando si blocca. Uso pubblicoSoftphone() hook reads dal contesto. Passare l'importazione al contesto. # Imbocca l'albero degli attrezzi # SoftphoneProvider così la sessione vive fino a quando lo stato di auth. classico cadenza NA (440Hz + 480Hz, 2s su, 4s silenzio) così audio.loop=true produce un anello naturale/pausa/anello. - 72 KB. I browser possono bloccare il gioco iniziale() fino a quando l'utente non ha eseguito il gesto pagina; l'operatore ha tipicamente cliccato almeno una volta al momento della chiamata arriva, quindi questo è raramente un problema in pratica.
· KlusterServices
Seed pbx.k1.kluster.kamocrm.com come dominio statico
Il softphone del browser ha bisogno di SIP-over-WSS per atterrare su un hostname con un reale TLS cert. Aggiungi il nome host di FreePBX admin / WS a STATIC DOMAINS così il auto-cert seeder disposizioni un per-host Let's Encrypt cert per esso incondizionatamente invece di affidarsi a esso che appare nei registri di accesso Traefik. Una volta che il cert viene rilasciato, il percorso interno temporaneo.kamocrm.com/voip-ws (commesso prima come una soluzione di lavoro) può essere ritirato e il softphone può utilizzare l'URL canonica pbx.k1.kluster.kamocrm.com/ws.
· kamo-register
Utilizzare il nome e la descrizione breve org nella testa HTML
Sostituire la logica del titolo basata su org-API con il sito config.jsonNameShort così il il titolo segue lo stesso modello di altri siti: "Register - {siteNameShort}". Aggiunge la descrizione meta tag da config.json. Rimuove l'importazione inutilizzata di ThemeConfig.
· kamo-login
Utilizzare il nome e la descrizione breve org nella testa HTML
DynamicMetaLoader ora imposta documento.title a "Login - {siteNameShort}" e scrive la descrizione org nel tag meta descrizione. Dati statici layout.tsx fallback aggiornati; rimosso i metadati KamoCRM OG/Twitter.
· kamo-internal
Utilizzare il nome e la descrizione breve org nella testa HTML
DynamicMetaLoader ora imposta document.title al sitoNameShort (was siteName) e scrive la descrizione org nel tag meta descrizione. Fallback statico layout.tsx aggiornato ai valori generici.

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