Jurnal de schimbări
Ce e nou.
Fiecare îmbunătățire a platformei, pe măsură ce se livrează.
· kamo-internal
Disponibilitate sârmă Furnizorul în Wrapper prezență
· kamo-internal
Adaugă utilizareAvailabilityWebSocket cârlig și disponibilitateContext
· SecurityService
Disponibilitatea automata a membrilor AVAILABLE on login, Away on logout
· MediaService
Adaugă NATS→STOMP releu pentru statutul de membru disponibil
· SecurityService
Actualizează criteriile de evaluare a disponibilității pentru a utiliza MemberAvailability Stare enum
· SecurityService
Adaugă AvailabilityPublisher pentru actualizările statutului membrilor
· InitializerService
Membri migrați.is disponibil pentru disponibilitate status enum
· kamo-shared-library
Înlocuirea booleanului este realizabilă cu Vailabilitatea Membrului Stare enum
· 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.
· 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.
· 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.
· 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.
· 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.
· 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.
· kamo-internal
Arată butonul Management Domain pentru proprietarii de org de nivel superior și membrii sistemului
· 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.
· 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.
· 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
· kamo-register
Plasați porecla inline după sufixul numelui pe rândul de nume legal
· 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.
· 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.
· 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).
· 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ă .
· 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.
· 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.
· 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.
· 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).
· 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.
· 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
· 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