Скрыть карту ATF полностью, когда все поля заблокированы прикладной моделью
Пробная мастер-модель конечной точки и исправление AppliedModel org ID
- Заменить шлюз на основе AppliedModel.source прямым зондом /api/security/master-model on mount; r.ok=false (409) управляется типом ветви — тот же самый контрол...
Gate censorship tab options by applied model constraints
- Hide EDIT MASTER MODEL button when org is governed by a branch type (use appliedModel.source instead of unreliable org context branchTypeID) - Hide ATF fiel...
Mark-as-read and message fetch for shared/member mailboxes
Classic mode now loads shared mailbox messages via the correct /messages/{folder} endpoint (was calling the non-existent /conversations endpoint). Fetching a fu...
Mark-as-read for shared and member mailboxes
EmailController.setFlags now accepts an optional mailboxId query param and routes through resolveProviderWithMailbox so member-mailbox flags are set against the...
Use extensionId as external ID, not Relay node id
FreePBX returns the same Relay id (ZXh0ZW5zaW9uOg== = "extension:") for every extension because the id field is not populated. Using it caused all extensions to...
Обработка IMAPInputStream в getMessage для предотвращения ClassCastException
JavaMail может вернуть IMAPInputStream вместо декодированной строки Part.getContent() - когда содержание сообщения не было предварительно придумано. The Прямые ...
Увеличить ТТЛ с 90-х до 300-х, чтобы предотвратить ложное дросселирование на вкладке
Переписать все запросы/мутации GQL на интроспекции живых схем
Проверяли каждое имя поля и тип по фактической схеме FreePBX 17. Полный набор исправлений: Вопросы: - fetchAllExtensions: удалите из расширения несуществующее ...
Pass selectedFolder to ThreadDetailView so email:folder-changed fires with a valid folder
conversation.folder всегда не определен, потому что Java ConversationEntity У него есть папки (текст), а не поле строки папки. Это привело к тому, что нагрузка ...
Исправьте имя поля GraphQL для fetchAsteriskDetails
FreePBX API возвращает «Вы имели в виду fetchAsteriskDetails?» соответственно проверить запрос и его доступ к пути передачи данных.
Добавить заголовки XHR/Accept и парсинг струнных ответов для клиента GraphQL
Тот же шаблон, что и FreePBXTokenCache: добавьте X-Requested-With + Accept: Application/json подавление HTML-ответов FreePBX и переключение всех трех сайтов выз...
Sync mailbox dropdown to primary mailbox on load скачать бесплатно
Dropdown не попал в первый список, потому что выбранный Mailbox инициализировался без почтового ящика, в результате чего текущая ценность решается обнажить «лич...
Увеличить размер загрузки файла до 500 МБ
Spring Boot по умолчанию колпачок многочастных частей на 1 МБ, вызывая фоновое изображение Загружается, чтобы выйти из строя с 500 в request.getParts(). Служба ...
Поверхностные ошибки HTTP, поэтому сбои загрузки видны
Заменить немую консоль.warn на бросок Ошибка на неОК статус, чтобы пользователь видел фактическую причину отказа (статус + орган реагирования) Вместо того, чтоб...
Добавьте заголовки Accept + XHR и анализ ответов на исходную строку для конечной точки токена
FreePBX возвращал текст/html при вызове через кластер DNS. Заголовок хоста не соответствовал настроенному PBX HOSTNAME. Добавить Принять: приложение/json и X-Re...
Привод минимизированного ввода через элементы управления анимацией
Переключение aimate={...} на aimate={tabControls} нарушило запись анимация: у tabControls нет цели в очереди на монтировке, поэтому кнопка осталась в исходном п...
Исправьте строки OAuth2 для FreePBX API
FreePBX - это идентификаторы верхнего уровня: gql (все GraphQL) и «Отдых» (All REST) Формат gql:read означает GQL для модуля Называется «чтение», которого не су...
Экспозиция порта 8088 непосредственно в сервисе ClusterIP
Сервис имел только порт 80→8088 отображения. Внутренние службы используют **************************** (например, токен VOIPService API) Запросы были отсрочены,...
Trust backend pendingCount, drop client offsets (недоступная ссылка)
Backend pendingCount теперь не читается (сессии SUPPORT TICKET) С сообщениями новее, чем у последнего посетителя. Когда агент открывается билет, MarkAsRead → бэ...
Добавить недостающий отказ2ban-config ConfigMap для k1m1
Ссылки на развертывание fail2ban-config ConfigMap (jail.local +) asterisk-security.conf) но его не существовало, заблокировав подставку на МаунтВолуме. Настройк...
MarkAsRead после того, как агент отправил такой последний просмотренный аванс
На билетах поддержки как сообщения посетителя, так и сообщения агента хранятся под тот же системный член, поэтому непрочитанный запрос является члено-агностичес...
Билеты поддержки требуют член-агностик непрочитанный счет
Сообщения посетителей о билетах поддержки хранятся в той же системе что агент аутентифицируется как, поэтому существующая сессия ЧАТ не прочитана запросы, котор...
Перейти папку для загрузки Thread retry button
loadThread takes (threadId, папка); кнопка восстановления состояния ошибки Прошел нить Id, нарушив камо-внутреннюю сборку. Совместить призыв к Подпись.
Правильная идентичность Json Информационное свойство от «уникального» до «идного»
Предприятие-член объявило @JsonIdentityInfo (собственность = «уникальный идентификатор»), но Настоящее поле первичного ключа называется «id». Джексон бросил "не...
Удалите SSR Guard, вызывая несоответствие гидратации; сбросьте SockJS для родного WebSocket
Hero.tsx: удалите тип проверки окон вокруг ParticleField имеет ssr:false, поэтому охранник произвел несоответствие дерева сервера / клиента (React #418) - LiveS...
Явные непрочитанные индикаторы при открытии разговора
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 (провайдер) импортирует его Путь «...
Сила теневой хост-содержания со встроенными стилями + содержат: макет
Класс на основе переполнения-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 Пользователь системы имеет полный контроль над всеми неродительскими орган...
Как вы видите судоходство?
Каждое из этих обновлений автоматически попадает в ваше рабочее пространство. Начните бесплатно и смотрите, как он растет неделю за неделей.