Changelog
Was ist neu?
Jede Verbesserung an der Plattform, wie sie geliefert wird.
· VOIPService
Sync TeamMember phoneWork-Erweiterung auf VOIP Konfiguration speichern
· SecurityService
Backfill TeamMember phoneWork Erweiterung von MemberVoipConfig zum Start
· kamo-internal
Wire Call-Funktionen Einstellungen Ende-zu-Ende durch Provider-Abstraktion
- voipApi: hinzufügen Sie CallFeaturesDto Typ, getCallFeatures() und setCallFeatures() API-Aufrufe -Softphone nutzen: **************** Zustand geladen hinzufügen von API beim Start; setCallForward/setAutoAnswer-Aktionen bestehen über API; Auto-Antwort und Call-Forward-Effekte auslösen bei eingehenden Anrufen, wenn Funktionen aktiv sind - SoftphonePanel: entfernen Sie lokal-nur Anruf-Funktion Zustand; Wire Call Forward umschalten und Zahleneingabe in den Softphone-Kontext; per Kabel Auto-Anwender in den Softphone-Kontext; nv.-Button in 'Gefahrene A/V-Einstellungen' umbenennen - Audio-Schieber-Synchronisation war bereits über useAVSettings Event-Bus . keine Änderung erforderlich
· VOIPService
Hinzufügen von Anruffunktionen API - Anruf vorwärts + Auto-Antwort über Provider-Abstraktion verdrahtet
- Hinzufügen von CallFeaturesDto und SetCallFeaturesRequest POJOs - CallForward/autoAnswer-Flags zu ProviderCapabilities hinzufügen - Default getCallFeatures/setCallFeatures zu PhoneProvider-Schnittstelle hinzufügen - RingCentral: implementieren über Beantwortungsregeln REST API (UnconditionalForwarding) - FreePBX: implementieren über GraphQL addCallforward-Mutation - CallFeaturesController: GET/PUT /api/voip/calls/features - DB primär, Provider-native Sync
· kamo-shared-library
Hinzufügen von MemberCallFeatures Entität und Projektarchiv für Call Forward und Auto-Antwort-Einstellungen
· kamo-asterisk-support
Initial Commit - FreePBX Aufnahme-Uploader (GO)
Uhren ************ für fertige WAV-Aufnahmen, Gruppen Multi-Leg-Call-Leitbeine von Asterisk UNIQUEID, und lädt jede Charge auf APIService /api/voip/recordings/upload mit einem VOIP_RECORDING_UPLOADS-scoped API-Schlüssel. Dateien werden von der Festplatte erst gelöscht, nachdem die Plattform die Speicherung bestätigt. Bootstrap idempotentell stellt ein AMI-Benutzer über manager_custom.conf und installiert MixMonitor() per-Channel-Hake über extensions_custom.conf, dann fordert Asterisk auf, seine Wählungsplanung/Manager-Module neu zu laden. Beide bewirtschafteten Blöcke sind von deutlich markierten Bannern umgeben, so dass Admin-Anpassungen überleben. Inklusive Dockerfile, k8s manifests für k1m1 und k2m1 (Einsatz + ConfigMap + Geheime Vorlage), ************ Spiegelung des Rests der Plattform und eine nicht-technische README.txt für eigenständige FreePBX-Hosts.
· kamo-internal
VOIP_RECORDING_UPLOADS Umfang + Aufzeichnung Pipeline-Konten/Tubares
- APIManager: neue Option VOIP_RECORDING_UPLOADS (verwendet durch Kamo-asterisk-Unterstützung auf FreePBX-Hosts, um Voicemail und Anrufaufzeichnungen über APIService hochzuladen. - VoipSmsTab: neue "Recording Pipeline"-Karte mit vier Zählern (Voicemails zu Prozess, Anrufe zu verarbeiten, Sprachnachrichten im Fehler, Anrufe in Fehler) - aktualisiert alle 30er Jahre, nutzt ************ Neu "Recording Verarbeitung" Karte mit voipVmBatchSize / voipCallBatchSize / voipPollSeconds Abstimmgeräte. - systemConfigApi: update() erweitern, um die neuen abstimmungsfähigen Dateien zu senden; recordingStats( hinzufügen). - Typen/Telefon: SystemConfigurationDto erhält die drei neuen Abstimmgeräte; VoipRecordingStatsDto hinzugefügt.
· SecurityService
System-config Aufnahmestatistiken + Aufzeichnungsverarbeitung abstimmbare
- GET ************ gibt die vier Zähler zurück ausgesetzt auf den kamo-internen Einstellungen . Plattform . Konfiguration . VoIP/SMS unter (vmPending, callPending, vmError, callError). - PUT /api/security/system-config akzeptiert jetzt voipVmBatchSize, voipCallBatchSize, voipPollSeconds für DaemonService Recording-Prozessor-Tuner-Tuner-Tune. - toDto() enthält die neuen Felder, damit das Frontend sie wieder lesen kann.
· DaemonService
RecordingProcessorJob + NATS Shortcut für frische Uploads
- Neuer Quarz-Job RecordingProcessorJob tickt jede Minute, Sendungen unabhängig VM und Call Chargen gleichzeitig zu ConversionService ************ mit ************ voipCallBatchSize als Kappen. - New RecordingReceivedConsumer abonniert voip.recording.recetives NATS-Betreff emittiert von ConversionService auf frischen Uploads und löst einen sofortigen Lauf aus, so eine frisch inszenierte Aufnahme beginnt innerhalb von Sekunden zu verarbeiten, anstatt zu warten auf der periodischen Umfrage. - Configmap entlarvt daemon.jobs.recordings.cron und die **************** es spricht.
· ConversionService
Aufnahmeaufnahme + FFmpeg Verarbeitungspipeline
- Neue ************ Endpunktstufen mehrteilige Uploads weitergeleitet von APIService in MinIO bucket ************ und erstellt eine UnprocessedRecording-Zersatzzeile. Idempotent auf Retries mit (phoneServerId, asteriskUniqueId). - Neuer ************ Endpunkt (von DaemonService genannt) Entwässert Zeilen: Downloads inszenierte WAVs, mischt Call-Beins in eine einzige Opus/WebM Master via FFmpeg amix, transcodes per-channel WAVs als Tracks neben der Master und Uploads über RecordingImagingService mit VM_RECORDING (8) / CALL_RECORDING (9) ImageAssocType. - Neuer FfmpegService Wrapper (transcodeToOpusWebm / mixToOpusWebm) mit Timeout und tempfile Bereinigung. - NATS Publisher emittiert voip.recording.receed auf jeder inszenierten Upload so DaemonService kann seine periodische Umfrage abkürzen. - Dockerfile installiert 08.09.2018peg in der Laufzeit-Phase (alpine 08.09.2018peg Schiffe libopus standardmäßig). - ConfigMap stellt ************ aus (gemeinsamer Cross-Service intern-call secret) damit die neuen Endpoints APIService authentifizieren können und DaemonService Anrufer.
· APIService
VoipRecordingUploadController für Kamo-Sternisk-Upload-Uploads
POST /api/voip/recordings/upload akzeptiert mehrteilige Körper von Kamo-Sternisk-Unterstützung läuft auf FreePBX-Hosts. Validiert den X-Api-Key hat die neue VOIP_RECORDING_UPLOADS Umfang (Wiederverwendung des ************ Validierungs-Cache), dann leitet die mehrteiligen Nutzlast + Metadaten-Header weiter (X-Phone-Server-Id, X-Asterisk-Unique-Id, X-Recording-Kind, X-Primary-Extension) zu ConversionService ********************
· kamo-shared-library
UnprocessedRecording Staging Entität, ImgDat Tracks, Aufnahme Bildgebung Service
- Beheben ImageAssocType ID Kollision: VM_RECORDING=8, CALL_RECORDING=9 (waren beide Duplizierung von MY_DOCS bei 4). - Fügen Sie ************ hinzu, damit eine Master-Aufnahme tragen kann pro-Kanal Opus/WebM Tracks neben dem bestehenden Vorschaukonzept. - ImageMimeType.AUDIO_WEBM (audio/webm) für die Opus-in-WebM-Container hinzufügen erzeugt durch die Umwandlungsleitung. - Neue UnprozessedRecording (UUID-ID, IS_VM, PHONE_SERVER_ID, EXTENSION, ASTERISK_UNIQUE_ID, IS_PROCESSED, IS_ERROR, ERROR_MESSAGE, RESULT_IMG_ID, DATE_CREATED, DATE_PROCESSED) Inszenierungseinheit + Repository für die Kamo-asterisk-Unterstützung - ConversionService - DaemonService-Pipeline. - Neuer RecordingImagingService, der einen Master Opus/WebM-Master zur Bildgebung hochlädt mit per-channel Opus/WebM Tracks, die über ImgDat.trackCount angehängt werden. - SystemKonfiguration: hinzufügen voipVmBatchSize / voipCallBatchSize / voipPollSeconds für DaemonService Recording-Prozessor-Tuner-Tunables.
· kamo-asterisk-support
Initial Commit - FreePBX Aufnahme-Uploader (GO)
Uhren ************ für fertige WAV-Aufnahmen, Gruppen Multi-Leg-Call-Leitbeine von Asterisk UNIQUEID, und lädt jede Charge auf APIService /api/voip/recordings/upload mit einem VOIP_RECORDING_UPLOADS-scoped API-Schlüssel. Dateien werden von der Festplatte erst gelöscht, nachdem die Plattform die Speicherung bestätigt. Bootstrap idempotentell stellt ein AMI-Benutzer über manager_custom.conf und installiert MixMonitor() per-Channel-Hake über extensions_custom.conf, dann fordert Asterisk auf, seine Wählungsplanung/Manager-Module neu zu laden. Beide bewirtschafteten Blöcke sind von deutlich markierten Bannern umgeben, so dass Admin-Anpassungen überleben. Inklusive Dockerfile, k8s manifests für k1m1 und k2m1 (Einsatz + ConfigMap + Geheime Vorlage), ************ Spiegelung des Rests der Plattform und eine nicht-technische README.txt für eigenständige FreePBX-Hosts.
· kamo-internal
Mockkontakte durch voll funktionsfähige SoftphoneContacts ersetzen
Extrahiert eine neue SoftphoneContacts-Komponente, die die Softphone-Kontakte verkabelt Registerkarte zur realen Kontakt-API über useContacts(). Ersetzt 4 Hardcoded Mock Kontakte mit Live-Daten aus allen Kontaktbüchern. Ausstattung: - Buch- und Gruppenfilterpillen mit Dropdown-Selektoren - Debounced search, sortieren Sie sich mit dem letzten/ersten/voller Namen - Farbkodierte Avatar Initialen (deterministischer Hash), Fotounterstützung - Kontaktliste mit Hover-Reveal Quick-Call-Button - Detailansicht (Ersatzliste) mit Telefonen, E-Mails, org, Notizen - Inline-Bearbeitungsmodus für alle Felder (Telefone/E-Mails Multi-Wert mit Add/Entfernung) - Kontakt mit Bestätigungsschritt löschen - Leer- und Lade-Skelett-Zustände - "Neuer Kontakt" navigiert zu /contacts?action=create Updates Kontakte/page.tsx um den Dialog erstellen zu können ?action= query param ist vorhanden (verwendet durch die Softphone "Neu"-Taste).
· kamo-internal
Erweiterung Chip mit Inline-Text neben Rolle in Interaction Center ersetzen
· kamo-internal
Entfernen Sie manuelle Telefon-Erweiterung Feld; schreiben Sie VOIP-Erweiterung durch SecurityService auf speichern
· SecurityService
Füge TelefonWork-Erweiterung in by-Department-Antwort; akzeptieren phoneWorkExtension auf Mitglied PUT
· kamo-shared-library
************-Hilfen zu TeamMember hinzufügen
· kamo-internal
Draht VAD + Push-to-Talk; entfernen Sie nicht umstechliche Einstellungen
- vadEnabled jetzt als VoiceActivityDetection in buildAudioConstraints so übergeben der Browser ehrt den Knüppel beim Öffnen von Mikrofon für einen Anruf - pushToTalk auto- mues das Mikrofon beim Aufruf akzeptieren und installiert keydown/keyup Zuhörer, die sich ausrichten, während der konfigurierte Hotkey gehalten wird - Einstellungen entfernt, die keine funktionale Verkabelung hatten und nicht implementiert werden können über Standard-Browser WebRTC APIs: micGain (kein GainNode in SIP-Pipeline), highPassFilter, noiseGate, vadThreshold, hdVoice, cameraBackgroundBlur (fordert ML), cameraBrightness/cameraContrast (nur CSS-Vorschau) - Aufräumte AVEinstellungen Schnittstelle und DEFAULT_AV_SETTINGS entsprechend; Rebilanzierte Kellnergitter nach Umzügen
· kamo-internal
Scrollbare Klingeltonliste mit Suchfilter
Machen Sie die Klingelton-Katalog-Panel entsprechen der rechten-Spalte-Höhe und Scroll vertikal, wenn die Liste überläuft, so können die Mitglieder als mehr Töne navigieren werden hinzugefügt. Fügt ein Suchfeld hinzu, das nach Beschriftung oder Dateiname filtert, mit einem Klarer Knopf und eine empty-state-Nachricht.
· kamo-internal
Sieben weitere Klingeltöne zum Katalog hinzufügen
Fügt Schlachtschiff Horn, Dämon Horn, Land Line, 1985 Ring, Office Phone, Ringing Old Phone, und Olé unter /öffentlich/sounds/ringtones/ und Drähte sie in RINGTONE_CATALOG, so dass sie neben dem bestehenden erscheinen Default / Sci-Fi / Buzzer / Silent Optionen auf dem Singtones subtab.
· kamo-internal
Sci-Fi und Buzzer Klingeltöne zum Katalog hinzufügen
Drops zwei neue Klingelton-Assets unter /public/sounds/ringtones/ und Registriert sie in RINGTONE_CATALOG, so dass sie in den Ringtones erscheinen subtab und kann als Standard-einkommende Softphone-Tön eingestellt werden.
· kamo-internal
Dreispalten-Audiolayout, Drop-Ste-Banner, Füllbreite
Laicht den Audio-Subtab als Mikrofon | Lautsprecher | Fortgeschritten über die volle Reihe auf lg+ Bildschirmen (md noch pairet sie zwei-up, xs Stapel). Die Fortgeschrittene Karte wechselt zu einem vertikalen Stapel innerhalb seiner schmaleren Spalte. Entfernt die hintere "Einstellungen automatisch gespeichert" Fußer Verhalten ist implizit und die Karte nahm nur Platz. Erzwingt SektionCard-Panels auf Breite: 100% und fügt alignItems="stretch" hinzu zu jedem Subtab's Grid, so dass Karten immer ihre Spalte Kante-zu-Redge füllen.
· kamo-internal
AV-Einstellungen in Audio/Video/Ringtones subtabs
Reorganisiert die Registerkarte Audio/Video in drei interne Subtabs und legt jeweils horizontal, so Einstellungen passen innerhalb des viewport ohne die Wand des vertikalen Scrollings, die wir vorher hatten. Befestet auch den Klingelton-Katalog, um auf den echten zu zeigen /sounds/ringtone.mp3 Asset statt Phantom Pfade unter /sounds/ringtones/, also Vorschauen und die immer eingeschaltete Softphone-Session teilen Sie sich einen einzigen kanonischen Klingelton.
· kamo-internal
Audio / Video-Einstellungen Registerkarte hinzufügen und in Softphone verdrahten
Fügt ein pro-Gerät AV-Einstellungsspeicher hinzu (localStorage, maschinenspezifisch, nicht Roaming) plus eine voll funktionsfähige Registerkarte auf /settings/member/<id> für Konfiguration und Testen von Mikrofon, Lautsprecher, Ringer und Kamera. Das Softphone-Tool-Fenster, die Klingeltonwiedergabe und die SIP SDK-Adapter jetzt diese Einstellungen live einräumen: Geräteführung über setSinkId, getUserMedia Einschränkungen (GerätId + EC/NS/AGC/Probesatz), DTMF Tonvolumen, Ringer-Gerät + Tonauswahl, stumme-on-join, und Desktop-Benachrichtigungen.
· kamo-internal
Always-on SIP-Sitzung mit Auto-Popup + Klingelton auf eingehenden Anrufen
Das Softphone verwendet, um nur zu registrieren, während das Popup-Tool-Fenster geöffnet war schließen und eingehende Anrufe wurden stillschweigend verpasst. Heben Sie die Sitzung in eine SoftphoneProvider montiert bei AuthenticatedToolWrapper, so dass SIP REGISTER ist gehalten kontinuierlich, während der Betreiber angemeldet ist und jede eingehende INVITE bekommt die Aufmerksamkeit des Betreibers. - app/hooks/useSoftphone.ts: den Implementierungshaken umbenennen useSoftphoneSession zu verstärken, dass es genau einmal montiert werden muss pro Sitzung (es besitzt die SIP-Anmeldeinformationen und den REGISTER). - **************** neue SoftphoneProvider läuft die Sitzung Haken einmal, entlarvt den Zustand über Kontext, und reagiert auf hasIncomingCall Übergänge - knallt das Softphone-Tool-Fenster über ein Tool: Custom Event öffnen (Einzel-in-Stanz, so dass es nur konzentriert, wenn bereits geöffnet) mit Anrufer-ID in der Titel und spielt /sounds/ringtone.mp3 auf einer Schleife, bis der Benutzer akzeptiert/lehnt/die Fernbedienung hängt auf. Public useSoftphone() Hook liest aus dem Kontext. - ************ schalten Sie den Import in den Kontext. - **************** wickeln den Werkzeugbaum mit SoftphoneProvider so die Sitzung lebt so lange wie auth Zustand. klassische NA-Trittänglichkeit (440Hz + 480Hz, 2s auf, 4s Stille) so audio.loop=true ergibt ein natürliches Ring/Pause/Ring-Muster. 72 KB. Browser können die anfängliche Wiedergabe blockieren(), bis der Benutzer auf die gestikuliert hat Seite; der Operator hat in der Regel mindestens einmal durch die Zeit eines Anrufs geklickt kommt, so ist dies selten ein Thema in der Praxis.
· KlusterServices
Seed pbx.k1.kluster.kamocrm.com als statische Domäne
Das Browser-Softphone braucht SIP-over-WSS, um auf einem Hostname mit einem echten TLS cert. Fügen Sie den FreePBX Admin / WS Hostname zu STATIC_DOMAINS hinzufügen, so dass auto-cert besender Bestimmungen ein pro-Host Let's Encrypt cert für sie unbedingt, anstatt sich darauf zu verlassen, dass es in Traefik-Zugangsprotokollen erscheint. Sobald das Zertifikat ausgestellt ist, der temporäre internal.kamocrm.com/voip-ws path (fwieder als Workaround verpflichtet) kann in den Ruhestand gestellt werden und die Softphone-Distanz verwenden Sie die kanonische pbx.k1.kluster.kamocrm.com/ws URL.
· kamo-register
Org-Nutzung von Name und Beschreibung in HTML-Kopf
Ersetzen org-API-basierte Titellogik mit config.json siteNameShort so die Titel folgt dem gleichen Muster wie andere Websites: "Registrieren - {siteNameShort]". Fügt Beschreibungs-Metag von config.json hinzu. Entfernt ungenutzte VerwendungThemeConfig Import.
· kamo-login
Org-Nutzung von Name und Beschreibung in HTML-Kopf
DynamicMetaLoader setzt nun document.title auf "Login - {siteNameShort" ein und schreibt die org-Beschreibung in das Meta Beschreibungs-Tag. Statische layout.tsx Fallback aktualisiert; entfernte hartkodierte KamoCRM OG/Twitter Metadaten.
· kamo-internal
Org-Nutzung von Name und Beschreibung in HTML-Kopf
DynamicMetaLoader setzt jetzt document.title to siteNameShort (was siteName) und schreibt die org-Beschreibung in das Meta Beschreibungs-Tag. Statisches Layout.tsx Fallback aktualisiert auf generische Werte.

Euer Universum wartet.
Fügen Sie Produkte hinzu, wann immer Sie möchten – keine Migration, keine neuen Anmeldungen.
Für immer kostenlos – keine Kreditkarte erforderlich