변경 로그
무슨 일이야?
플랫폼에 대한 모든 개선 사항, 그것이 선적.
· kamo-internal
철사 가용성 PresenceWrapper에 대한 공급자
· kamo-internal
UseAvailabilityWebSocket 후크 및 AvailabilityContext 추가
· SecurityService
자동 설정 회원 사용 가능 로그인, 로그아웃에 AWAY
· MediaService
NATS→STOMP 릴레이 추가
· SecurityService
MemberAvailability를 사용하려면 가용성 endpoint를 업데이트하십시오. 상태 enum
· SecurityService
회원 상태 업데이트에 대한 AvailabilityPublisher 추가
· InitializerService
Migrate member.is available 에 대한 가용성 status enum
· kamo-shared-library
Replace isAvailable boolean 와 memberAvailability 상태 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
Top-level org 소유자 및 시스템 구성원을위한 도메인 버튼 관리
· kamo-internal
계정이없는 org 소유자를위한 빌링 버튼을 설정
Org 소유자가 계획 청구 탭을 열고 청구 계정 없음 존재, 대신 부트 스트랩 프롬프트를 표시 "contact your org 소유자" 메시지. 버튼 호출 POST /api/security/account/ bootstrap-billing (idempotent) 다음 성공에 계정을 다시로드합니다.
· SecurityService
Orgs에 대한 부트 스트랩 청구 엔드 포인트 추가
****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** 같은 트리거 sub-org 생성 후크로 idempotent 설정 (BillingSetupService) .setupForSubOrgCreation) 하지만 org 소유자가 주문할 수 있습니다. 이 핸들 orgs 하기 전에 창의 refactor 과 따라서 계정 + AccountSubscription을받지 못했습니다.
· kamo-internal
Wave 3 변환, 낙하 수정 및 자동 번역 CI
- 파 3을 가로지르는 t()의 모든 하드코딩 영어 문자열을 대체합니다. 구성 요소 (채팅, 클럽 하우스, 지원, 메모, 파이프라인, 리드, 나브 등) - 메시지/en.json (+19 키)로 3개의 파편 - en.json (welcome, tagline, footer 텍스트, accountDesc/networkDesc ICU 교환) - hardcoded 문자열 대신 t()를 사용하는 페이지에 모바일 환영 텍스트를 수정 - Fix request.ts : 모든 로컬 파일에 대한 기본으로 딥 머지 영어 로컬 파일 (pre-translate-CI)는 충돌 대신 영어를 제공합니다. 그리고 부분적으로 번역된 지역은 누락된 열쇠를 위한 영어에 뒤떨어졌습니다 - 업데이트 *********** kamo-marketing 일치 번역 및 재건 패턴 : 초기 배포 → TranslateService port-forward → 로컬 파일 커밋 → 번역과 이미지를 재구성 → redeploy
· kamo-register
이름 suffix 후 별명 인라인으로 법적인 이름 행
· kamo-internal
Locale 근원으로 member.language를 가진 철사 next-intl
URL없이 kamo-internal에서 다음 기반 국제화 추가 로컬 접두사. Active locale는 kamo-locale 쿠키에서 읽습니다. Authenticated member's `language` preference (을 통해 설정 지역 설정 카드 *********** 인프라: - i18n/locales.ts, i18n/request.ts: 22 지원되는 현지인 매칭 kamo-marketing - /api/i18n/set-locale: kamo-locale 쿠키 작성 - LocaleBootstrap: 첫번째 정정된 짐에 member.language에 쿠키 동기화 - I18nProviders : MUI 코어, x-data-grid, x-date-pickers 로컬 및 적용 date-fns adapter locale의 활성 언어 - useFormatters: locale-aware 날짜/횟수/퍼센트/시간 돕기 - MyAccountTab 지역 설정 저장 : 쿠키 + router.refresh ()를 작성 사용자가 자신의 언어를 변경할 때 - scripts/translate.ts: 번역 서비스에 대한 실시간 델타 번역 (미러 kamo-marketing의 패턴) - scripts/merge-fragments.ts, *********** 툴링 메시지/en.json에 per-area 열쇠 파편으로 집계 적용: - shared common.*, nav.*, auth.* 키 플러스 메시지/en.json ~67 페이지 및 구성 요소 (dashboard, 리드, 상업, 설정, 계정, 연락처, 설정/기능, 설정/회원, 성분/조각, 성분/tools/ai-chat, 등). 더 많은 기능 표면은 여전히 후속 추출 패스가 필요합니다.
· 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
하위 파일 생성에 대한 자동 감독 KamoCRM 좌석; 홍보-비행기 endpoint
EntitlementService는 SubscriptionMember (countMember)를 통해 계산합니다. member entitlements — 활성 licensee subs의 조합, 플러스 무료 기준. Redis 청취자는 SUBSCRIPTION을 얻습니다.<uid> 핸들러. 새로운 BillingSetupService는 두 개의 흐름에서 실행됩니다. - createOrganization (KamoCRM의 하위 파일) : 자동 생성 KamoCRM-org 작성자의 회원은, KamoCRM 계정 생성 그 회원과 함께, Free-tier AccountSubscription을 엽니다. 새로운 하위org를 대상으로하고, 라이센스 + 하위 관리자로 제작자를 좌석합니다. - POST *********** 신선한 차 카테고리 기존 서브org의 회원을 위한 계정/sub, 옵션 라이센스를 전송. Org 소유자 전용. AccountController 경로 드롭 isLicensee / canManageSubscription from account-level customer payloads — 그 플래그는 이제 SubscriptionMember에 살고 있습니다.
· InitializerService
회원 언어 추가 + default currency 열
NULL 열을 회원 테이블에 추가하지 새로운 회원.language (VARCHAR DEFAULT 'ENGLISH') 및 회원.기본 통화 (VARCHAR(10) DEFAULT 'USD') 필드. 기존 행은 backfilled 기본적으로 NULL constraint는 가동불능시간 없이 만족합니다 창.
· kamo-register
언어 단계 추가, 국가 시간대 선택, 스크롤 + *** 수정
- 새로운 '내 언어' 단계는 마법사에 prepended, 나라를 미러링 단계의 배치. 플래그 타일로 22개의 마케팅 지원된 로컬 목록 네이티브 이름 + 영어 툴팁; navigator.languages의 사전 선택. - '내 국가' 단계는 이제 국가와 함께 시간대를 수집, 기본적으로 *********** 및 편집 가능 이름 * 둘 다 분야는 미리 요구됩니다. - 등록체는 이제 언어/timezone (현재 국가 플러스)를 보냅니다 /register 엔드포인트로 새로운 회원에 대해 주장합니다. - 수정 : 보안 질문 단계 내용은 이제 수직으로 스크롤 할 수 있습니다 - 단계는 오버 플로우 컨테이너없이 단지 하나였다, 그래서 긴 카탈로그 세 번째 질문 오프 스크린을 밀어. - 수정: 끝 단추 더 이상는 *** auto-verifies 때 무능하지 않습니다 우리의 청취자 부착하기 전에. 100ms setTimeout 레이스 교체 poll-until-mounted도 위젯의 현재 상태를 배수 늦은 청취자에 대한 첨부.
· kamo-internal
언어 추가 + 지역 설정 카드에 기본 통화
회원 프로필의 지역 설정 카드는 이제 편집 가능한 언어 노출 (마케팅 사이트 미러링 22 지원) 및 기본 통화 (searchable Autocomplete) 시간대에. 모든 3 득점을 통해 PUT /api / 보안 / 회원 / {id}. 보기 모드는 네이티브 언어 이름을 보여줍니다 괄호의 영어, 통화 기호 및 전체 이름.
· SecurityService
Persist 회원 언어 / 시간대 / 통화 가입
/register 엔드포인트는 이제 언어, 시간대 및 기본 통화를 허용합니다. 현재 국가 필드에 따라. 등록서비스 세트 국가 새로운 사용자의 시간대와 모든 네 지역 필드를 적용 신선하게 만든 회원, 국가의 기본 통화를 파생 1개가 공급되지 않을 때의 1 차 환전 매핑 (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
/account/new copy-from-lead UX, 전체 이름 필드, 듀얼 폰, 주소; 계정 수준 주소 관리
이메일: - /account/new: per-section "Copy from Lead" 버튼 + 헤더 "Copy all from Lead" 버튼 (When LeadId param) - 이름 단면도: 접두사, 첫번째, 중간, 마지막, suffix - 듀얼 폰 (인용 + 작업) 확장 및 "Allow text" toggle - EmbAddress Shape (line1, details, city, subdivision, postal, country)를 사용하여 주소 섹션을 "사용으로 청구" toggle (기본적으로) - Nested name/email/phoneNumbers payloads 매칭 백엔드 제출 - accountApi: typed AccountName, AccountPhoneNumbers, AccountAddress; 새로운 방법: get주소, add주소, update주소, delete주소, setPrimary주소 - AccountViewClient: 새로운 주소 배열에서 기본 배송 주소를 렌더링
· SecurityService
지원 배열된 이름/email/phoneNumbers + 주소 관리 엔드포인트
- AccountController는 POST/PUT에 배열된 name/email/phoneNumbers JSON을 허용합니다. - POST의 초기 주소는 배송 (사용시 BILLINGAsBillingToo 세트), 세트 기본 포인터를 만듭니다. - 추가 5 주소 엔드포인트: GET, POST, PUT, DELETE 주소; PUT /addresses/{id}/primary - Account Summary/detail는 name object, phoneNumbers object, shipping/billing address list, primary pointers를 노출합니다. - 드롭 계정 레벨 노트 필드 참조 (Account.notes 이전 제거되었습니다)

당신의 우주는 기다리고 있습니다.
몇 분 안에 무료로 시작하세요. 준비가 되면 언제든지 제품을 추가할 수 있습니다.
영원히 무료 - 신용 카드 필요 없음