Değişiklik Günlüğü
Yeni ne var?
Gemideki her iyileştirme.
· kamo-internal
Wire Availability PresenceWrapper
· kamo-internal
Add useAvailabilityWebSocket kanca ve Müsaitlik DurumuContext
· SecurityService
Auto-set üyesi girişte AVAILABLE, logout üzerinde AWAY
· MediaService
Üye kullanılabilirlik durumu için NATS→STOMP röyünü ekle
· SecurityService
ÜyeAvailability kullanmak için Güncelleme kullanılabilir uç noktaları Durum enum
· SecurityService
Üye statüsü güncelleştirmeleri için ErişilebilirlikPublisher ekleyin
· InitializerService
Migrate üyeleri.is kullanılabilirlik status enum
· kamo-shared-library
Değişim ÜyeAvailability ile Availability Durum enum
· kamo-asterisk-support
Enrich upload manifests with Asterisk CDR caller-ID data
Adds optional MySQL CDR enrichment so the softphone history tab can display who called (or was called). When ASTERISK_CDR_DSN is configured as a Forgejo repo secret, the helper: - Queries asteriskcdrdb.cdr for the call's uniqueId before uploading - Parses CLID into callerIdNum and callerIdName - Derives call direction (inbound/outbound) from src/dst vs extension - Includes a cdr{} block in the upload manifest CDR enrichment is opt-in and gracefully degraded: if the DSN is absent or the lookup fails, uploads proceed without caller-ID (existing behaviour). Adds go-sql-driver/mysql v1.7.1; Dockerfile runs go mod tidy to populate go.sum during the Docker build so no local Go installation is needed.
· ConversionService
Parse CDR caller-ID fields from upload manifest
When kamo-asterisk-support includes a cdr{} section in the upload manifest (populated when ASTERISK_CDR_DSN is configured), ConversionService extracts callerIdNum, callerIdName, callDirection, and disposition and passes them through RecordingMetadata so the Recording row is stored with full caller-ID context.
· 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
Show manage Domain düğmesine üst düzey org sahipleri ve sistem üyeleri için
· kamo-internal
Show Set Up Billing düğmesine org sahipleri için hesap yok
Bir org sahibi plan-billing sekmesini açar ve fatura hesabı yok Var, genel olarak yerine bir bottrap sergileyin "işlev your org owner" mesajı. düğme POST /api/güvenlik/account / Bottrap-billing (idempotent) sonra başarı hesaplarını yeniden yükleyin.
· SecurityService
Pre-existing orgs için bottrap-billing endpoint ekleyin
POST **************** Aynısı tetikler idempotent alt-org yaratım kancası (BillingSetupService .setupForSubOrgCreation) ancak bir org sahibi tarafından talep edilebilir. Bu, faturalama refaksiyonundan önce yaratılmış olan veya Bu nedenle asla bir Hesap + HesapSubscription almadı.
· kamo-internal
Dalga 3 dönüşümler, geri dönüşümler ve oto-translate CI
- Tüm zor kodlanmış İngilizce dizeleri t() ile değiştirin dalga 3 bileşenler (chat, kulüp evi, destek, notlar, boru hattı, yol açar, nav, vb.) - Merge dalga 3 parça mesaj /en.json (+19 anahtarları) - Ev bölümü en.json (welcome, tagline, Ayak metin, hesaplarDesc/networkDesc ICU interpolasyon) - Find mobile sayfadaki metin.tsx kullanmak için t() zor kodlanmış dizeler yerine - Fix request.ts: tüm yerel dosyalar için temel olarak derin-merge İngilizce Kayıp yerel dosyalar (pre-translate-CI) kaza yerine İngilizce hizmet eder, ve kısmen-translated yereller eksik anahtarlar için İngilizceye geri düşer Update ******************** to match kamo-marketing's çeviri modeli: ilk dağıtma → yerel dosyaları → çevirilerle yeniden inşa edin → yeniden iş
· kamo-register
Ad adı altında yer takma adı, yasal isim sırasına ek olarak
· kamo-internal
Üye ile Wire next-intl. dili yerel kaynak olarak
URL olmadan kamo-internal arasında bir sonraki uluslararasılaşma ekleyin locale prefixes. Aktif yerele, kamo-yerele kurabiyesinden okunur, ki bu Gerçekleştirilmiş üyenin “dil” tercihi aynalar (sonrası üzerinden başlangıç ******** Bölgesel Ayarlar kartı Altyapı: - i18n/locales.ts, i18n/request.ts: 22 yerel eşleme kamo-pazarlama - /api/i18n/set-locale: kamo-locale kurabiye yazıyor - LocaleBootstrap: Üyeliğe ilk otantik yük üzerinde kurabiye. - I18nProviders: MUI çekirdeği, x-data-grid, x-date-pickers yerel ve Date-fns adaptör aktif dil için yerel -Formatters: yerel-aware tarihi / numara / yüzde / göreceli zamanlı yardımcılar -AccountTab Bölgesel Ayarlarım kurtarır: kurabiye + yönlendirici.refresh() Kullanıcı kendi dillerini değiştirirken - scripts/translate.ts: TranslateService'e karşı zaman delta çevirisi (mirrors kamo-pazarlamanın deseni) - scripts/merge-fragments.ts, ************ araç için per-area anahtar parçaları mesajları /en.json Kapak: - mesajlar/en.json paylaşılan ortaklarla tohumladı.*, nav.*, auth.* anahtarları artı -67 sayfa ve bileşen arasında ilk ekstraksiyon (dashboard, yol açar, Ticaret, ayarlar, hesap, kontaklar, ayarlar/features, ayarlar/member, bileşenler/kesler, bileşenler/tools/ai-chat, vs.). Birçok özellik Yüzeyler hala takip kaldırma geçişine ihtiyaç duyar.
· 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
Auto-provision KamoCRM koltuğu alt-org yaratımı; teşvik-ly sahibi endpoint
EntitlementService, HesapMember'i hesaplamak için AbonelikMember'i yürür Üye Kazananlar - aktif lisans altlarında özelliklerin birliği, artı Free baseline. Redis dinleyicisi bir SUBSCRIPTION kazanır:<uid> handler. Yeni BillingSetupService iki akışta çalışır: - KamoCRM altındaOrganizasyon (sub-org): KamoCRM-org Mevcut değilse yaratıcı için üye, KamoCRM Hesapları Bu Üye ile birincil olarak, Free-tier HesapSubscription Yeni sub-org'u hedeflemek ve yaratıcıları lisans + alt yönetici olarak koltuklar. - POST ************************ Taze bir taze KamoCRM Mevcut bir alt-org üyesi için hesap/sub, isteğe bağlı olarak İsimli lisansları transfer edin. Org- sahibi sadece. Hesap Kontrolü rotaları düşüyorLicensee / CanManageSubscription from the Hesap seviyesi müşteri ücretleri - bu bayraklar şimdi AbonelikMember'de yaşıyor.
· InitializerService
Üye dili ekleyin + varsayılan currency columns
Yeni üye masaya NULL sütunları eklemiyor Üye.dil (VARCHAR DEFAULT 'ENGLISH') ve Üye.defaultCurrency (VARCHAR(10) DEFAULT 'USD') alanları. Mevcut satırlar geri dolu Varsayılan olarak, NULL kısıtlaması bir kesinti süresi olmadan memnun değildir Pencere.
· kamo-register
Dil adımını ekleyin, ülke zaman bölgesi seçici, kaydırma +
- Yeni 'Benim Dilim' adım büyücüye karşı çıktı, ülkeyi aynalamak adımın düzeni. 22 pazarlama destekli yerelleri bayrak parçaları olarak listeler Yerli adı + İngilizce aracıtip; navigator'dan önceden seçilmişler. - 'Ülkem' adım şimdi ülke yanında bir zaman bölgesi toplar, varsayılan olarak **************** ve daha önce düzenlenebilir Sonraki. Her iki alan da önceden ilerlemek için gereklidir. Kayıt vücudu şimdi dil / zaman bölgesi gönderir (artı mevcut ülke) Yeni Üye üzerinde devam ettikleri için / kayıt uç noktalarına. - Fix: Güvenlik Soruları adım içeriği şimdi dikey olarak dönebilir - Adım, aşırı bir konteyner olmadan tek kişiydi, bu yüzden uzun kataloglar Üçüncü soruyu ekrandan itti. - Fix: Hızlı düğme artık devre dışı kalır - otomatik olarak Dinleyicimiz eklemeden önce. 100ms, bir süre yarışını bir araya getirdi Ankete kadar, aynı zamanda widget'ın mevcut durumunu Widget'ın mevcut durumunu da yok eden bir ekin Geç dinleyiciler için ekleyin.
· kamo-internal
Dil ekleyin + Bölge Ayarları kartına varsayılan para
Üye profilinin Bölgesel Ayarları kartı şimdi düzenlenebilir Dili açığa çıkarır (22, yerelleri pazarlama siteyi aynaya destekledi) ve Varsayılan Para Para Para Para Para Para Para Para Para Para Para Para Parasını destekledi (searchable Autocomplete) Timezone ile birlikte. Tüm üçü birlikte tasarruf PUT /api/güvenlik/members/{id}. View mode, ana dili adı gösterir Ebeveynlerde İngilizce ile, artı para sembolü ve tam adı.
· SecurityService
Persist üye dili/timezone/currency on signup
/ kayıt uç noktası şimdi dil, zaman bölgesi ve varsayılanCurrency Mevcut ülke alanının yanında. KayıtHizmetleri ülkeyi düzenler Yeni Kullanıcı üzerinde zaman bölgesi ve dört bölgesel alanı tüm alanlarına uygular Taze olarak, Üye'yi, ülkenin varsayılan parasını ülkenin İlkCurrency mapping, bir tanesi sağlandığında (ve USD'ye geri dönün).
· 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
/account/new copy-from-lead UX, full name fields, dual telefonlar, adresi; hesap seviyesi adres yönetimi
Frontend: - /account /new: per-section "Copy from Lead" düğmeleri + başlığı "Copy all from Lead" düğmesine (ben leadId param) - Name section: prefix, first, orta, son, suffix - Dual telefonlar (kişisel + iş) uzatma ve "Allow text" toggle - EmbAddress şekli (line1, detaylar, şehir, altdivision, postal, country) kullanarak "ayrıca faturalama (default on) - Nested adı / e-posta /phoneNumbers ödeme yüklerini geri eşleştirin - hesaplarApi: tipd HesapName, HesapPhoneNumbers, HesapAddress; yeni yöntemler: GetAddresses, addAddress, updateAddress, deleteAddress, setPrimaryAddress - HesapViewClient: Yeni adreslerden birincil nakliye adresi oluşturma
· SecurityService
Destek nested name/email/phoneNumbers + adres yönetim uç noktaları
- Hesap Kontrolüler, POST / PUT üzerinde nested adı / e-posta / telefonNumbers JSON kabul eder - POST'deki ilk adres SHIPPING (ve BILLING when useAsBillingToo set), birincil puanlayıcılar oluşturur. - 5 adres uç noktaları ekleyin: GET, POST, PUT, DELETE adresler; PUT /addresses/{id} /primary - Hesap Özeti/detail ad nesnesi, telefonNumbers nesnesi, nakliye/milleme adresi listeleri, birincil noktacılar - Dur hesap seviyesi notları alan referansları (Account.notes daha önce kaldırıldı)

Evreniniz sizi bekliyor.
Birkaç dakika içinde ücretsiz olarak başlatın. Hazır olduğunuzda ürünleri ekleyin - göç yok, yeni girişler yok.
Sonsuza kadar ücretsiz — kredi kartı gerekmiyor