Changelog
Co nowego.
Każde ulepszenie platformy, jak to wysyła.
· kamo-internal
Dostępność drutuProvider do Otnień Owijanie
· kamo-internal
Dodaj useAvailabilityWebSocket hook i AvailabilityContext
· SecurityService
Dostępność członków automatycznych na logowanie, AWAJY na logowaniu
· MediaService
Dodaj przekaźnik NATS-STOMP dla statusu dostępności członków
· SecurityService
Zaktualizuj punkty końcowe dostępności, aby korzystać z MemberAvailabilityStatus enum
· SecurityService
Dodaj dostępnośćPublisher dla aktualizacji statusu członka
· InitializerService
Migracja członków.is_dostępna do dostępności_status enum
· kamo-shared-library
Zamień jestDostępny boolean z MemberAvailabilityStatus enum
· kamo-asterisk-support
Enrich upload manifesty z danymi Asterisk CDR caller-ID
Dodaje opcjonalne wzbogacenie CDR MySQL, dzięki czemu zakładka historii softphone może Wyświetlacz, który dzwonił (lub został wezwany). Gdy ASTERISK_CDR_DSN jest skonfigurowany Jak tajemnica Forgejo repo, pomocnik: - Zapytania asteriskcdrdd.cdr dla unique callId przed przesłaniem - Parses CLID do callerIdNum i callerIdName - Derives kierunek połączeń (inbound/outbound) od src/dst vs extension - Zawiera blok cdr w manifeście przesyłania Wzbogacenie CDR jest opt-in i z wdziękiem zdegradowane: jeśli DSN jest nieobecny lub odnośnik zawodzi, przesyłanie odbywa się bez identyfikatora rozmówcy (istniejące zachowanie). Dodaje go-sql-driver/mysql v1.7.1; Dockerfile run go mod schludny do zaludnienia Go.sum podczas budowy Docker, więc nie jest potrzebna lokalna instalacja Go.
· ConversionService
Parse pola CDR caller-ID z manifestu do przesyłania
Gdy kamo-asterisk-support zawiera sekcję cdr' w przesłaniu manifest (wyjaśnięty po skonfigurowaniu ASTERISK_CDR_DSN), ConversionService Wyciągi callerIdNum, callerIdName, callDirection, dyspozycję i dyspozycję i Przekazuje je przez RecordingMetadata, dzięki czemu wiersz nagrywania jest przechowywany Pełny kontekst caller-ID.
· InitializerService
Dodaj kolumny CDR caller-ID do tabeli nagrań (zamówienie 40)
Dodaje caller_id_num, caller_id_name, call_direction i call_reswy Kolumny do tabeli nagrań, dzięki czemu zakładka historii softfonów może wyświetlać Kto dzwonił bez polegania na dostępnym rurociągu FreePBX CDR.
· kamo-shared-library
Dodaj pola CDR caller-ID do podmiotu nagrywającego
Dodaje callerIdNum, callerIdName, callDirection i callResult kolumny Do podmiotu nagrywającego, aby wsparcie kamoasterisk mógł przechowywać Asterisk CDR Metadane obok pliku audio. RecordingMetadata zyskuje dopasowanie Pola; konstruktor kompatybilny wstecz, pozwala istniejącym rozmówcy przejść Zerowy dla wszystkich czterech bez zmian.
· kamo-internal
Dodaj opcję metody płatności COMP do kreatora zamówień subskrypcji
COMP to ważna wartość zaplecza PaymentMethod enum dla bezpłatnej wartości Dotacje platformowo-adminowe, ale brakowało go w typie frontendu i kreda UI – oferowane były tylko INVOICE i AUTO_BILL. Dodano COMP do koszyka SubskrypcjaPaymentMethod union i odsłoniła go jako opcję radiową.
· kamo-internal
Pokaż domenę kamocrm platformy na niestandardowym wpisie domeny
Powierz jest aktywna nazwa hosta .kamorm.com na przepływie dodanej do domeny i wykrywaj Domeny niestandardowe poprzez wyłączenie adresów URL kammrm zamiast samej flagi domyślnej.
· kamo-internal
Pokaż przycisk Zarządzaj domeną dla posiadaczy org i członków systemu na najwyższym poziomie
· kamo-internal
Pokaż przycisk Ustawiony dla właścicieli org bez konta
Gdy właściciel orgi otwiera zakładkę rozliczeń planów i nie ma rachunków rozliczeniowych Istnieje, wyświetlaj monit bootstrap zamiast ogólnego "kontaktu z twoim" Wiadomość org owner". Przycisk wywołuje POST /api/security/account/ bootstrap-billing (idempotent), a następnie przeładowuje konta na sukces.
· SecurityService
Dodaj bootstrap-billing punkt końcowy dla wcześniej istniejących org
POST - uruchamia to samo idempotent konfiguracji jako haka do tworzenia podorga (BillingSetupService .setupForSubOrgCreation), ale może być wywołany na żądanie przez właściciela org. To obsługuje orgs, które zostały utworzone przed refaktoracją rozliczeniową i Dlatego nigdy nie otrzymał konta + Konto.
· kamo-internal
Konwersja falowa 3, naprawa odwrotna i automatyczne translizolowanie CI
- Wymień wszystkie zakodowane angielskie ciągi na połączenia t() w całej fali 3 komponenty (czat, klub, wsparcie, notatki, rurociąg, leady, nav itp.) - Scalić fale 3 fragmenty w wiadomości/en.json (+19 klawiszy) - Naprawianie wartości symboli zastępczy sekcji w en.json (mile widziane, hasło, Tekst footer, accountsDesc/networkDesc ICU interpolacja) - Napraw mobilny tekst powitalny w page.tsx, aby używać t() zamiast zakodowanych ciągów - Fix request.ts: deep-merge angielski jako podstawa dla wszystkich plików lokalnych, więc Brakujące pliki lokalne (pre-translate-CI) służą po angielsku zamiast awariom, i częściowo przetłumaczone lokale wracają do angielskiego w poszukiwaniu brakujących kluczy - Aktualizacja - dopasowująca kamo-marketing's Wzór translate-and-rebuild: początkowe wdrożenie - TranslateService port-forward - zatowaj pliki locale - odbudowanie obrazu z tłumaczeniami - przesunięcie
· kamo-register
Umieść nick inline po nazwie sufiks na rzędzie nazw prawnych
· kamo-internal
Przewód next-intl z member.language jako źródło locale
Dodaje internacjonalizację opartą na next-intl w całym kamo-wewnętrznym bez adresu URL Lokalne prefiksy. Aktywna lokalizacja jest odczytywana z pliku cookie kamo-locale, który Odzwierciedla uwierzytelnione preferencje „języki” członka (ustawione za pośrednictwem Karta ustawień regionalnych w Infrastruktura: - i18n/locales.ts, i18n/request.ts: 22 obsługiwane miejsca dopasowujące kamo-marketing - /api/i18n/set-locale: pisze plik cookie kamo-locale - LocaleBootstrap: zsynchronizuje plik cookie z Member.language na pierwszym uwierzytelnionym załadowaniu - I18nDostawcy: stosuje MUI core, x-data-grid, x-date-pickers locales i Adapter date-fns locale do aktywnego języka - useFormatters: miejscowo-świadoma data / liczba / procent / pomocnicy w względnym czasie - MyAccountTab Zapisy Ustawienia regionalne: zapisuje plik cookie + router.refresh() Kiedy użytkownik zmienia własny język - skrypty/translate.ts: build-time delta translation przeciwko TranslateService (wzorzec rynku kamo-marketingu) - skrypty/merge-fragments.ts, - narzędzia dla Agregowanie fragmentów kluczy na obszar do wiadomości/en.json Zasięg: - wiadomości/en.json rozstawiony wspólnym wspólnym., nav., auth. Początkowa ekstrakcja na 67 stronach i komponentach (deski, leady, Handel, ustawienia, konto, kontakty, ustawienia/funkcje, ustawienia/członek, Elementy/ustawki, komponenty/narzędzia / naai-chata itp.). Wiele funkcji Powierzchnie nadal wymagają kolejnych przepustek do ekstrakcji.
· VOIPService
Wracając do nagrań obrazowania dla historii połączeń + poczty głosowej
FreePBX 17 nie ujawnia wiadomości poczty głosowej przez REST lub GraphQL w tej instalacji (typu GraphQL typu głośnika odsyła konfig skrzynki pocztowej, a nie wiadomości, i / /api/api/rest/rest/voicemail 404s), a rurociąg CDR Asterisk jest również niefunkcjonalny (ODBC DSN misconfed oddzielnie w KlusterServices). Bez nich karty softfonowe są puste nawet wtedy, gdy nagrania wywołania / VM istnieją po stronie obrazowania. Gdy dostawca.getCallHistory lub dostawca.getVoicemails nic nie zwraca, wracaj do wierszy ofert z tabeli kamo.recordings limuzyna (providerInstanceId, rozszerzenie, isVm). Metadane Caller-ID nie są dziś prowadzone na nagrywaniu, więc odchodzimy od / od pustej liczby - wiersz nadal odtwarzany przez narzędzie do odtwarzania multiplayer za pomocą nagrywania Id. Filtrowanie archiwum jest zachowane na obu ścieżkach, więc wiersz archiwizowany przez pamięć podręczną pozostaje również ukryty w upadku.
· kamo-shared-library
Posępkowe nagranie przez (instancja, rozszerzenie, isVm)
Używany przez karty softphone jako kanoniczne źródło prawdy dla nagrań wywoławnych i wiadomości głosowych, gdy dostawca wyższego szczebla nie może ich wymienić — np. FreePBX 17 nie ma interfejsu API wiadomości głosowych REST/GraphQL, a w tej instalacji rurociąg CDR Asterisk jest również zepsuty (oddzielna poprawka ODBC misconfig w KlusterServices).
· SecurityService
Autoprowiowanie fotela KamoCRM w tworzeniu suborg; punkt końcowy właściciela promo-billing-owner
Ułaskawie spacery SubskrypcjaMemberka (nie AccountMember) do obliczeniowania Uprawnienia członków – związek cech w różnych aktywnych subsydiów licencjobiorczych, plus Darmowa linia bazowa. Słuchacz Redis zyskuje SUBSCRIPTION:-uid> obsługuje. Nowy BillingSetupService działa w dwóch przepływach: - createOrganization (sub-org pod KamoCRM): automatycznie tworzy KamoCRM-org Członek dla twórcy, jeśli nieobecny, znajduje lub tworzy konto KamoCRM Z tym członkiem jako podstawowym, otwiera Free-tier AccountSubscription Ukierunkowanie na nowy sub-org i jest utwornikiem jako licencjobiorca + sub-manager. - POST - wyrzeźbij świeżo Konto KamoCRM / podłoże dla członka istniejącego suborg, opcjonalnie Przenoszenie nazwisk licencjobiorców. Org-ownerly. KonkontoSterowanie trasy drop isLicensee / canManageSubskrypcja od Na poziomie konta płatny klientów - te flagi żyją teraz w SubscriptionMember.
· InitializerService
Dodawanie języka użytkownika + kolumny default_currency
Dodaje dwie kolumny NULL do tabeli członków, co wspiera nowe Member.language (VARCHAR DEFAULT 'ENGLISH') i Member.defaultCurcy (VARCHAR(10) pola DEFAULT 'USD'. Istniejące rzędy są wypełnione z powrotem do Umyślnie jest więc ograniczenie NOT NULL jest zaspokojone bez przestoju - Okno.
· kamo-register
Dodaj krok językowy, kraj timezone picker, scroll + - poprawki
- Nowy krok "Mój język" przygotowył się do czarodzieja, odzwierciedlający kraj - Układ krokowy. Listy 22 lokali wspieranych przez marketing jako płytki flagowe z natywną nazwą + angielskie podpywytkowe; wstępnie wybrać od navigator.languages. - krok "Mój kraj" zbiera teraz strefę czasową obok kraju, niewywiązujący się z zobowiązań Od - i edytowalne przed Następnie. Oba pola są zobowiązane do awansu. - Organ rejestracji wysyła teraz język/stres czasowy (plus istniejący kraj) Do / zarejestrowanego punktu końcowego, aby były trwałe na nowym Członku. - Poprawka: Bezpieczeństwo Pytania, które gra krokowa może teraz przewijać pionowo - To był tylko ten bez pojemnika przelewowego, więc długie katalogi Trzecie pytanie wyrzuciło z ekranu. - Napraw: Przycisk wykończeniowy nie pozostaje już wyłączony, gdy automatyczniewerfikuje się Zanim nasz słuchacz się dołączy. Zastąpił 100ms setTimeout wyścig z Dołączenie dobieganego, który również drenuje obecny stan widżetu Przyczepiaj się dla spóźnionych słuchaczy.
· kamo-internal
Dodaj język + domyślną walutę do karty Ustawienia regionalne
Karta ustawień regionalnych profilu użytkownika ujawnia teraz edytowalny język (22 Obsługiwane lokalne odzwierciedlające witrynę marketingową) i walutą domyślną (przeszukiwalny Autocomplete) obok strefy czasowej. Wszystkie trzy razem oszczędzają przez PUT /api/security/members/'id'. Tryb widzenia pokazuje nazwę języka ojczystego Z angielskim w nawiasach, plus symbol waluty i pełna nazwa.
· SecurityService
Język członka Persist/nastnia/waluta na rejestracji
Punkt końcowy /rejestracyjny akceptuje teraz język, strefę czasową i domyślnąCurrency Obok istniejącego pola krajowego. RejestracjaUS zestawy kraj i strefę czasową dla nowego Użytkownika i stosuje wszystkie cztery pola regionalne do świeżo utworzony Członek, czerpiący domyślną walutę z waluty kraju Odwioraca pierwotneCurrency, gdy jeden nie jest dostarczany (i spada z powrotem do USD).
· kamo-shared-library
Mapa zewnętrznych blokad adresów klienta do AccountAddress on pull
Dodaj pomocnik AdapterAddressMapper, który konwertuje węzeł adresowy JSON z żadnego Dostawca w EmbAddress i załącza go do Konta w formie wpisu Konkonto (SHIPPING/BILLING). Przekaż pomocnik do czterech adapterów, których punkty końcowe klienta są odsłonięty Bloki adresowe: - ShopifyCustomerAdapter: default_adres przechodzi do obu wysyłek + rozliczeń, Pozostałe adresy[] stają się zapisami żeglugowymi - WooCommerceCustomerAdapter: blok rozliczeniowy -> BILLING, blok wysyłki -> DOSTAWA - BigCommerceCustomerAdapter: adresy[] split po polu adres_type - MagentoCustomerAdapter: adresy[] podzielone przez ids Adaptery bez danych adresowych w swoich ładunkach klientów (Ecwid, Wix, Shift4Shop, PrestaShop, OpenCart, Squarespace) nadal kompiluje się bez zmian.
· kamo-internal
/kon/nowe kopiowanie z ołowiu UX, pola pełnej nazwy, podwójne telefony, adres; zarządzanie adresami na poziomie konta
Frontend: - /account/new: nasection przycisk "Kopiuj z ołowiu" + nagłówek "Kopiuj wszystko z ołowiu" (gdy leadId param) - Sekcja nazwy: prefix, pierwszy, środkowy, ostatni, przyrostek - Podwójne telefony (osobiste + praca) z rozszerzeniem i przełącznikiem "Zezwalaj na tekst" - Sekcja adresowa z wykorzystaniem kształtu EmbAddress (linia 1, szczegóły, miasto, podział, pocztowy, kraj) z przełączaniem "Używaj też jako rozliczeniowe" (domyślnie na tolicie) - Prześlij nazwę zagnieżdżony/e-mail/phoneNumbers payloads dopasowanie backendu - kontaApi: wpisane KontoNazwa, AccountPhoneNumbers, AccountAdres; nowe metody: getAdres, addAddress, updateAddress, deleteAddress, setPrimaryAddress - AccountViewClient: wyślij główny adres wysyłki z nowej tablicy adresów
· SecurityService
Obsługa zagnieżdżonych nazw / e-mail / numerów telefonów + punkty końcowe zarządzania adresami
- AccountController akceptuje zagnieżdżone imię/e-mail/numer JSON na POST/PUT - Początkowy adres na POST tworzy DOSTAWANIE (i BILLING w przypadku użycia AsBillingToo set), ustawia główne punkty - Dodawanie 5 punktów końcowych adresu: GET, POST, PUT, DELETE adresy; PUT /adreses/-pierwotny - Podsumowanie konta / detal expose obiektu nazwy, obiekt phoneNumbers, listy adresów wysyłki/przedania, dane podstawowe - Odniesienia do pól banknotów na poziomie konta (Account.notes został usunięty wcześniej)

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