Mergi la conținut
KAMOUniverse

Jurnal de schimbări

Ce e nou.

Fiecare îmbunătățire a platformei, pe măsură ce se livrează.

  1. · kamo-internal

    Disponibilitate sârmă Furnizorul în Wrapper prezență

  2. · kamo-internal

    Adaugă utilizareAvailabilityWebSocket cârlig și disponibilitateContext

  3. · SecurityService

    Disponibilitatea automata a membrilor AVAILABLE on login, Away on logout

  4. · MediaService

    Adaugă NATS→STOMP releu pentru statutul de membru disponibil

  5. · SecurityService

    Actualizează criteriile de evaluare a disponibilității pentru a utiliza MemberAvailability Stare enum

  6. · SecurityService

    Adaugă AvailabilityPublisher pentru actualizările statutului membrilor

  7. · InitializerService

    Membri migrați.is disponibil pentru disponibilitate status enum

  8. · kamo-shared-library

    Înlocuirea booleanului este realizabilă cu Vailabilitatea Membrului Stare enum

  9. · kamo-asterisk-support

    Manifeste de încărcare bogate cu date Asterisk CDR apelant-ID

    Adaugă opţional MySQL îmbogăţire CDR astfel încât fila de istorie softphone poate arată cine a sunat (sau a fost chemat). Atunci când ASTERISK CDR DSN este configurat ca un secret de repo Forgejo, ajutorul: - Queries asteriscrdrdb.cdr pentru apel unicId înainte de încărcare - Parses CLID în apelerIdNum și apelerIdName - Derives call direction (inbound/outbound) from src/dst vs extension - Include un cdr {} bloc în manifestul de încărcare Îmbogățirea CDR este optimizată și degradată grațios: dacă DSN lipsește sau căutarea eşuează, încărcarea continuă fără apelant-ID (comportament existent). Adaugă go-sql-driver/mysql v1.7.1; Dockerfile ruleaza merge mod ordonat pentru a popula go.sum în timpul Docker construi astfel încât nu este necesară instalarea local Go.

  10. · ConversionService

    Parse CDR caller-ID câmpurile din lista de încărcare

    Atunci când kamo-asterisk-support include o secțiune cdr {} în încărcarea manifest (populat atunci când ASTERISK CDR DSN este configurat), Serviciul de conversie extracte callerIdNum, callerIdName, callDirection, și dispoziție și trece-le prin înregistrareMetadata astfel încât rândul de înregistrare este stocat cu Contextul complet al apelantului.

  11. · InitializerService

    Add CDR caller-ID columns to recordings table (order 40)

    Adds caller_id_num, caller_id_name, call_direction, and call_result columns to the recordings table so the softphone history tab can display who called without relying on the FreePBX CDR pipeline being available.

  12. · kamo-shared-library

    Add CDR caller-ID fields to Recording entity

    Adds callerIdNum, callerIdName, callDirection, and callResult columns to the Recording entity so kamo-asterisk-support can store Asterisk CDR metadata alongside the audio file. RecordingMetadata gains matching fields; a backwards-compatible constructor lets existing callers pass null for all four without change.

  13. · kamo-internal

    Add COMP payment method option to subscription order wizard

    COMP is a valid backend PaymentMethod enum value for complimentary platform-admin grants, but was missing from the frontend type and wizard UI — only INVOICE and AUTO_BILL were offered. Added COMP to the SubscriptionPaymentMethod union and exposed it as a radio option.

  14. · kamo-internal

    Show platform kamocrm domain on custom domain entry

    Surface the active *.kamocrm.com hostname on the add-domain flow and detect custom domains by excluding kamocrm URLs instead of default-flag alone.

  15. · kamo-internal

    Arată butonul Management Domain pentru proprietarii de org de nivel superior și membrii sistemului

  16. · kamo-internal

    Afișează butonul de facturare pentru proprietarii de org fără cont

    Atunci când un proprietar de org deschide fila de facturare a planurilor și fără conturi de facturare există, afișați un prompt bootstrap în loc de generic "contactați Mesajul proprietarului. Butonul sună POST /api/securitate/cont/ bootstrap-billing (idepotent) apoi reîncărca conturile pe succes.

  17. · SecurityService

    Adăugați criteriul de evaluare privind facturarea cizmelor pentru orgurile preexistente

    POST *************** declanşează acelaşi lucru. configurarea idepotent ca cârlig de creare sub-org (BillingSetupService .setupForSubOrgCreation) dar poate fi apelat la cerere de către un proprietar de org. Acest lucru se ocupă de orgi care au fost create înainte de refactor facturare și Prin urmare, nu a primit niciodată un Cont + AccountSubscription.

  18. · kamo-internal

    Wave 3 conversii, fixa de rezervă, și auto-translate CI

    - Înlocui toate siruri de caractere hardcoded limba engleză cu t() apeluri peste val 3 componente (chat, clubhouse, suport, note, conducta, piste, nav, etc.) - Combină trei fragmente în mesaje/ro.json (+19 taste) - Fixează valorile de ocupare a secţiunii în en.json (bun venit, tagline, text footer, conturiDesc/networkDesc ICU interpolare) - Fixa text de bun venit mobil în pagina.tsx pentru a utiliza t() în loc de siruri de caractere hardcodate - Fix request.ts: adânc-merge engleză ca bază pentru toate fișierele locale astfel fișierele locale lipsă (pre-translate-CI) servesc limba engleză în loc de crashing; şi localităţile parţial traduse cad înapoi în limba engleză pentru cheile lipsă - Actualizare *************** pentru a se potrivi kamo-marketing's traduce-şi-reconstruct model: iniţial desfăşurare → Translateservice port-forward → comite fișiere locale → reconstruiește imaginea cu traduceri → redistribuire

  19. · kamo-register

    Plasați porecla inline după sufixul numelui pe rândul de nume legal

  20. · kamo-internal

    Wire next-intl cu membru.limbă ca sursă locală

    Adaugă internaţionalizare pe bază de nou-întl peste kamo-internă fără URL localizează prefixele. Localizarea activă este citită din cookie-ul kamo-local, care Oglindește preferința membrului autentificat (setată prin Setări regionale card în *************** Infrastructura: - i18n/locales.ts, i18n/quest.ts: 22 de localităţi compatibile cu kamo-marketing - /api/i18n/set-locale: scrie kamo-locale cookie - LocaleBootstrap: sincronizează cookie-ul cu Membru.limbă pe prima încărcătură autentificată - I18nProviders: aplica nucleul MUI, x-data-grid, x-date-pickers locals si adaptor data-fns localizat la limba activă - useFormatters: locale-aware date / number /% / relative-time helpers - MyAccountTab Regional Setări salva: scrie cookie + router.refresh() atunci când utilizatorul își schimbă propria limbă - scripturi/translate.ts: build-time delta translation contra TranslateService (Oglinzi kamo-marketing model) - scripturi/fragmente-merge.ts, ***************** pentru instrumente agregarea fragmentelor cheie per zonă în mesaje/en.json Acoperire: - mesaje/en.json însămânțate cu comun.*, nav.*, auth.* chei plus extracție inițială pe ~67 pagini și componente (tabla de bord, conduce; comerț, setări, cont, contacte, setări/fisuri, setări/membru; componente/setări, componente/unelte/ai-chat etc.). Multe caracteristici suprafeţele mai au nevoie de pase de extracţie.

  21. · VOIPService

    Fall back to imaging recordings for call history + voicemails

    FreePBX 17 doesn't expose voicemail messages over REST or GraphQL on this install (the GraphQL voiceMail type returns mailbox config, not messages, and /admin/api/api/rest/voicemail 404s), and Asterisk's CDR pipeline is also non-functional here (ODBC DSN misconfig handled separately in KlusterServices). Without these the softphone tabs render empty even when call/VM recordings exist on the imaging side. When provider.getCallHistory or provider.getVoicemails returns nothing, fall back to listing rows from the kamo.recordings table scoped by (providerInstanceId, extension, isVm). Caller-ID metadata isn't carried on Recording today so we leave from/fromNumber blank — the row still plays back through the media-player tool via recordingId. Archive filtering is preserved across both paths so a row archived via the cache stays hidden in the fallback too.

  22. · kamo-shared-library

    Paginated Recording lookup by (instance, extension, isVm)

    Used by the softphone tabs as the canonical source of truth for call recordings and voicemails when the upstream provider can't list them — e.g. FreePBX 17 has no REST/GraphQL voicemail-message API, and on this install Asterisk's CDR pipeline is also broken (separate ODBC misconfig fix in KlusterServices).

  23. · SecurityService

    Sediul KamoCRM la crearea suborgului; criteriul de evaluare a proprietarilor de titluri de valoare

    Serviciul de Drept de mers pe jos SubscriereMembru (nu ContMembru) pentru a calcula Se raportează valoarea totală a acțiunilor preferențiale deținute în vederea tranzacționării. valoarea iniţială liberă. Ascultătorul Redis câştigă un subscription: <uid> handler. Noul BillingSetupService rulează în două fluxuri: - crearea de organizaţii (sub-org sub KamoCRM): auto-creează un KamoCRM-org Membru al creatorului, dacă este absent, găsește sau creează un cont KamoCRM cu acest membru ca primar, deschide un cont de nivel liberAbonare vizează noul sub-org, și se află creatorul ca licențiat + sub-manager. - POST *************** sculptează o proaspătă KamoCRM Cont/subsemnat pentru un membru al unui suborg existent, opțional transferare nume licențiate. Org-proprietar numai. AccountController rute drop isLicensee / canManageAbonare de la client la nivel de cont sarcină utilă .

  24. · InitializerService

    Adaugă limbă membru + coloane implicit monedă

    Adaugă două coloane NULL la tabelul membrilor care sprijină noul Membru (VARCHAR DEFAULT "ENGLISH") și Membru. Câmpuri (VARCHAR (1/10) DEFAULT "USD." Rândurile existente sunt umplute la implicit, astfel încât constrângerile NULL este satisfăcut fără un timp de oprire Fereastra.

  25. · kamo-register

    Adăugați pas limbă, țară culegător fus orar, defilare + *** reparații

    - Noul pas 'My Language' pregătit pentru vrăjitor, oglindind țara Layout pas lui. Listă cele 22 de localităţi de marketing ca dale de pavilion cu nume nativ + tip instrument englez; pre-selectează din navigator.limbă. - "Țara mea" pas colectează acum un fus orar alături de țară, implicit De la ************* şi editabilă înainte Următorul. Ambele câmpuri sunt necesare pentru a avansa. - Organismul de inregistrare trimite acum limba / fusul orar (plus tara existenta) la obiectivul /înregistrare astfel încât acestea să fie persistate pe noul membru. - Fix: Securitate Întrebări pas conţinut poate acum derula pe verticală Pasul a fost singurul fără un container, atât de lung cataloage a împins a treia întrebare în afara ecranului. - Fix: butonul de finisare nu mai rămâne dezactivat atunci când *** auto-verifică înainte ca ascultătorul nostru să se ataşeze. Înlocuit 100ms setTimeout cursa cu un ataşament montat până la sondaj care drenează şi starea actuală a widget-ului atașați pentru ascultătorii târziu.

  26. · kamo-internal

    Adaugă limba + moneda implicită cardului Setări regionale

    Cardul de Setări Regionale al profilului membrilor expune acum limba editabilă (22 de localităţi sprijinite care reflectă site-ul de marketing) şi moneda implicită Pe lângă fusul orar. Toate cele trei salvează împreună prin PUT /api/security/members/{id}. Modul de vizualizare arată numele limbii native cu limba engleză în paranteze, plus simbolul monedei și numele complet.

  27. · SecurityService

    Limbă/zonă de timp/monedă de înregistrare

    Obiectivul / înregistrare acceptă acum limba, fusul orar, și implicitCurrency alături de domeniul de țară existent. Țara seturilor de servicii de înregistrare și fusul orar al noului utilizator și aplică toate cele patru domenii regionale membru nou creat, derivat din moneda implicită a țării cartografiere primara de urgență atunci când unul nu este furnizat (și se încadrează înapoi la USD).

  28. · kamo-shared-library

    Map external customer address blocks into AccountAddress on pull

    Add AdapterAddressMapper helper that converts a JSON address node from any provider into an EmbAddress and attaches it to an Account as a typed AccountAddress (SHIPPING/BILLING). Wire the helper into the four adapters whose customer endpoints expose address blocks: - ShopifyCustomerAdapter: default_address goes to both shipping+billing, remaining addresses[] become shipping records - WooCommerceCustomerAdapter: billing block -> BILLING, shipping block -> SHIPPING - BigCommerceCustomerAdapter: addresses[] split by address_type field - MagentoCustomerAdapter: addresses[] split by **************** ids Adapters with no address data in their customer payloads (Ecwid, Wix, Shift4Shop, PrestaShop, OpenCart, Squarespace) continue to compile unchanged.

  29. · kamo-internal

    /cont/nou copy-from-Lead UX, câmpurile de nume complete, telefoane duble, adresă; gestionarea adresei la nivel de cont

    Frontend: - /cont/nou: pe secţiune "Copy from Lead" butoane + antet "Copy all from Lead" buton (when leadId param) - Sectiunea nume: prefix, primul, mijloc, ultimul, sufix - Telefoane duble (personale + de lucru) cu extensie și comutație "Alocare text" - Sectiune adresa folosind forma EmbAddress (line1, detalii, oras, compartimentare, postal, tara) cu "Foloseste si tu facturarea" (default on) - Trimiteţi numele/emailul/telefonul Numărul de sarcini utile potrivire suport - conturiApi: tastat AccountName, AccountPhoneNumbers, AccountAddress; noi metode: address, adddress, updateAddress, stergeAddress, setPrimaryAddress - AccountViewClient: redă adresa principală de transport maritim din noua reţea de adrese

  30. · SecurityService

    Suport nume/email/telefon Număr + criterii finale de gestionare a adresei

    - ContContController acceptă nume/email/telefon Număr JSON pe POST/PUT - Adresa iniţială de pe POST creează Shipping (şi BILLING atunci când utilizaţiAsBillingToo set), stabileşte indicii primare - Adăugaţi 5 criterii de evaluare a adresei: GET, POST, PUT, DELETE Adrese; PUS / Adrese / {id} / Primar - Rezumat cont/detalii expune numele obiect, telefonNumbers obiect, lista de adrese de expediere / facturare, indicii primare - Referinţe la nivel de cont (Cont.notes a fost eliminat mai devreme)

Universul tău te așteaptă.

Începeți gratuit în câteva minute.Adăugați produse oricând sunteți pregătit — fără migrare, fără autentificări noi.

Gratuit pentru totdeauna — nu este necesar un card de credit