Перейти к содержимому
KAMOUniverse

Журнал изменений

Что нового.

Каждое усовершенствование платформы, как только она появится.

  1. · kamo-internal

    Доступность Wire Разработчик: PresenceWrapper

  2. · kamo-internal

    Добавить UseAvailabilityWebSocket hook и AvailabilityContext

  3. · SecurityService

    Доступность автоматического набора участников Доступно при входе в систему, Дорога при выходе из системы

  4. · MediaService

    Добавить реле NATS→STOMP для статуса доступности членов

  5. · SecurityService

    Обновление конечных точек доступности для использования MemberAvailability Статус

  6. · SecurityService

    Добавить AvailabilityPublisher для обновления статуса участника

  7. · InitializerService

    Migrate members.is available to availability status enum

  8. · kamo-shared-library

    Заменить доступен булеан на MemberAvailability Статус

  9. · 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.

  10. · 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.

  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

    Кнопка «Управление доменом» для владельцев организаций верхнего уровня и членов системы

  16. · kamo-internal

    Настройка кнопки Billing для владельцев организаций без учетной записи

    Когда владелец организации открывает вкладку для выставления счетов и не ведет счета существуй, отобрази подсказку бутстрапа вместо общего "свяжитесь со своим Сообщение "владелец организации". Кнопка POST/api/security/account/ Затем бутстрап-биллинг (идемпотент) перезагружает счета на успех.

  17. · SecurityService

    Добавьте конечную точку загрузки для уже существующих оргов

    POST **************** триггеры одинаковые idempotent setup as the sub-org creation hook (англ.) (недоступная ссылка — история). .setupForSubOrgCreation) но может быть вызван по требованию владельцем организации. Это ручки оргов, которые были созданы до платежного рефактора и Поэтому никогда не получал Аккаунт + Подписка на аккаунт.

  18. · kamo-internal

    Конверсии Wave 3, исправление резервного копирования и автоперевод CI

    Замените все жестко закодированные английские строки на t() вызовы по волне 3 компоненты (чат, клуб, поддержка, заметки, трубопровод, провода, нав и т.д.) Объединить фрагменты волны 3 в сообщения/en.json (+19 ключей) - Исправьте значения заполнителя домашней секции в en.json (привет, слоган, текст нижнего колонтитула, интерполяция AccountDesc/networkDesc ICU Исправьте мобильный приветственный текст на странице.tsx, чтобы использовать t() вместо жестких строк Fix request.ts: глубокое слияние английского языка в качестве базы для всех локальных файлов Отсутствующие локальные файлы (pre-translate-CI) обслуживают английский язык вместо сбоя. и частично переведенные места возвращаются на английский язык из-за отсутствия ключей Обновление ****************, чтобы соответствовать Камо-маркетингу шаблон перевода и восстановления: первоначальное развертывание → TranslateService port-forward → фиксация локальных файлов → восстановление изображения с помощью переводов → передислокация

  19. · kamo-register

    Место никнейм inline после суффикса имени на строке юридического имени

  20. · kamo-internal

    Wire next-intl с файлом Member.language в качестве источника

    Next-intl-интернационализация через kamo-internal без URL локальные префиксы. Активная локализация считывается из камо-локального печенья, которое Отражает предпочтения аутентифицированного участника в отношении языка (устанавливается через Карта региональных настроек в **************** Инфраструктура - i18n/locales.ts, i18n/request.ts: 22 поддерживаемых региона, соответствующих камо-маркетингу - /api/i18n/set-locale: пишет kamo-locale cookie LocaleBootstrap: синхронизация cookie-файлов с Member.language при первой аутентифицированной загрузке I18nProviders: применяет ядро MUI, x-data-grid, x-date-pickers Адаптер date-fns для активного языка - useFormatters: locale-aware date / number /% / relative-time helpers - Сохранение региональных настроек MyAccountTab: пишет cookie + router.refresh() Когда пользователь меняет свой язык - скрипты/translate.ts: перевод дельты времени сборки против TranslateService (зеркала камо-маркетинга) - scripts/merge-fragments.ts, ************* агрегирование фрагментов ключей по областям в сообщения/en.json Охват: - сообщения/en.json сеяные общими.*, nav.*, auth.* ключи плюс начальное извлечение на ~67 страницах и компонентах (панель управления, лиды, торговля, настройки, учетная запись, контакты, настройки / функции, настройки / член, компоненты/настройки, компоненты/инструменты/ай-чат и т.д. Многие особенности Поверхности все еще нуждаются в последующих проходах извлечения.

  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

    Авто-предоставление кресла KamoCRM для создания суборгов; конечная точка владельца рекламного биллинга

    EntitlementService использует SubscriptionMember (не AccountMember) для вычислений членские права — объединение функций между активными сублицензиатами, плюс Свободная базовая линия. Слушатель Redis получает подписку: <uid>. Новый BillingSetupService работает в двух направлениях: - CreateOrganization (суб-org в рамках KamoCRM): автоматически создает KamoCRM-org Участник для создателя, если отсутствует, находит или создает учетную запись KamoCRM с этим членом в качестве основного, открывает учетную запись бесплатного уровня Нацеливается на новую подгруппу и ставит создателя в качестве лицензиата + субменеджера. - POST **************** вырезать свежий KamoCRM Счет/субъект для члена существующего суборга, необязательно Передача именных лицензий. Только для владельцев организаций. Лицензии / CanManageSubscription с сайта AccountController Полезные нагрузки клиентов на уровне учетной записи — эти флаги теперь живут на SubscriptionMember.

  24. · InitializerService

    Добавить язык участника + столбцы default currency

    Добавляет две колонки NOT NULL в таблицу участников, поддерживающую новую Member.language (VARCHAR DEFAULT 'ENGLISH') и Member.defaultCurrency (VARCHAR(10) DEFAULT 'USD') поля. Существующие ряды обратно заполнены по умолчанию, так что ограничение NOT NULL выполняется без простоя Окно.

  25. · kamo-register

    Добавить языковой шаг, выборку часового пояса страны, прокрутку + *** исправления

    Новый шаг «Мой язык» подготовлен к волшебнику, отражающему страну макет шага. 22 региона, поддерживаемых маркетингом, указаны как флаговые плитки с родным именем + английская подсказка; предварительно выбранные из navigator.languages. Шаг «Моя страна» теперь собирает часовую зону рядом со страной от ********************** до Следующий. Для продвижения необходимы оба поля. Регистрационный орган теперь отправляет язык / часовую зону (плюс существующая страна) для конечной точки /регистрации, чтобы они сохранялись на новом члене. - Исправление: Содержимое шага безопасности теперь может прокручиваться вертикально Шаг был единственным без переполненного контейнера, так длинны каталоги Третий вопрос был снят с экрана. - Исправление: Кнопка завершения больше не остается отключенной, когда *** автопроверка Перед нашим слушателем прикрепляется. Заменил 100-метровую сет-тайм-аут гонку на приложение, которое также истощает текущее состояние виджета на Прикрепление для поздних слушателей.

  26. · kamo-internal

    Добавьте язык + валюту по умолчанию на карту региональных настроек

    Карта региональных настроек профиля участника теперь отображает редактируемый язык (22 поддерживаемых сайта, отражающих маркетинговый сайт) и валюта по умолчанию (поиск автозаполнения) рядом с Timezone. Все трое спасаются вместе через PUT/api/security/members/{id}. Режим просмотра показывает имя родного языка с английским в скобках, плюс символ валюты и полное имя.

  27. · SecurityService

    Постоянный язык/временная зона/валюта при регистрации

    Конечная точка /register теперь принимает язык, часовую зону и частоту по умолчанию. Наряду с существующим регионом. Регистрационный сервис устанавливает страну и часовой пояс на новом Пользователе и применяет все четыре региональных поля к недавно созданный член, извлекающий валюту по умолчанию из страны; Картирование первичной валюты, когда она не поставляется (и возвращается к 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

    /account/ new copy-from-lead UX, полные имена, двойные телефоны, адрес; управление адресами на уровне учетной записи

    Фронтенд: - /account/new: кнопка «Copy from Lead» на секцию + заголовок «Copy all from Lead» (при использовании leadId param) - Раздел имени: префикс, первый, средний, последний, суффикс - Двойные телефоны (личные + работа) с расширением и переключателем «Разрешить текст» - Раздел адреса с использованием формы EmbAddress (линия 1, детали, город, подразделение, почта, страна) с переключателем «Использовать как выставление счетов» (по умолчанию) - Отправить вложенное имя/email/phoneNumbers payloads matching backend - учетные записиApi: типизированное имя учетной записи, номера учетной записи, адрес учетной записи; новые методы: getAddress, addAddress, updateAddress, deleteAddress, setPrimaryAddress - AccountViewClient: отображать основной адрес доставки из массива новых адресов

  30. · SecurityService

    Поддержка вложенного имени/электронной почты/телефонаЧисла + конечные точки управления адресами

    - AccountController принимает вложенное имя/email/phoneNumbers JSON на POST/PUT Начальный адрес на POST создает SHIPPING (и BILLING при использовании набора AsBillingToo), устанавливает основные указатели - Добавить 5 конечных точек адреса: GET, POST, PUT, DELETE адреса; PUT/addresses/{id}/primary - Сводка учетной записи / подробная информация об объекте имени, объекте телефонных номеров, списках адресов доставки / выставления счетов, первичных указателях - Полевые ссылки на примечания уровня счета (примечания к счету были удалены ранее)

Ваша вселенная ждет.

Начните бесплатно через несколько минут. Добавляйте продукты, когда будете готовы — без миграции, без новых логинов.

Бесплатно навсегда — не требуется кредитная карта