परिवर्तन लॉग
क्या नया है.
यह जहाज के रूप में, प्लेटफार्म के हर सुधार.
· kamo-internal
तार उपलब्धता PresenceWrapper
· kamo-internal
Add useAvailabilityWebSocket हुक और उपलब्धताContext
· SecurityService
लॉगिन पर उपलब्ध ऑटो-सेट सदस्य उपलब्धता, लॉगआउट पर AWAY
· MediaService
सदस्य उपलब्धता स्थिति के लिए NATS → STOMP रिले जोड़ें
· SecurityService
सदस्यों की उपलब्धता को अद्यतन करना स्थिति enum
· SecurityService
सदस्य स्टेटस अपडेट के लिए उपलब्धता जोड़ें
· InitializerService
Migrate Member.is ability status enum के लिए उपलब्ध
· kamo-shared-library
सदस्य के साथ isAvailable boolean बदलें स्थिति 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
शीर्ष स्तर के ऑर्ग मालिकों और सिस्टम सदस्यों के लिए प्रबंधित डोमेन बटन दिखाएं
· kamo-internal
किसी भी खाते के साथ ऑर्ग मालिकों के लिए बिलिंग बटन सेट करें
जब एक org मालिक योजना बिलिंग टैब खोलता है और कोई बिलिंग खाता नहीं खोलता है अस्तित्व में, जेनेरिक के बजाय एक बूटस्ट्रैप प्रॉम्प्ट प्रदर्शित करें org मालिक" संदेश। बटन POST/api/security/account/ बूटस्ट्रैप बिल्लिंग (idempotent) तब पुनः लोड सफलता पर खाते हैं।.
· SecurityService
पूर्व मौजूदा ऑर्ग के लिए बूटस्ट्रैप-बिलिंग एंडपॉइंट जोड़ें
पोस्ट ************* एक ही ट्रिगर उप-ऑर्ग सृजन हुक (बिलिंग सेटअप सर्विस) के रूप में प्रभावशाली सेटअप .setupForSubOrgCreation) लेकिन एक org मालिक द्वारा ऑन डिमांड कहा जा सकता है। यह हैंडल ऑर्ग जो बिलिंग रिफैक्टर से पहले बनाए गए थे और इसलिए कभी एक खाता + खाता सदस्यता प्राप्त नहीं हुई।.
· kamo-internal
वेव 3 रूपांतरण, फॉलबैक फिक्स और ऑटो-ट्रांसलेट सीआई
- सभी हार्डकोडेड अंग्रेजी स्ट्रिंग्स को टी () के साथ बदलें लहर 3 घटक (चैट, क्लबहाउस, समर्थन, नोट्स, पाइपलाइन, लीड्स, नेव आदि) - संदेश / en.json (+19 कुंजी) में मर्ज लहर 3 टुकड़े - en.json (welcome, tagline) में होम सेक्शन प्लेसहोल्डर मूल्यों को ठीक करें, पाद लेख पाठ, लेखाDesc/networkDesc आईसीयू interpolation) - हार्डकोडेड स्ट्रिंग्स के बजाय टी () का उपयोग करने के लिए page.tsx में मोबाइल स्वागत पाठ को ठीक करें - अनुरोध को ठीक करें: सभी स्थानीय फ़ाइलों के लिए आधार के रूप में गहरी विलय अंग्रेजी लापता स्थानीय फ़ाइलें (pre-translate-CI) दुर्घटनाग्रस्त होने के बजाय अंग्रेजी की सेवा करते हैं, आंशिक रूप से अनुवादित स्थानीय लोग लापता कुंजी के लिए अंग्रेजी वापस आते हैं - अद्यतन **************** कैमो-मार्केटिंग के मैच के लिए अनुवाद और पुनर्निर्माण पैटर्न: प्रारंभिक तैनाती → अनुवाद सेवा पोर्ट-forward → स्थानीय फ़ाइल बनाएं → अनुवाद के साथ छवि का पुनर्निर्माण → redeploy
· kamo-register
कानूनी नाम पंक्ति पर नाम प्रत्यय के बाद उपनाम इनलाइन रखें
· kamo-internal
सदस्य के साथ तार अगली-intl स्थानीय स्रोत के रूप में भाषा
यूआरएल के बिना कामो-internal में अगली-intl आधारित अंतर्राष्ट्रीयकरण जोड़ता है स्थानीय उपसर्ग सक्रिय स्थानीय को कामो-स्थानीय कुकी से पढ़ा जाता है, जो प्रामाणिक सदस्य की 'भाषा' वरीयता को प्रतिबिंबित करता है (के माध्यम से सेट करें) क्षेत्रीय सेटिंग्स कार्ड ******************* संरचना: - i18n/locales.ts, i18n/request.ts: 22 समर्थित स्थानीय लोगों को कैमो-मार्केटिंग से मेल खाता है - /api/i18n/set-locale: kamo-locale कुकी लिखते हैं - LocaleBootstrap: पहले अधिकृत लोड पर Member.language को कुकी सिंक करता है - I18nProviders: MUI कोर, x-data-grid, x-date-pickers स्थानीय और लागू होता है। सक्रिय भाषा के लिए तारीख-फॉन एडाप्टर स्थानीय - useFormatters: Locale-aware date / number / प्रतिशत / सापेक्षकाल सहायक - MyAccountTab क्षेत्रीय सेटिंग्स सहेजें: कुकी + रूटर.refresh () लिखते हैं जब उपयोगकर्ता अपनी भाषा बदलता है - स्क्रिप्ट/translate.ts: अनुवाद सेवा के खिलाफ बिल्ड-टाइम डेल्टा अनुवाद (mirrors kamo-marketing's pattern) - स्क्रिप्ट / मर्ज-fragments.ts, ************* के लिए टूलींग संदेशों/en.json में प्रति एरिया कुंजी टुकड़े एकत्र करना कवरेज: - संदेश/en.json साझा आम के साथ बीज.*, nav*, auth.* चाबियाँ प्लस ~67 पृष्ठों और घटकों (डैशबोर्ड, लीड्स,) भर में प्रारंभिक निष्कर्षण वाणिज्य, सेटिंग्स, खाता, संपर्क, सेटिंग्स / फीचर्स, सेटिंग्स / सदस्य, घटक / सेटिंग, घटक / उपकरण / ई-चैट आदि। कई सुविधाएँ सतहों को अभी भी अनुवर्ती निष्कर्षण पास की जरूरत है।.
· 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 (intance, एक्सटेंशन, isvm)
जब अपस्ट्रीम प्रदाता उन्हें सूचीबद्ध नहीं कर सकता है तब कॉल रिकॉर्डिंग और वॉयसमेल के लिए सच के कैनोनिकल स्रोत के रूप में सॉफ्टफोन टैब द्वारा उपयोग किया जाता है - उदाहरण के लिए FreePBX 17 में REST/GraphQL वॉयसमेल-मेसेज API नहीं है, और इस इंस्टॉल पर Asterisk की CDR पाइपलाइन भी टूटी हुई है (KlusterServices में अलग-अलग ODBC गलत विन्यास फिक्स)।.
· SecurityService
उप-संगठन पर ऑटो-प्रोविजन KamoCRM सीट; पदोन्नत बिलिंग-owner endpoint
Entitlement Service walks SubscriptionMember (not AccountMember) to compute सदस्य पात्रता - सक्रिय लाइसेंसधारी सब्स में सुविधाओं का संघ, प्लस फ्री बेसलाइन रेडिस श्रोता एक SUBSCRIPTION प्राप्त करता है: <uid> हैंडलर। न्यू बिलिंग सेटअप सर्विस दो प्रवाहों में चलती है: - संगठनीकरण (कमोसीआरएम के तहत उप-ऑर्ग): auto-creates a KamoCRM-org यदि अनुपस्थित हो तो निर्माता के लिए सदस्य, एक KamoCRM खाता ढूंढता है या बनाता है उस सदस्य के साथ प्राथमिक रूप में, एक नि: शुल्क स्तरीय खाता सदस्यता खोलता है नए उप-org को लक्षित करना और निर्माता को लाइसेंसधारी + उप-प्रबंधक के रूप में सीट देता है। - POST **************** एक ताजा carves कामा एक मौजूदा उप-ऑर्ग के सदस्य के लिए खाता / उप, वैकल्पिक रूप से नामित लाइसेंसों को स्थानांतरित करना। केवल संगठन के मालिक। खातानियंत्रक मार्ग ड्रॉप isLicensee / canmanageSubscription से खाता-स्तर के ग्राहक पेलोड - वे झंडे अब सब्सक्रिप्शन सदस्य पर रहते हैं।.
· InitializerService
सदस्य भाषा + डिफ़ॉल्ट currency कॉलम जोड़ें
सदस्यों के लिए दो न केवल कॉलम जोड़ता है, जो नई तालिका का समर्थन करता है Member.language (VARCHAR DEFAULT 'इंग्लिश') और Member.defaultCurrency (VARCHAR(10) DEFAULT 'USD' फ़ील्ड। मौजूदा पंक्तियां वापस भरी हुई हैं इसलिए डिफ़ॉल्ट नहीं है तो पूर्ण बाधा एक डाउनटाइम के बिना संतुष्ट है खिड़की।.
· kamo-register
भाषा चरण जोड़ें, देश टाइमज़ोन पिकर, स्क्रॉल + *** फिक्स
- नया 'मेरी भाषा' कदम विज़ार्ड के लिए तैयार, देश को प्रतिबिंबित करना चरण का लेआउट। फ्लैग टाइल्स के रूप में 22 विपणन समर्थित स्थानीय लोगों की सूची मूल नाम + अंग्रेजी टूलटिप के साथ; navigator.languages से पूर्व चयन। - 'मेरे देश' कदम अब देश के साथ एक टाइमज़ोन एकत्र करता है, डिफ़ॉल्ट रूप से **************************** अगला। दोनों क्षेत्रों को आगे बढ़ने की आवश्यकता है। - पंजीकरण निकाय अब भाषा / टाइमज़ोन (साथ मौजूदा देश) भेजता है। / रजिस्टर समापन बिंदु के लिए इसलिए वे नए सदस्य पर बने रहे हैं। - फिक्स: सुरक्षा प्रश्न चरण सामग्री अब लंबवत स्क्रॉल कर सकती है - चरण एक अतिप्रवाह कंटेनर के बिना एकमात्र था, इसलिए लंबी सूची तीसरे प्रश्न को स्क्रीन पर धकेल दिया। - फिक्स: समाप्त बटन अब अक्षम रहता है जब *** ऑटो सत्यापित करता है हमारे श्रोता संलग्न होने से पहले। 100ms setTimeout दौड़ के साथ बदल दिया पोल-until-mounted संलग्न है कि यह भी विजेट की वर्तमान स्थिति पर नाली देर से श्रोताओं के लिए संलग्न करें।.
· kamo-internal
भाषा + डिफ़ॉल्ट मुद्रा को क्षेत्रीय सेटिंग्स कार्ड में जोड़ें
सदस्य प्रोफ़ाइल के क्षेत्रीय सेटिंग कार्ड अब संपादन योग्य भाषा को उजागर करता है (22 समर्थित स्थानीय लोग विपणन साइट को प्रतिबिंबित करते हैं) और डिफ़ॉल्ट मुद्रा टाइमज़ोन के साथ (searchable AutoFull)। सभी तीन एक साथ बचाते हैं PUT/api/security/members/{id}. देखें मोड मूल भाषा का नाम दिखाता है मूल रूप से अंग्रेजी में, साथ ही मुद्रा प्रतीक और पूर्ण नाम।.
· SecurityService
Persist member language/timezone/currency on signup
/ रजिस्टर समापन बिंदु अब भाषा, टाइमज़ोन और डिफ़ॉल्ट स्वीकृति देता हैकुरेंसी मौजूदा देश क्षेत्र के साथ। पंजीकरण सेवा सेट देश नए उपयोगकर्ता पर टाइमज़ोन और सभी चार क्षेत्रीय क्षेत्रों को लागू करता है नवनिर्मित सदस्य, देश की डिफ़ॉल्ट मुद्रा को देश से अलग करना प्राथमिक मुद्रा मानचित्रण जब कोई आपूर्ति नहीं की जाती है (और वापस यूएसडी में गिरती है)।.
· 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
/ acount/new copy-from-lead UX, पूर्ण नाम फ़ील्ड, दोहरी फोन, पता; खाता-स्तर पता प्रबंधन
फ्रंटएंड: - / खाता / नया: प्रति अनुभाग "Cope from Lead" बटन + हेडर "Copy all from lead" बटन (जब leadid param) - नाम अनुभाग: उपसर्ग, पहले, मध्य, अंतिम, प्रत्यय - एक्सटेंशन के साथ दोहरी फोन (व्यक्तिगत + काम) और "अनुमति दें" टॉगल - पता अनुभाग EmbAddress आकार (line1, विवरण, शहर, उपखंड, डाकघर, देश) का उपयोग करके "बिलिंग के रूप में भी उपयोग करें" टॉगल (डिफ़ॉल्ट ऑन) - जमा घोंसला नाम/email/phoneNumbers payloads मिलान backend - accountApi: typed accountName, AccountPhoneNumbers, AccountAddress; नई विधियाँ: getAddress, addAddress, अद्यतनAddress, हटानेAddress, setPrimaryAddress - AccountViewClient: नए पते सरणी से प्राथमिक शिपिंग पता प्रस्तुत करें
· SecurityService
समर्थन नेस्टेड नाम / ईमेल / फोन नंबर + पता प्रबंधन समापन बिंदु
- लेखा नियंत्रक ने POST/PUT पर नेस्टेड नाम / ईमेल / फोन नंबर JSON को स्वीकार किया - POST पर प्रारंभिक पता SHIPPING बनाता है (और बिलिंग जब useAsBillingToo सेट), प्राथमिक सूचक सेट करता है - 5 पता समापन बिंदु जोड़ें: GET, POST, PUT, DELETE पता; PUT / पते /{id} / प्राइमरी - खाता सारांश/विवरण नाम वस्तु, PhoneNumbers वस्तु, शिपिंग/बिलिंग पता सूची, प्राथमिक सूचक - ड्रॉप खाता-स्तर नोट्स फ़ील्ड संदर्भ (Account.notes पहले हटा दिया गया था)

तुम्हारा ब्रह्मांड इंतजार कर रहा है.
मिनटों में मुफ्त शुरू करें. जब भी आप तैयार हों तो उत्पाद जोड़ें - कोई माइग्रेशन नहीं, कोई नया लॉगइन नहीं.
हमेशा के लिए मुफ्त - कोई क्रेडिट कार्ड की आवश्यकता नहीं