Журнал изменений
Что нового.
Каждое усовершенствование платформы, как только она появится.
· KlusterServices
Сделайте шепот-аср независимо масштабируемым (HPA, многоузловый)
Удалите одноузловый штифт и переключитесь на кэш-память для каждой модели, чтобы стручки могли Расписание на любом узле и добавление HPA (мин 1/макс 4, CPU 75%, преднамеренно) Ускорение, учитывая медленные модели холодных стартов. whisper-asr — общая транскрипция бэкэнд для записей встреч и VOIP-записей / голосовых сообщений.
· KlusterServices
Переименовать статус клиента Guacamole в KamoDesktop
Отменять ******************************* «Подключение к Guacamole...» экран (и связанный с ним статус) читает KamoDesktop.
· MediaService
Запись проглатывания, удержания / квоты, использование хранилища, сводный конвейер
- MeetRecordingController: внутренний (X-Internal-Auth) глотающий конечную точку jibri Окончательная доработка.sh постов законченных записей. - MeetRecordingService: загружает записи в per-org MinIO (imaging-meet-recording), сохраняет метаданные MeetingRecording, обеспечивает соблюдение квоты хранения данных (выселение старейших); и — когда PostMeetingSummaryEnabled — работает сводный конвейер: транскрибирование (Материал собрания-резюме электронной почты). MeetRecordingRetentionSweep: запланированное удаление записей после хранения. - MeetConfigController: GET/recording-usage для реальных настроек накопителя. - application.yml: URL-адреса базы преобразования/ai/email + внутренний секрет аута. Требования (ops): KamoInitializer запускается для создания MEETING RECORDINGS; **************************** стоимость должна соответствовать медиасервису, jibri и Конверсионная служба.
· EmailService
Образцы стендов для предварительного просмотра шаблона резюме
Добавляет образец Вариабельности для нового шаблона собрания-резюме, чтобы управляющий Предварительный просмотр UI отображает реалистичный контент.
· kamo-shared-library
Собрание-резюме канонический шаблон
Добавляет транзакционный шаблон «совещание-резюме» (субъект + фирменный HTML с {{roomName}} и сырой {{summaryHtml}} и регистрирует его в CANONICAL KEYS Семена на орг. Используется после встречи AI Summary Delivery. Также исправляет Тест на погрузчике несвежий.
· KlusterServices
Модуль модератора Prosody, шепот-аср, загрузка записи джибри
- Meet-prosody: версия-контроль пользовательских плагинов ConfigMap (захватывает Существующий token verification no-op override, который был создан вне диапазона Добавить канонический модуль mod token moderation, включенный через **************************** Заявка «модератора» JWT Авторитетный — участники становятся владельцами, гости/анонимные не могут захватить владельца. - шепот-аср: саморазмещаемая речь-текст (быстрый шепот процессора, без внешнего ключа) для транскрипции после встречи. Meet-jibri: finalize.sh теперь загружает готовые записи в MediaService ******************************************************************************************************************************************************************************************************************************************************************************** Минио + удержание диска / квота + резюме. Секрет необязателен, так что Джибри все еще Начинается, если расстегнут.
· ConversionService
Запись конечной точки транскрипции для резюме после встречи
POST/api/conversion/meet/transcribe (X-Internal-Auth): нормализует загруженный запись на 16 кГц моно WAV через новый помощник FfmpegService; Отправляет его в самоорганизованную службу шепот-аср и возвращает. Whisper URL от kamo.services.whisper.url.
· kamo-internal
Интеграция календаря для запланированных встреч + реальный счетчик записи
- календарь Интеграция: когда включено, запланированное собрание клуба также добавлен к календарю создателя (через существующую календарную систему) Аутентифицированная ссылка /meet/join. Напоминания участников остаются обработанными Уборщик бэкэнда, так что никаких дубликатов электронных писем. - Настройки записи: счетчик хранения теперь показывает реальное использование на единицу GET/api/meet/recording-usage (замена удаленного заполнителя).
· kamo-shared-library
MeetingRecording entity + репозиторий для захваченных записей
Новая таблица MEETING RECORDINGS (org, meeting ref, room, MinIO bucket/object key, размер, продолжительность, временные метки, суммарный статус) — родительская запись для готового файла записи Jibri, сохранения / квоты и после встречи Обработка резюме. Таблица создается на следующем запуске KamoInitializer.
· kamo-internal
Маркетинговое приложение, концентратор настроек, материалы Canva
Сделайте маркетинг первоклассным орг-приложением и отправьте Canva-powered Материальный опыт. Приложение: - AppType.MARKETING mirror, Organization.isMarketing getter - шлюзовый маркетинговый нав (navRegistry) + разделы прав (permissionAppSections), SecurityRoleManager на сайте organization.isMarketing Маркетинговая карта в FeaturesManager (/settings/account?tab=apps) Настройки: - новый/настройки/функции/маркетинговый хаб (General/Social Media Providers/Canva) Переместить поставщиков социальных сетей из настроек CRM в маркетинг - обновлено 3 навигационных местоположения (настройки посадки, настройкиMenu, значок SettingsButton); Переназначить ссылку на пустое государство SocialTimeline Канва: - Настройка CanvaIntegrationManager вкладка + canva ProviderDef в платформе OAuth Register (+ Логотип) - /api/canva/* proxies (статус, начало соединения, конструкции, экспорт, экспорт-прокси, Отключение → MediaService - /маркетинг/материалы: библиотечная сетка (изображение MATERIALS assoc), загрузка, Create-in-Canva, Import-from-Canva, Return-nav auto-import
· ConversionService
Эскизы видео плакатов для маркетинговых материалов
Экспорт Canva MP4 (и любая загрузка видео) пропустите путь Docs PDF и получите одиночный ffmpeg poster-frame thumbnail ( thumb p0.png) вместо отказа. ********************** Раздел категории ВИДЕО **********************
· MediaService
Canva Connect OAuth + дизайн/экспорт бэкэнда
CanvaApiClient: авторизация PKCE, обмен токенами/обновление/отзыв, пользователи дизайны (создание/список), экспортные рабочие места, получение байтов - CanvaTokenService: зашифрованные токены на каждого участника (PlatformSecretCipher), Однополетное проактивное обновление (токены обновления Canva являются одноразовыми / вращающимися) - CanvaOAuthController (разрешение на все): соединить намерение → /начать → /обратный звонок, обратная посадка - CanvaController (аутентифицированный): статус, запуск соединения, создание / список проектов, экспорт (создать +poll +cache), байт экспорт-прокси, отключить
· kamo-shared-library
Интеграция Canva + Маркетинг как приложение с поддержкой организации
********************** Платформа Canva Connect регистрация клиентов ImageAssocType.MATERIALS (13, визуализирующие материалы) — ковш маркетинговых активов ********************** Сервис Тип.Маркетинг ServiceType.MARKETING(24) → COMPLETED / Enabled, чтобы стать настоящим приложением (FeatureController Auto-Provisions It ON per org, как CRM) - Объект CanvaConnection + repo: зашифрованные токены на каждого участника (доступ + обновление)
· KlusterServices
Ребренд Guacamole json-auth SSO + KamoDesktop
- JSON SECRET KEY (опционально) на гуакамоле из разделяемого десктопного секрета Связанное расширение гуакамоле-аут-джсона, против которого подтверждаются ссылки God-SSO. - расширение камо-брендинга (титул = KamoDesktop, логотип kamocrm + favicon) рабочий стол / гуакамоле / брендинг / в .jar, отправленный в виде бинарного конфигмапа и посевной GUACAMOLE HOME через контейнер. - CI создает общий ключ подписи в обоих пространствах имен (настольный компьютер для гуакамоле, guac-sso for SecurityService) из секрета GUAC SIGNING KEY; никогда не совершено.
· kamo-internal
Иконки KamoDesktop (Linux + Windows), открывающие сеансы с автоматическим подключением
Две навигационные иконки, оставшиеся от Аналитики, показаны только для членов, имеющих право на бог (бог добавлен к NavGateContext. Каждый из них получает короткоживущую ссылку SSO от SecurityService и открывает Шлюз KamoDesktop в новом окне, автоматически подключенный к его экземпляру. использует совершенный **************** марки.
· SecurityService
KamoDesktop SSO конечная точка для членов бога
**************************** (только для Бога) mints a 5-минутный токен guacamole-auth-json (HMAC-SHA256 + AES-128-CBC, в соответствии с расширением) формат провода) и возвращает URL автологина + автосоединения для KamoDesktop Шлюз. Подписание ключа + пароль RDP, введенный из секрета гуацо; никогда (blank-safe: SSO остается отключенным до конфигурирования).
· kamo-internal
Названия номеров, формат названия номера, календарные встречи Kamo, напоминания о начале; настройки i18n
- useMeeting/MeetingDialog: имена комнат теперь проложены по токену org Орги никогда не могут столкнуться с одной и той же конференцией Просоди и почтить Орг. RoomNameFormat (RANDOM vs. DISPLAY NAME RANDOM) Используя псевдоним члена. - MeetingComposer (календарь): кнопка «Kamo Meeting» генерирует комнату с орг-шпионом и устанавливает URL-адрес события на ссылку /meet/join click-time OTK, поэтому календарь Получатели приглашения + напоминания подписываются в качестве проверенных членов. MeetReminderPopup: подписка на /topic/meet/reminder/{memberId} (MediaService) Уборщик) и показывает тост «начало встречи» с кнопкой «Присоединиться»; PresenceWrapper в совместном чате WS. - соответствует вкладкам настроек: заменить жестко закодированные английские тосты / строки ошибок ключи *********************
· MediaService
Напоминания о начале встречи + истечение срока действия гостевой ссылки
MeetingReminderSweep: @Scheduled sweeper, который стреляет в режиме реального времени Напоминание о начале встречи для приглашенных участников (начните - напоминание) на ****************, затем переносит заседание СПЕЦИАЛЬНО Чтобы вывести. Встречи более чем за час до начала переходят без Напоминание (без обратного спама). Клиент создает аутентифицированную ссылку от собственного происхождения. **************** теперь чествует гостяLinkExpiryHours: встреча старше, чем настроенное окно организации (прикрепленное к запланированному запуску, иначе) Творение рассматривается как несоединяемое (0 = никогда не истекает).
· kamo-internal
Показать наличие участника в списке чатов; переименовать вкладку в каталог
1:1 строки чата теперь отображают живое присутствие коллеги + доступность так же, как и вкладка Directory — те же источники доступности / использования те же цвета / этикетки, что и MemberItem (точка + надпись, пульсирующая, когда онлайн, серый, когда офлайн, с подсказкой. Групповые чаты сохраняют "чей-то" «онлайн» точка аватара; строки социального обеспечения неизменны. Закладка «Члены» переименована в «Дирекцию» (только значение 18n), которая также очищается. столкновение имен с чатами «Члены» субтаб-группы.
· KlusterServices
Закаленный удаленный рабочий стол KubeVirt + шлюз Guacamole
Добавляет полный стек удаленного рабочего стола, GitOps-применяется через рабочий процесс развертывания: KubeVirt + CDI, установленный во время развертывания (спин-стабильные URL-адреса выпуска) - рабочий стол-1: Kubuntu 24.04 VM, 8 vCPU / 16Gi / 500Gi Блок-диск Longhorn, маскарадная сеть (родной кластер DNS), xrdp KDE сессия; установка облачного init Chrome, VS Code, NetBeans, Temurin JDK 21+17, Headlamp, Kate, LibreOffice Удалить Firefox - Apache Guacamole (guacamole + Guacd + Postgres config DB) desktop.kamocrm.com; guacd запускает hostNetwork на k1m1, чтобы он мог транслировать WoL и RDP непосредственно на локальную сеть 192.168.4.0/22, все еще достигая VM через Кластер FirstWithHostNet DNS - LAN Windows PC (192.168.4.44, MAC f4:4d:30:62:8a:68) добавлен в качестве соединения Wake-on-LAN (волшебный пакет на подключении, 30 лет ожидания) - Упрочнение края: Traefik TLS + жесткий настольный тариф-лимит + заголовки безопасности, Guacamole ввел запрет на использование грубой силы - auto-cert: desktop.kamocrm.com добавлен в STATIC DOMAINS + cross-ns зеркало cert-manager issues/renews tls-desktop-kamocrm-com в рабочий стол - Удостоверения: пользовательский «sage»; пароль вводится из секретного DESKTOP PASSWORD в момент развертывания (envsubst/sed + императивная тайна) — никогда не совершено
· kamo-internal
Подзаголовки для групп чатов, помните последнюю открытую вкладку
Список чатов, отфильтрованный рядом многоразовых таблеток, которые смотрели Место под вкладкой Чат. Заменить их одноместным субтаб-баром (одна вкладка на группу: Члены команды / Члены / Социальная / Поддержка) Закладки родительских членов / чатов, так что список выбранной группы заполняет все области содержания. Единый активный ковш вместо набора активных ведер; сервер теперь тянет только выбранную категорию. - Дефолты для членов команды, и сохраняется последняя открытая вкладка для каждого участника (по всем параметрам) устройства) через магазин ui-preferences (ключевые чатыActiveBucket), Сначала извлекайте, пока сохраненная вкладка не разрешится, чтобы она загружалась напрямую.
· kamo-internal
Объясните, когда электронная почта не настроена; Gate Compose
Входящие сообщения /messages ранее отображали свою полную оболочку даже тогда, когда организация У него не было почтового провайдера, или у члена не было почтового ящика, молчаливо подводя всех. Звонок API. Добавьте крючок доступности EmailAvailability, который решает, является ли электронная почта является пригодным для использования и, если нет, то почему (поставщик не настроен против почтового ящика) может ли действующий член самостоятельно обслуживать исправление, основанное на их правах. - MessageBrowser теперь показывает элегантную панель EmailNotConfigured вместо пустой почтовый ящик, с копией + CTA, которые адаптируются к причине и члену права (ссылка на настройки провайдера электронной почты для MANAGE EMAIL SETTINGS или Собственная вкладка почтового ящика для MANAGE EMAIL ACCOUNTS; в противном случае отложите админ. MailButton отключает «Compose New Email» до тех пор, пока электронная почта не будет полностью готова. Инструментарий для конкретных причин; NavToolButton получает поддержку элементов с отключенными / инструментами. - Установите правило «сообщения/» gitignore в корне РЕПО, чтобы оно также прекратилось игнорирование приложений/компонентов/сообщений/ (которые молча сбрасывали туда новые файлы).
· kamo-internal
Все типы Список чатов + внимание браузера
Chats sub-tab теперь перечисляет участников, группы, поддержку и социальные разговоры вместе, в первую очередь, с фильтром с несколькими выборками (Члены команды / Члены / Социальные / Поддержка; первые два используют собственные ярлыки организации. Team-Members vs. Members разделена на коллегу-члена Type; строки поддержки Покажите, являетесь ли вы или другая сторона агентом; каждый ряд открывает его. нативное окно инструмента (чат/поддержка/социальное). Добавляет TabAttention: значок favicon + мигающий документ. Название когда есть Невидимые сообщения любого типа чата (красный счет) или ожидающего приема-ведущего (Янтарный болт, соответствующий значку лидов / CRM; имеет приоритет). Читает The Существует UnreadContext + LeadAlertContext, поэтому нет нового бэкэнда.
· MediaService
Объединённые чаты для участников/поддержки/социальных сеансов
GET/api/media/sessions/chat теперь принимает фильтр "категорий" поддержка, социальная; по умолчанию все) и возвращает один во всем мире Слияние запросов per-kind. Каждый ряд несет: - sessionType (CHAT |SUPPORT |SOCIAL) + members[].memberType so the client может разделить внутренние чаты на членов команды против членов; - ticketId + supportRole (AGENT | REQUESTOR - поддержка двунаправленная) Поддержка строк и провайдер + соединение Название для социальных рядов, Таким образом, каждая строка открывает свое собственное окно инструмента.
· kamo-shared-library
Страницы запросов для поддержки + сеансы социального чата
объединяемый список чатов центра взаимодействия может включать в себя все виды: Поддержка (TYPE ID=2): сеансы, в которых член является назначенным агентом или Запрашивающий (также возвращает билет id + назначенный агент id для строки). - СОЦИАЛЬНЫЕ (TYPE ID=3): сессии по социальным связям, принадлежащие члену организации.
· kamo-internal
Завершите действия заголовка lead-view + обратные вызовы
Заголовок: разделите Call на Call (Work) / Call (Personal), открывая софтфон (скрытый, когда участник не имеет зарегистрированного расширения), электронная почта открывает Композитор, Текст -> comms/texts, Заметка перемещается слева с правилом и мигает до тех пор, пока Записка размещается с момента последнего переназначения. Удалите кнопку «Задание». - Статус: отбросьте недействительное меню «Изменить статус» и сломанную кнопку «Изменить статус»; Добавить строку STATUS > SUB-STATUS, которая требует выбора подстатуса и только Обновление при его изменении. - Обратная связь: диалог (дата/время + часовая зона + комментарий), ожидающий / просроченный список вкладка «Детали» с контактными/отмененными подсказками и лидамиApi + proxy Маршруты для расписания / списка / решения.
· EmailService
Внутренняя конечная точка для создания / отмены календарного события участника
POST/api/internal/calendar/events (X-Internal-Auth gated) разрешает член -> Пользователь -> основной календарь (создание по умолчанию при необходимости) и создает событие. Используется службой безопасности, чтобы отразить обратные вызовы в календаре участника.
· SecurityService
Ведущие конечные точки обратного вызова (расписание/список/решение)
*************************** Контроллер + сервис: сохраняется обратный вызов, записи, планирующие / итоговые заметки в медиа-поток лидера, и Отражает обратный вызов в календаре члена планирования через EmailService Внутренняя конечная точка календаря (наилучшие усилия).
· kamo-shared-library
Добавить LeadCallback, status enum и репозиторий
Backs the lead-view callback features: a lead-owned callback record (PENDING/CONTACTED/CANCELED) отключается от leadUid с мягкой ссылкой на Отражаемое событие календаря EmailService.
· kamo-internal
Создайте сессию для групповых чатов, открытых MemberIds
ChatTool проигнорировал реквизит.memberIds: открытая группа прибыла с пустым userId и no sessionGuid, так что 1:1 createSession вышел из строя раньше У окна никогда не было сеанса. Теперь, когда MemberIds присутствует в ChatTool Решает сессию с помощью POST/sessions/chat/find-or-create (используется тот же начальный путь ChatBox; бэкэнд добавляет) самого звонящего. Список участников подается как стабильная сортированная строка. эффект не возобновляется на идентичности массива, и разрешенные направляющие потоки через существующую обратную запись, так что окно группы является GUID-прикрепленным для Дедуп.

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