Журнал змін
Что нового.
Все усовершенствования платформы, как только она будет запущена.
· kamo-marketing
Add Flowroute to integrations hub page
· kamo-marketing
Add Flowroute to INTEGRATED WITH banner
· kamo-internal
Show accurate provider connection status from isConnected field
Replaces the old logic that showed "Connected" for any provider with no sync error (including brand-new providers that were never tested). New three-state badge driven by isConnected (null/true/false): - null / never tested → grey "Not tested" (HelpOutlineIcon) - false → red "Not connected" (ErrorOutlineIcon) - true + sync error → amber "Sync error" (WarningAmberIcon) - true → green "Connected" (CheckCircleIcon) - RingCentral no OAuth → amber "Needs reauth" (unchanged)
· VOIPService
Persist connection test result to isConnected field
- test() endpoint saves isConnected=true/false to DB after every health check - update() resets isConnected to null when configJson changes (credentials may have changed, requiring a re-test before showing Connected) - toDto() exposes isConnected so the frontend can distinguish: never tested / connected / not connected
· kamo-shared-library
Add isConnected field to VoipProviderInstance
Nullable Boolean: null = never tested, true = last test passed, false = failed. Requires KamoInitializerService schema migration to add IS_CONNECTED column.
· kamo-marketing
Показати активні пропозиції банера з живим мілісекундним відліком
Підсумок активного сервера просування на головній сторінці та надає ГеройОферБаннер між підголовою та безкоштовною виплатою. У банері відображається сума знижок, тривалість та відлік в режимі реального часу ****** в 50ms) з анімованими градієнтно-жовтий кордон і шіммерний ковпачок. Рендери нічого, коли немає активних або недосвідчена акція існує.
· kamo-internal
Дріт Доступний / недоступний перемикач для резервного копіювання та виправлення помилок присутності OFFLINE
- Перейменування Paused/Active Chip на Доступний/UnЗагружено гостем - Видача початкової доступності на кріпленні та стійких носіях через новий API для обміну повідомленнями - Додати isAvailable поле до інтерфейсу Учасника та пропа - Член Список переходить від відповіді на департамент - УчасникItem показує он-лайн/OFFLINE/UNAVAILABLE Label з помаранчевим кольором для 0 - Виправлення помилок OFFLINE: додати видимістьзмінити серцебиття і 120-х періодичних сипучих re-fetch
· SecurityService
Додати до облікових записів, пов’язаних із відповідденням та обліковими записами
· InitializerService
Заповнювач - 0,05 = TRUE для існуючих членів
· kamo-shared-library
Додати до обраного поля для доступу до користувачів
· kamo-internal
Видалити доступ та домени та компонент доменуManager
· kamo-marketing
Live Переглянути значок + відмова від нового повідомлення агента
- Тримає LiveSupportPanel змонтовано під час мінімізації віджету (тільки коли існує підтримка) тому підписка STOMP залишається alive і onUnreadMessage вогонь для вхідних повідомлень агента навіть коли Відвідувач не шукає чату. - Анімує значок з пружинною шкалою на кожній зміні кількості (під ключ) re-mounts елемента) плюс безперервний Tailwind кільце під час > 0 р. - Вимкніть і нахиліть до мінімуму вкладку, коли кількість йде вгору, і перефарбуйте її червоним кольором, щоб він захопив увагу по всій сторінці. - ручкаЕкспон вже очищає кількість на відкритому повітрі, тому не потрібно змін там.
· MediaService
Публікація індексу + прочитати агента та відправник відвідувача
- ******** тепер делегати ****** так кількість відображає сеанси з непрочитаними повідомленнями відвідувачів та розпадами при агент викликів markAsRead. - Новий публіка ****** Helper. - ******** тепер (a) re-broadcasts агента задній програш після останньогоПереглянуто заздалегідь і (b) виклики Helper so the navtop SupportButton stays in sync без очікування наступне опитування 60-х. - ******** також називає помічник так navtop bumps жити коли відвідувач надсилає. Кількість навтопу тепер відповідає за зростанням стану значка одночасно після натискання та після оновлення браузера.
· kamo-shared-library
Непрочитане число + шукачий
Adds************************************************************************************************************************************************************************************************************************************************************** Підтримувані значки можна підрахувати квитки підтримки, які дійсно потрібні увагу (прочитані повідомлення відвідувачів) замість просто PRE TICKET/NEW статус. Кількість читає прямо з DB, так що вона витримує оновлення. Також додає************************************************************************************************************************************************************************************************************************************************************* може вирішити власник org з сеансу GUID після маркуванняAsRead.
· KlusterServices
Додавання медіа до списку сертифікатів субдомену
· kamo-internal
Додавання медіа субдомену до необхідних псевдонімів DNS
· kamo-internal
Додавання стовпчика Місцезнаходження до даних про квиток
Читачі ****************************************************************************************************************************************************************************************************************************************************************************** вимкніть supportTicketDTO (нині зніміть на суб'єкті квитка) час створення — додаткова поїздка. Рендерс прапор + місто/region/country з ІП показаний в інструментальному режимі; повертається до емітента при відсутності геоданих квиток на літак. Розгляд тільки агента. КвитокГедер вже споживає однакові поля ДТО, тому інструмент для пікап Вікно тепер показує знімок занадто — немає GeoLite або відвідувача-таблика читати на рендері.
· kamo-shared-library
EnglishDeutschPусский简体中文中國傳統EspañolالعربيةFrançaisελληνικάDanskАнглійскаябългарски
Додаток VISITOR IP ADDRESS, VISITOR COUNTRY CODE, VISITOR COUNTRY NAME, VISITOR CITY, VISITOR SUBDIVISION колонки. Захоплений створенням квитків Отже, список / кінцеві точки, ніколи не повинні робити сканування діапазону GeoLite або окремий перегляд відвідувачів на час читання. KamoInitializerService (hibernate.ddl-auto: оновлення) додасть стовпчики при наступному пробігу; існуючі рядки виходять назад до запису відвідувачів збережена країнакод в toDTO.
· MediaService
Додати /ws/public-chat-native plain WebSocket endpoint з SockJS
Реєструє другу кінцеву точку STOMP без SockJS на /ws/public-chat-native так що фронтенд може підключитися з рідним WebSocket (brokerURL) без необхідності Русский EnglishРусскийУкраїнськаPolskiItalianoEspañol汉语Bahasa Indonesiaहिन्दीPortuguês日本語DeutschFrançaisภาษาไทยελληνικά اللغة العربية Дозвіл сайту-Політика. Початкова /ws / public-chat SockJS кінцева точка зберігається для зворотної сумісності.
· kamo-internal
Пертикет Переглянути значок + "Нові повідомлення тільки" фільтр
- Список квитків показує чат-бублевий значок з непрочитаним підрахунком поруч з квиток #, коли сеанс має повідомлення, що виникли, ніж агента останнє повідомлення. - Додайте "Нові повідомлення тільки" фільтровий вимикач до фільтра. ******** на початковому навантаження і коли надходить вхідне повідомлення, тому значок очищає як агент читає розмову. Відповіді на камо-шаредно-лібертові зміни, які розширюються FindChatMembershipsByMemberId, щоб включити сеанси підтримки, плюс The MediaService трансляція в ****************
· MediaService
Радіоканал Переглянути кількість агента на повідомлення відвідувачів
Після того, як відвідувач надіштовхує повідомлення про підтримку, відштовхуючи останні непрочитані рахунки payload to************************************************************************************************************************************************************************************************************************************************************* оновлення мітки та навтопу в режимі реального часу. Дзеркальна трансляція в MediaController.sendMessage для чатів-учасників.
· kamo-shared-library
Включає в себе support TICKET сеанси в непрочитаному запиту членства
знайтиChatMembershipsByMemberId тепер повертає членства в ЧАТ і Підтримка TICKET типи сеансів, тому існуючий за п'ятий рахунок інфраструктура (getUnreadCountsByMember, /topic/chat/unread/{memberId} трансляція, GET **************** автоматично покриває підтримка квитків. Давайте агенти дивляться на нові індикатори в списку квитка і суміщений загальний непрочитаний значок в навтопі.
· KlusterServices
Виробництво неможливий2ban з джейлами PJSIP і стійким станом
- Додати не2ban-configmap.yaml з [asterisk] і [freepbx-web] в'язниці, неперервне закріплення заборони (1h→24h→30d стеля), LAN ігнорувати, і Призначений для користувача asterisk-безпека.conf фільтрування цільових записів PJSIP SecurityEvent - Конфігурація кріплень 2ban-config і hostPath /var/lib/pbx/fail2ban (ban стан зберігається через pod перезавантаження) в обох розгортаннях k1m1 і k2m1 - Конфігурації дроту в стартапі.sh перед невдалим2ban-client старт на обох вузлах
· kamo-shared-library
Add resetHasAttachmentsForFolder query to ConversationRepository
Allows sync to reset stale has_attachments flags before re-indexing so corrected MIME detection can rebuild the field from actual attachment data.
· KlusterServices
Integrate Coqui TTS with norman voice (VCTK p267)
- Deploy coqui-tts server (VCTK VITS model, CPU-only) as ClusterIP service on port 5002 with model cache at /var/lib/coqui-tts on k1m1 - Inject coqui_tts.agi into /var/lib/asterisk/agi-bin on each boot: calls HTTP API, caches 8 kHz mono WAV under sounds/coqui-tts/, streams via AGI STREAM FILE — use AGI(coqui_tts.agi,text) in any dialplan context - Write say.conf on each boot to route all Asterisk built-in say functions (digits, numbers, dates, times) through Coqui TTS
· KlusterServices
Add LAN DNS pod for split-DNS on k1m1
Deploys a dnsmasq pod with hostNetwork on k1m1 that listens on 192.168.4.22:53. Overrides pbx.k1.kluster.kamocrm.com -> 192.168.4.22 so LAN phones reach the PBX directly without NAT hairpin. All other queries are forwarded to 8.8.8.8/8.8.4.4. Router DHCP must be pointed to 192.168.4.22 as the primary DNS server for LAN clients to pick this up.
· kamo-internal
Вкладка конфігурації платформи (Загальний / VOIP & SMS / System User / Розширений)
Обгортання *********** в SettingsView з чотирма вкладками: - Загальний огляд платформи — загальний orgs, активний телефон-сервер кількість випадків, активна кількість екземплярів SMS-провідувача, останнє глобальне синхронізація VOIP частамп. *********************** - VOIP & SMS: редагування voipSyncIntervalMinutes (1..1440) і voipSyncEnabled, поверхня lastGlobalVoipSyncAt, плюс кнопка "Run Global sync зараз" Дзвінки SecurityService → VOIPService / внутрішньої/voip/sync-global. - Користувач системи: існуючий доступ до системи дає UI, що піднімається з КонфігураціяКлієнт дієслово в компонент вкладки (не зміна поведінки). - Розширений: Паралельна кнопка "Trigger Global VOIP тепер" для ops, плюс явне порожнє повідомлення про майбутні контрольи. КонфігураціяКлієнт тепер тонкий табличний оркестр. ВикористанняPlatformAdminGuard Залишилося на місці на рівні оркестрора, тому всі чотири табки закріплюються.
· DaemonService
Глобальна робота синхронізації VOIP (адміністративно-часовий інтервал)
VoipGlobalSyncJob лікує кожну хвилину і, на кожну клітку, читає СистемаКонфігурація однотону, щоб визначити, чи є глобальна синхронізація: - Якщо voipSyncEnabled помилково → пропустити. - Якщо lastGlobalVoipSyncAt + voipSyncIntervalMinutes > тепер → пропустити. - Інакше: POST / внутрішньої/voip/sync-global до VOIPService з ВнутрішнійAuthFilter header; оновлення lastGlobalVoipSyncAt на успіх. Це дозволяє операторам платформи регулювати курс з моменту запуску ****************************************************************************************************************************************************************************************************************************************************************************** → VOIP & SMS без перезапуску DaemonService або сенсорні вирази корона. Зареєстрований в QuartzConfig разом з існуючими роботами. k8s/configmap.yaml додає щік cron (1- хвилини за замовчуванням) і kamo.services.voip.base-url + внутрішній.auth.secret так, що вихідний виклик HTTP може автентифікувати.
· SecurityService
Системний налаштування + кінцеві точки кінцевого огляду
Платформа-широка конфігураційна поверхня, заглушка існуючого верхнього рівня-власника охоронець (matches SystemUserConfigController’s needTopLevelOwner шаблон). Призначення: - GET /api / Security /system-config — повертає рядок - PUT /api / Security /system-config — оновлення voipSyncIntervalMinutes / voipSyncEnabled. Часті оновлення підтримувані дії; інтервал 1..1440 хвилин. - GET /api/security/platform-overview — сукупні статисти (загальні оргії, Активний телефон / SMS екземпляр кількість, last sync частамп, поточний інтервал + ввімкнути прапор. - POST************************************************************************************************************************************************************************************************************************************************************* Дзвінки VOIPService / внутрішньої/voip/sync-global через внутрішню оператори платформи можуть вводити глобальну синхронізацію VOIP на вимогу Налаштування нової платформи → вкладка VOIP & SMS / розширена вкладка. Конфігурація: - kamo.services.voip.base-url (за замовчуванням до VOIPService кластерно-локальної адреси служби). - Використовує існуючі внутрішні.auth.secret.
· VOIPService
Контролери ресурсу Per-instance + Агрегат org + внутрішня синхронізація
Перистентний ресурс CRUD (видатки / користувачі / пристрої / голосова пошта): ************* - VoipUsersController на /api/voip/instances/{id}/users - VoipDevicesController в******************************************************************************************************************************************************************************************************************************************************* ************* - Кожен GET приймає ?refresh=true to power-fetch від провайдера та освіжаючи кеш; В іншому випадку виступає локальний кеш для сапфі UI. - Кожна заявка про те, що клієнт і доставити місцевий кеш, щоб сукупний без очікування наступної запланованої синхронізації. - Voicemail GET /{vmId}/audio потокове відео з постачальника через StreamingResponseBody так що UI може <audio src=...> він безпосередньо. Org-агрегатор (VoipOrgAggregateController at /api/voip/org): - /Вимірювання, /користувачі, /devices, /voicemail зворотні рядки по кожному екземпляру з {instanceId, екземплярName} таблетки. UI надає дані в сукупний вкладки в /settings/features/phone. - /health перевіряє Здоров'я () на будь-якому активному екземплярі в паралельній перистансі (згідно з даними InstanceSync Service), повертає InstanceHealthDto[]. - POST /sync працює InstanceSyncService проти кожного активного екземпляра поточний org. Увімкніть кнопку "Sync this org тепер" в UI. Внутрішній синхронізація (VoipInternalSyncController): - POST / внутрішньої/voip/sync-global петлі всі діючі екземпляри платформи. Дзвоните до запланованого кварцу DaemonService. Захищені існуючими ВнутрішнійAuthFilter в VOIPService. Побудувати зелений.

Твій всесвіт чекає.
Почати безкоштовно за декілька хвилин. Додати продукти, коли ви будете готові — без перенесення, без нових реєстрацій.
Безкоштовно назавжди — не потрібна кредитна карта