Changelog
Co nowego.
Każde ulepszenie platformy, jak to wysyła.
· kamo-internal
Historia klasy produkcyjnej + karty poczty głosowej z narzędziem do odtwarzania multimediów
Zakładka Historia (SoftphoneHistoryTab.tsx): - Nieskończony przewijak przez IntersectionObserver wewnątrz kontenera przewijania panelu - Chipy filtracyjne: Wszystkie / Przyjazdy / Wyjazd / Missed / Nagrane - Ikona nagrywania w akcjach wiersza, gdy strona obrazowania ma wiersz nagrywania - Menu przelewu Per-row (Dodaj do kontaktów) - Click-to-call back przez istniejący dialpad Zakładka poczty głosowej (SoftphoneVoicemailTab.tsx): - Nieskończony przewijak, układy filtracyjne (wszystkie / Nieodczytane / Has audio) - Per-row Play / Oddzwoń / Więcej akcji - Auto-mark-read w grze - Okno dialogowe usuwania dwuopcji: Archiwum (miękkie, wszystkie użytkowników) vs trwałe usunięcie (wyglone przez VOIP_VOICEMAIL_PERMANENT_DELETE w prawo; wraca do stanu wyłączonego dla użytkowników bez niego) - Przycisk na wszystko zbędny z nieopową, gdy zerowa afordancja Narzędzie wyskakujące okienko MediaPlayer - Audio: zsyntetyzowany szorowa w stylu falowym, click-to-ssek, Replay10/Forward10, szybkość odtwarzania (0,5x-2x), pętla, głośność + wyciszanie, urządzenie wyjściowe honorowane z ustawień AV - Wideo: zamknięty widok, PiP, pełnoekranowy, ten sam płuczeń + sterowanie - Selektron wielościeżkowy do nagrań połączeń (master + każda noga kanałowa) - Pobierz - Dwa tryby źródłowy: voipApi nagrywanie (call/VM) lub zasób obrazowania przez imgId - Zarejestrowany w narzędziach/regicie/rejestracjach.ts jako wieloinstancja Hak + hydraulika: - useSoftphone eksponuje pagowane historię + wiadomości głosowe (loadMore, hasMore, isLoading) oraz działania archiwalne / trwałe - voipApi zyskuje lookupRecording, getRecordingMetadata, archiveVoicemail, paginated getVoicemails - /api/voip proxy przekazuje ciała audio/wideo/octet-stream z nienaruszonym (bez buforowania), więc peeling elementów multimedialnych - Nowości - przesyła do nowego punktu końcowego strumieniowego DocsService z Range - VOIP_VOICEMAIL_PERMANENT_DELETE dodany do frontendu RoleRightType rejestruje więc sprawdźWartości bramek usuwania UI
· InitializerService
Migracyjny runner dla rejestrujących kolumny dostawcy-lookup + kolumny archiwum VM
Dodaje RECORDINGS.provider_instance_id (UUUID) i provider_external_id (VARCHAR(64)) oraz złożony indeks idx_recordings_provider_lookup używany przez masowy punkt końcowy punktu końcowego karty Historia softphone. Dodaje również PHONE_VOICEMAIL.is_archived + data_archived dla nowego przepływu miękkiejarchii. Wlewki wszelkie istniejące wcześniej RECORDINGS / RECORDING_EXTS wiersze w tym samym przełęczy - naturalnie idempotent (seksdykat pasuje tylko do wierszy, których dostawca_external_id jest nadal NULL, co nie nastąpi po tym, jak ConversionService znajduje się na nowej ścieżce kodu). Zamówienie 35 — po numerze (30), więc tabele nagraniowe istnieją przed lądowaniem ALTERów.
· ConversionService
Persist providerInstanceId + dostawcaExternalId na nagrywaniu przy połkowaniu
X-Phone-Phone-Id i X-Asterisk-Unique-Id (już w UnprocessedRecording) do nowych pól RecordingMetadata, więc wiersze połączeń / poczty głosowej w systemie obrazowania przenoszą klucz łącznikowy z powrotem do wiersza dostawcy źródła. W przypadku poczty głosowej pomocnik wysyła surową nazwę bazy plików (np. msg0000); usuwamy prefiks msg i wiodące zera, aby przechowywany klucz odpowiada temu, co Płytowy REST API FreePBX zwraca jako identyfikator wiadomości.
· DocsService
Dodawanie - za pomocą obsługi HTTP Range
Ogólny punkt końcowy strumieniowego dla zasobów obrazowania audio / wideo, używany przez narzędzie kamo-internal MediaPlayer. Ponowne wykorzystanie autoryzacji ImageService (tak samo jak /download/...), ale strumienie z Accept-Ranges + Content-Range, aby elementy multimedialne mogły się szorować bez ładowania pełnego pliku.
· VOIPService
Nagrywanie odtwarzania, archiwum poczty głosowej, pagowana wiadomość głosowa, wzbogacanie historii
- Nowy Rejestrator z rozmaitością, dźwiękiem strumieniowym dla master + per-channel i metadanemi dla okna narzędzia do odtwarzacza multimedialnego - CallController.getCallHistory / getVoicemails wzbogaca każdy rząd o nagrywanie obrazuId za pośrednictwem nowego RecordingLookupService — pojedyncza podróż w obie strony, bez N+1 - PhoneProvider.getVoicemails teraz przyjmuje (członkot Id, strona, rozmiar); FreePBX paginates klient-side z jednego pobranego, RingCentral używa natywnego pisania, KamoPBX nadal rzuca NotSupported - Poczta końcowa poczta głosowa (miękka przez PhoneVoicemail.isArchived) i trwałe zamknięcie przez VOIP_VOICEMAIL_PERMANENT_DELETE — bogiActive bypass wymaga zarówno kwalifikowalności GD, jak i aktywne przełączanie - PhoneProvider zyskuje InstanceId(), dzięki czemu kontrolerzy mogą rozwiązać klucz do nagrywania odnośników bez drugiego połączenia fabrycznego
· kamo-shared-library
Klucze do odszukajenia dostawcy w Nagrywaniu, archiwum poczty głosowej, strumieniowaniu MinIO
- Nagrywanie: dodaj dostawcaInstanceId + dostawcaExternalId do przyłączenia się do dostawcy call-history / voicemail rows z powrotem do zasobów obrazowania - PhoneVoicemail: add isArchived + dateArchived dla miękkiego ukrycia z listwch miękkich - RoleRightType: dodaj VOIP_VOICEMAIL_PERMANENT_DELETE (bramy destrukcyjne usuwanie; archiwum pozostaje dostępne dla wszystkich) - MinIOStorageSUŻNANIE: dodaj openRange() + RangeStream, aby punkty końcowe audio / wideo mogły honorować zakres HTTP - RecordingImagingSUŻNNIEJNE: dostawca wątków id + zewnętrzny id przez RecordingMetadata do wiersza nagrywania przy połykaniu
· kamo-internal
Dodaj zakładkę Historia — pagowana linia czasu audytu z wyszukiwaniem i filtrami
- LeadHistoryPanel: lepki pasek narzędzi filtra z odrzuconym wyszukiwaniem, filtry, tabela MUI z paginacją, kolorowe chipy zdarzeń, rozdzielczość nazwy wiązki do przydziału / konta - leadApi: getLeadHistory() i getLeadHistory() z pełną obsługą query-param - LeadHistoryEntry, LeadHistoryAktor, LeadHistoryFieldMeta, LeadHistoryPageResponse, LeadHistoryFiltersResponse - Trasy proxy Next.js dla : ? i / filtry - LeadViewClient przewodowy do renderowania LeadHistoryPanel, gdy zakładka Historia jest aktywna
· SecurityService
Dodaj GET /'id'/historia i /'id'/historia/historia/filters punkty końcowe
Paginated, filtrowalny, przeszukiwalny punkt końcowy historii z ładowaniem aktora wsadowego (bez N + 1). Filtry punktów końcowych zwraca różne pola używane, wszystkie pola rejestrowe, odrębne podmioty i wszystkie typy zdarzeń. Wszystkie mutujące punkty końcowe przekazują teraz powołaniu jako aktora do LeadHistoryService za atrybucję.
· kamo-shared-library
Dodaj dziennik audytu lead-historia — podmiot, rejestr, usługa, DTO, leadService haczyki
- Podmiot leadHistory (UID PK, zwykłe długie FK – brak ograniczeń FK, aby umożliwić usuwanie leadów / konwersję) - LeadHistoryEventType enum z etykietami do odczytu ludzkiego - LeadHistoryFieldRegistry: pojedyncze źródło prawdy dla śledz nr 55: dodanie pola ołowiu to jedna linia - LeadFidDSkrypt (klucz, etykieta, kategoria, ekstraktor) - LeadHistorySUZDU: snapshot/diff pipeline, - paginated+ filtrowane znaleziskaHistoria, wyraźne pola / aktorzy do rozwijania filtrów - LeadHistoryDTO z zagnieżdżonym ActorDTO; wszystkie długie identyfikatory serializowane jako String dla precyzyjnego bezpieczeństwa karaluchbu JS - LeadService: haczyki historii na tworzeniu, aktualizowaniu, usuwaniu, przypisać, przypisaćLicztoru, nieprzypisaćLeadAccount
· SecurityService
Wire LeadHistorySert śledzenie aktora do LeadController
· kamo-internal
Dodaj interfejs użytkownika lead-count, system walutowy, przypisywanie / nowe strony konta, ustawienia pola walutowego
· SecurityService
Dodaj punkty końcowe przydziału konta lead, update AccountController for CurrencyType
· kamo-shared-library
Dodaj CurrencyType enum, zaktualizuj CountryType z walutą podstawową, dodaj walutę do konta / organizowania, dodaj przypisanie przypisania konta lead-acount do LeadService
· kamo-internal
Etykieta typu dynamicznego w tytule strony Moje konto
Tytuł jest teraz "Mój "Mąsto-Członek|Team Member" przy użyciu konfigurowanego org Etykiety behawioralne, przełączanie automatycznie po załadowaniu typu członka.
· kamo-internal
Przenieś przycisk Utwórz dokument na pasku narzędzi DocManager
Przycisk był dostępny tylko na /doc/manager za pośrednictwem rekwizytu akcji. Przeniesiono całą logikę (stan, obsługuje, DOC_TYPES, menu) do DocManager Pojawia się w każdej osadzonej instancji. Uproszczona strona.tsx po prostu Wykonaj DocManager bez rekwizytu akcji.
· kamo-internal
Przenieś adres do 3-kolumnowego wierszy z informacjami ołowiu i podstawowym kontaktem
· kamo-internal
Wsparcie międzynarodowe — CountrySelect, LanguageSelect, SubdivisionField we wszystkich formach
- Dodaj wielokrotnego użytku CountrySelect (207 krajów, ikony flag), LanguageSelect (26 języków, ikon flag), SubdivisionField (rozwijanie państwa USA z flagami; inne kraje pokazują oznakowane pole tekstowe) - Dodaj stałe krajowe (countries.ts, languages.ts, usStates.tts, timezones.ts) - Widok zwiania leadów Zakładka Szczegóły: na kartę w miejscu edycji z polami - Formularz tworzenia leadów: pełne podziały kraju/rozwinięcie/strefy czasowej zastępujące ograniczone listy wliczkowane - Ustawienia marki LabelManager: domyślny język org w sekcji 8, CountrySelect+SubdivisionField pod adresem - ContactInfoStep (magard tworzenia sieci): CountrySelect+SubdivisionField zastępujące ograniczone wybrane - MyAccountTab: CountrySelect+Subdivision Pozycja zastępująca pola zwykłego tekstu - typy/liads.ts: dodaj pola kraju i podziału
· kamo-shared-library
Dodaj międzynarodowe wsparcie — Kraj wiodący/podstawa/strefa czasowa, język org, CountryType is Province
- CountryType: add PROVINCE_NAMES set, isProvince(), getSubdivisionLabel() - Organizacja: dodaj język (pola angażowania) - Ołów: dodaj kraj (CountryType), podział (String), pola strefy czasowej (TimezonType) - dodaj kraj, podział, strefy czasowe pola smyczkowe - LeadService.createLead: obsługa nowych pól; domyślny język + kraj z ustawień org - LeadService.updateProwadzenie: obsługa nowych pól - dodaj język touchedKey obsługuje
· kamo-internal
ASSIGN_LEADS w prawo, filtr agenta nieprzypisany, oczyszczanie kolumny siatki
- Opcja filtra agenta Bramy 'Unassigned Leads' za ASSIGN_LEADS w prawo - "All Leads" wyklucza nieprzypisane tropy dla członków bez prawa - Usuń ulicę, produkt, kolumny źródłowe; usuń rozwijanie filtrów produktów / źródło - Usuń kolumnę firmy; Kolumna kontakt pokazuje nazwę firmy, spada z powrotem do nazwy kontaktu - Kolumna sprzedawcy pokazuje podpogląda instrument z produktem – Szczegóły źródła - Kolumny daty zrzucany prefiks w dni powszednie, skurcz z 170px do 140px - DateTimeDisplay: dodaj programWeekday prop (default false)
· kamo-shared-library
Dodaj ASSIGN_LEADS w prawo (ID 137) w sekcji CRM
· kamo-internal
Dodaj pole do pola do sekcji Market & Assignment na /leads/new
- Oceń aktywnych członków zespołu od ? na górze - Członkowie grup w departamencie z alfabetycznie posortowanych działów i członków - Formatuje nazwy jako "Ostatnia, pierwsza"; pierwsza opcja to "Auto Assign / Unassigned" - Ponowne zamówienia pól sekcji: Rynek wiodący, Przyznacz do, Najlepszy czas kontaktu, Sprzedawca, Produkt, Typ Perspektywy (wszystkie lg-4) - Fixes leadApi.ts do wysłania przydzielonegoTeamMemberId zamiast pola przydzielonego - Dodaje przydzielonegoTeamMemberId do typu Lead
· kamo-asterisk-support
Emit nagranePrzedłużenieAt + na plik pliku w przesłaniu
- Obserwator: każde emitowane nagranie przenosi RecordedAt, pochodzące z EPOCH segment naszego zarządzanego ;) Nazwa pliku, powrót do pliku mtime dla poczty głosowej / starszych plików. - Grouper: CallBatch teraz śledzi FileExtensions[] (jeden na plik, równoległy Pliki[]) i ogólne RecordedAt (najwłaściwszy start nóg). Kluczem do sortowania dla nóg jest RecordedAt with FinalizedAt jako tiebreaker Mistrzowska noga jest deterministyczna. - Przesłanie: manifest zawiera teraz najwyższy poziom zarejestrowanyAt i na plik Przedłużenie. ConversionService zużywa oba, aby napisać Nagrywanie (date_recorded, długość od ffprobe) i rzędy na nogi.
· ConversionService
Pass Recording metadane do obrazowania — długość ffprobe + analizowanie manifestów
- - działa ffprobe -show_entries format-duration Na master Opus/WebM, powraca ms. 0 - nieznane (nieś śmiertelne). - Teraz: - uruchamia sonbeDurationMs na master, aby uzyskać długość nagrania; - analizuje manifest (wysłany przez kamoasterisk-support) dla zarejestrowaneAt i przekroczenie / dane kanału, powrót do rzędu inscenizacji dataStworzyły i channel-name parsowanie dla starszych ładunków; - przechodzi datę - nagrane, DługośćMs, uczestniczące rozszerzenia) do RecordingImagingService, więc Może napisać nowe wiersze nagrywania + RecordingExt.
· kamo-shared-library
Nagrywanie + Nagrywanie Podmioty, RecordingImagingService je pisze
- Nowy podmiot nagrywający (UUID id, IMG_ID, IS_MASTER, IS_VM, EXTENSION, MEMBER_ID, LENGTH, DATE_RECORDED, DATE_CREATED [domyślnie DDB za pośrednictwem .CreationTimestamp]). Jeden wiersz na sfinalizowany pocztę głosową lub nagrywanie połączeń przesłany na obrazowanie. - Nowy podmiot RecordingExt (UID id, RECORDING_ID, EXTENSION, MEMBER_ID, IS_MASTER). Jeden wiersz na kanał, który uczestniczył w nagraniu; Mistrzowska noga jest oznaczona IS_MASTER-true, każda inna noga fałszywa. - Teraz pobiera RecordingMetadata pakiet (fonServerInstanceId, dataRecorded, lengthMs, Uczestniczyć w realizacji i kontynuuje nagrywanie + rzędy RecordingExt w To samo transakcja, co Img/ImgDat. memberId jest rozwiązywana na nogę via ? na Instancja VOIP (null, gdy nieprzypisuje się).
· kamo-internal
Aktualizuj karty Administracja platformy, aby dopasować ujednoliconą strukturę karty
Zamień dwie nieaktualne karty (Organizacje strona samodzielna + Konfiguracja) Pięć kart pasujących do rzeczywistych zakładek: Ogólne, Organizacje, VOIP i SMS, System Użytkownik i Advanced — każdy link bezpośrednio do właściwego paramu ?tab.
· kamo-internal
Układ siatki o pełnej szerokości i przesuń spust synchronizacji z karty Zaawansowane
- Przeprojektuj zakładkę VOIP & SMS, aby użyć pełnej szerokości obszaru treści: zakres statystyk pocierania górny rząd, przetwarzanie nagrań i Globalny Harmonc Schedule znajdują się obok siebie W dwukolumnowej siatce w punkcie przerwania lg+ - Karty statystyk rurociągów pokazują liczbę na żywo z zaznaczeniami o zerowym stanie i błędami Kolorowe kodowanie; auto-refresh co 30s odnotowany w napisie - Globalna synchronizacja kartki konsoliduje ustawienia harmonogramu, wiersz znacznika czasowego ostatniej synchronizacji, I ręczny spust do jednego panelu; włączony / przejmowany chip w nagłówku - Przesuń "Force global VOIP synchronizacja" z zakładki Advanced (duplikat wyzwalacza Już obecny na VOIP & SMS); Zaawansowana zakładka pokazuje teraz tekst zastępczy
· kamo-internal
Merge Organizacji w stronę konfigurację z ujednoliconą kartą nav
- Dodawanie organizacji jako zakładkę w zakładce ? (Ogólne ? Organizacje ? VOIP & SMS > Użytkownik systemu > Zamówienie zaawansowane) - Usuń - strona samodzielna - Aktualizacja nav nav nav w UstawieniaStatusWindow, aby wyświetlić wszystkie 5 kart jako podpunkty wskazujące na konfigurację?tab... - Napraw układ na wszystkich kartach: spójny p: xs:2, sm: 3, więc zawartość nie wpada już w ściany kart - Popraw karty statystyk GeneralTab z ikoną tła iścisej rytmu typografii - Ustawienia aktualizacji Zobacz tytuł / podtytuł dla strony ujednoliconej
· kamo-marketing
Dodaj logo Go do grilla z banerem
· kamo-internal
Surface PHONE_SERVER_ID na zakładce Przeglądu on-instancja telefonu
Operatorzy konfigurujący wsparcie kamo-asterisk na gospodarzu FreePBX muszą wklejać Dopasowywany VoipProviderInstance UUID w pliku konfiguracyjnego pomocnika jako PHONE_SERVER_ID. Do tej pory musieli grub przez pasek URL lub Baza danych. Nowa sekcja "Testowanie serwera telefonu" na temat /settings/features/phone/'I' Przegląd pokazuje UUID w polu monospace tylko do odczytu za pomocą jednego kliknięcia Przycisk kopiowania (pomocnik CopyableIdField, również wielokrotnego użytku dla przyszłości podobny Identyfikacje identyfikacyjne).
· kamo-internal
Klikwalne rozszerzenie VOIP w Centrum Interaction otwiera telefon z napełnionym numerem

Twój wszechświat czeka.
Rozpocznij bezpłatnie w kilka minut.Dodaj produkty, kiedy tylko będziesz gotowy — bez migracji, bez nowych logowań.
Bezpłatne na zawsze — nie wymaga karty kredytowej