Добавить логинг для загрузки фонового прокси-маршрута
Log org/index, имя файла/размер/тип и статус ответа Чтобы диагностировать, почему фоновые загрузки не достигают APIService.
Добавить столбец местоположения в дейтагрид билета
Читать **************************** прямо с SupportTicketDTO (сейчас снимок на билете) Время создания — никаких дополнительных поездок туда и обратно. Флаг + го...
Магазин гео на билете при создании, скачать GeoLite
****************************************************************************************************************************************************************...
Снимок гео посетителя на билете
Добавлены VISITOR IP ADDRESS, VISITOR COUNTRY CODE, VISITOR COUNTRY NAME, VISITOR CITY, VISITOR SUBDIVISION колонки. Запечатлено при создании билетов Таким обра...
Посетители с большой нагрузкой и пропустите поиск GeoLite в списке
Конечная точка списка /api/support/tickets была запущена на странице из 20 строк: - 20 **************** звонков (N+1) - 20 звонков на GeoLookupService.lookup, к...
Добавить findBySessionGuidIn для сыпучих погрузок
Используется конечной точкой списка поддержки, чтобы привлечь всех посетителей для страница в одном запросе вместо N отдельных вызовов findBySessionGuid.
Перейти папку для загрузки Thread retry button
loadThread takes (threadId, папка); кнопка восстановления состояния ошибки Прошел нить Id, нарушив камо-внутреннюю сборку. Совместить призыв к Подпись.
Восстановление личности участника JsonIdentity Обсуждение Kamo-shared-library
kamo-shared-library b57d156 fixes @JsonIdentityInfo (собственность = "уникальный") • «id» на элементе, разрешающий 400 ошибок на PUT/api/security/org/{id}.
Правильная идентичность Json Информационное свойство от «уникального» до «идного»
Предприятие-член объявило @JsonIdentityInfo (собственность = «уникальный идентификатор»), но Настоящее поле первичного ключа называется «id». Джексон бросил "не...
Добавить /ws/public-chat-native точку WebSocket вместе с SockJS
Регистрация второй конечной точки STOMP без SockJS в /ws / public-chat-native что интерфейс может подключаться к нативному WebSocket (brokerURL) без необходимос...
Удалите SSR Guard, вызывая несоответствие гидратации; сбросьте SockJS для родного WebSocket
Hero.tsx: удалите тип проверки окон вокруг ParticleField имеет ssr:false, поэтому охранник произвел несоответствие дерева сервера / клиента (React #418) - LiveS...
Per-ticket unread badge + фильтр «Только новые сообщения»
- Список билетов показывает значок чат-пузырь с непрочитанным счетом рядом Билет # всякий раз, когда на сеансе есть сообщения новее, чем у агента Последнее прос...
Трансляция непрочитанного сообщения агенту в сообщении посетителя
После того, как посетитель отправит сообщение поддержки, нажмите последние непрочитанные счета. Полезная нагрузка ******************* так агент билет-лист Обнов...
Включите сессии SUPPORT TICKET в непрочитанный запрос на членство
findChatMembershipsByMemberId теперь возвращает членство как для CHAT, так и для CHAT. Типы сеансов SUPPORT TICKET, так что существующий на члена непрочитанный ...
Явные непрочитанные индикаторы при открытии разговора
ThreadDetailView теперь отправляет электронную почту: папка изменена после MarkConversationRead Успешно, поэтому MailButton восстанавливает количество значков в...
Move CORS to Traefik via kamo-middlewares, remove in-app CorsFilter
The CorsFilter @Bean in the Spring app was silently not applying headers after WebConfig.java was removed. CORS is now handled entirely at the Traefik layer by ...
Use /public/{mainDomain}-{tld} path matching actual MinIO bucket layout
GetThemePath() генерирует /domain/{tld}/{split}/kamosite пути, которые Не существует в MinIO — тематические файлы живут в публичном ведре kamocrm-com/, baddi3-c...
Разорвать цепочку Min-W-0, чтобы содержать прокрутку электронной почты только в колонке тела
Добавить min-w-0 во внешний контейнер и основной контент flex div, так что гибкие дети не может расширяться до ширины содержимого электронной почты, что привело...
Поставщики хостинга выше ToolProviders
Та же первопричина, что и подъемник ChatWebSocketProvider: SupportTicketWindow звонки ********************************************** использовать Unread().markA...
Добавить suppressHydrationWarning и исправить неработающие изображения
hydrationWarning на <html> предотвращает ошибку React #418, вызванную браузером расширения (например, перевод, темный режим) мутирующие атрибуты html между SSR ...
Разрешить префикс /domain/ path на тему IngressRoute для CORS
Конфигурация темы на theme.kamocrm.com/domain/... не соответствовала Существующие правила маршрута (разрешены только /публичные / и /внутренние /) Вернулся 503 ...
Удалите дубликаты CorsFilter и разберите заголовки CORS в шлюзе
WebConfig.java определил второй CorsFilter, конкурирующий с CorsConfig. Ява бобы, рискуя дублировать заголовки. Удален, поэтому существует только один CorsFilte...
Удалите дубликат CorsFilter, вызывающий двойной заголовок Access-Control-Allow-Origin
Явная фасоль CorsFilter вызвала второй CORS-фильтр вместе с Spring. Встроенная поддержка CORS (с использованием CorsConfigurationSource) Оба фильтра решили шабл...
Удалите заявления debug console.log и добавьте недостающие маршруты
Удалить все временные отладки, добавленные во время отслеживания WebSocket ChatBox, TicketChat, MemberItem, ChatTool и используйте ChatWebSocket; перенаправить ...
Предотвращение расширения колонки заголовка сообщений на длинные адреса
У левого гибкого ребенка заголовка не было min-w-0, так долго нерушимая электронная почта адреса в From/To/Cc заставили его ширину мин-контента расти Надпись (и...
Hoist ChatWebSocketProvider выше ToolProvider
ToolDock (и его окна инструментов, такие как SupportTicketWindow → TicketChat) монтируется внутри ToolProviders, который сидит над обёрткой присутствия на дерев...
Drop Shadow DOM в рендере электронной почты так переполняет x-auto
Shadow DOM был основной причиной. Широкий контент электронной почты (таблицы фиксированной ширины) внутри тени дерево, окрашенное мимо хозяина, не внося вклад в...
Align ChatWebSocketContext путь импорта для соответствия провайдера
TicketChat и ChatNotificationListener импортировали контекст через Интернет. '@/app/contexts/...' alias while PresenceWrapper (провайдер) импортирует его Путь «...
Временная консоль.log отслеживает путь подписки TicketChat STOMP
Добавляет консольные журналы на каждом этапе абонентского трубопровода (влияет на пожар). Гарантийный пропуск, подписка() вызов, прикреплениеSessionSubscription...
Сила теневой хост-содержания со встроенными стилями + содержат: макет
Класс на основе переполнения-x-auto на теневом хосте не был надежно выигрышным против теней ':host { all: initial }' перезагрузка, так широкая электронная почта...
Прокрутите широкий контент электронной почты внутри теневой DOM, а не снаружи
Предыдущие попытки добавить переполнение-x-auto к свету предков DOM Он не мог уловить широкий контент электронной почты, потому что визуальное дерево теней Пере...
Используйте getHasAttachments(), чтобы соответствовать типу булевой обертки
**************** — булева (обертка), так что Ломбок Привязка () не является привязкой (). Последний только Существует для примитивного булева. Используйте Boole...
Расширить сканирование репозитория JPA, чтобы включить пакет коммерции
Новая библиотека, разделяемая Камо, приносит ******************* который требует **************************** (в com.kamo.z.shared.commerce). MediaService тольк...
Восстановить импорт HashMap в ChatWebSocketController
Предыдущий рефактор удалил импорт HashMap, но ручку метод по-прежнему создает HashMap для полезной нагрузки события ввода, вызывая Форджо строит неудачу с «не м...
Добавьте min-w-0 к контенту электронной почты, так что переполняйте x-auto
Без min-w-0 гибкая шея ребенка по умолчанию min-width:auto решает Мин-контент, позволяющий широким таблицам электронной почты расширять див мимо колонки Ширина....
Удалить дублированный вызов connectStomp в sendMessage
Когда первое сообщение создает новую сессию, onSessionCreated обновляет реквизит который запускает использование эффекта для вызова connectStomp. Входной звонок...
Активное создание NATS-потребителя при создании сеанса для предотвращения потери сообщений
Ранее NATS JetStream push-потребитель создавался только при клиенте STOMP. Отправить /app/chat/subscribe С помощью DeliverPolicy. Новые сообщения, опубликованны...
Закрытый разрыв в подключении, вызывающий падение сообщений в реальном времени
Удалить «подключенный» от использования подпискиEffect deps в TicketChat и Чатбокс. Раньше каждое повторное подключение WebSocket вызывало эффект Очистка, котор...
Позволить пользователю системы управлять брендингом Org и исправлять логотип
- Добавить обход пользователя системы в качестве первой защиты в canManageOrgBranding Пользователь системы имеет полный контроль над всеми неродительскими орган...
Содержит горизонтальный переполнение в панели просмотра электронной почты до 3-й колонки
Добавить переполненный x-скрытый во внешний контейнер MessageBrowser в качестве жесткой границы Добавить Overflow-x-hidden в графу 3 обертки и Overflow-x-auto в...
Производство провалилось2ban с тюрьмами PJSIP и постоянным состоянием
Добавить fail2ban-configmap.yaml с [asterisk] и [freepbx-web] тюрем, постепенная эскалация запрета (1h→24h→30d потолок), LAN ignoreip и пользовательский фильтр ...
Заменить Coqui TTS на Piper TTS (en US-norman-medium)
Модель Coqui VCTK не имеет названных динамиков — замените Piper TTS, который имеет динамики. Точный нормальный [средний] голос. Пипер двоичный (~3 МБ) и модель ...
Reset stale hasAttachments on sync and accumulate correctly
- Reset has_attachments=false at start of bulk sync so stale true values from old false-positive MIME detection are cleared before re-indexing - Accumulate ha...
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.
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 ...
Предварительно заселить FROM на ответ / вперед и исправить отправить с Адреса
DraftMessage теперь переносится из Адреса, поэтому он перетекает из OpenNewMessage через композитора - MessageBrowser хранит активный почтовый ящик emailAddress...
Поддержка от Address override в отправке
Добавляет из AddressRequest в EmailSendRequest, чтобы интерфейс мог указать alias/shared/mailbox адрес для отправки. Компания SmtpOnlyProvider использует этот а...
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...
Добавить local net для сплит-DNS/LAN клиента RTP
Телефоны в той же локальной сети, что и k1m1, подключаются через разделенный DNS (домен решается на 192.168.4.22 Внутренне. Без локальной сети Asterisk по-прежн...
Настойчивый контакт с магией = исправление памяти и блокировка SIP-сканера в startup.sh
Введите [res pjsip] contact=memory в sorcery.conf перед началом Asterisk; бэкэнд по умолчанию sorcery-astdb SQLite бесшумно отбрасывает все контакты REGISTER - ...
Как вы видите судоходство?
Каждое из этих обновлений автоматически попадает в ваше рабочее пространство. Начните бесплатно и смотрите, как он растет неделю за неделей.