Przejdź do treści
KAMOUniverse

Changelog

Co nowego.

Każde ulepszenie platformy, jak to wysyła.

  1. · kamo-internal

    Dostępność drutuProvider do Otnień Owijanie

  2. · kamo-internal

    Dodaj useAvailabilityWebSocket hook i AvailabilityContext

  3. · SecurityService

    Dostępność członków automatycznych na logowanie, AWAJY na logowaniu

  4. · MediaService

    Dodaj przekaźnik NATS-STOMP dla statusu dostępności członków

  5. · SecurityService

    Zaktualizuj punkty końcowe dostępności, aby korzystać z MemberAvailabilityStatus enum

  6. · SecurityService

    Dodaj dostępnośćPublisher dla aktualizacji statusu członka

  7. · InitializerService

    Migracja członków.is_dostępna do dostępności_status enum

  8. · kamo-shared-library

    Zamień jestDostępny boolean z MemberAvailabilityStatus enum

  9. · 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.

  10. · 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.

  11. · 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.

  12. · 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.

  13. · 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ą.

  14. · 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.

  15. · kamo-internal

    Pokaż przycisk Zarządzaj domeną dla posiadaczy org i członków systemu na najwyższym poziomie

  16. · 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.

  17. · 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.

  18. · 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

  19. · kamo-register

    Umieść nick inline po nazwie sufiks na rzędzie nazw prawnych

  20. · 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.

  21. · 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.

  22. · 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).

  23. · 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.

  24. · 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.

  25. · 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.

  26. · 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.

  27. · 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).

  28. · 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.

  29. · 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

  30. · 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