Журнал изменений
Что нового.
Каждое усовершенствование платформы, как только она появится.
· SecurityService
Bulk-reassign конечная точка, закрытая на REASSIGN LEADS MANUALLY
POST ************* переносит партию лидов в одну команду участник и электронные письма, которые участник один раз для всей партии. Авторизация использует REASSIGN LEADS MANUALLY (149) — право, названное в честь Это. Это более строгий путь, чем односвинцовый путь на PUT/leads/{id}, который Проверяет ASSIGN LEADS; переназначение сотни проводов - другой радиус взрыва от переназначения одного, и эти два права существуют, так что они могут быть предоставлены отдельно. Неназначенный уровень видимости также соблюдается здесь. Назначение - это видимость Грант: после того, как ведущий назначен звонящему, он читается как «назначенный мне», который Поднимает неназначенный 403 и пропускает контактно-информационную маску. Без этого проверить абонента, держащего 149, но не VIEW UNASSIGNED LEADS может самостоятельно назначить лидов Сетка прячется от них и отмывает их в полностью читаемые. пропущенный Ведущие сообщают NOT FOUND — сопоставляя то, что показывает их собственная сетка — так что ответ Нельзя перечислить скрытые или чужие зацепки. Партия намеренно не все-или-ничего: каждый цессионарий Lead работает самостоятельно. Транзакция и плохой идентификатор становятся пропуском, потому что отбрасывают девять хороших. Переназначение в десятый раз хуже, чем отчетность, которую никто не принял. Выключено по 250 за звонок, чтобы связать как замки рядов, так и вентилятор в реальном времени. Уведомитель разрешает свои данные в короткой транзакции через отдельный фасоль. и отправляет после этого, поэтому исходящий звонок с тайм-аутом 30-х годов никогда не пинает Связь CRDB. Пересечение границы фасоли также делает @Transactional применяется вообще — самовызов будет бесшумно выполняться без транзакции и ЛАЗОВАЯ ассоциация пользователей бросает.
· EmailService
Выборочные переменные для шаблона LEADS ASSIGNED
Без дела здесь редактор шаблонов администратора Preview отображает новый шаблон с каждой заготовкой, которая читается как сломанный шаблон, а не как Незаполненный. NotesBlock - это предварительно отредактированный HTML, потому что у рендерера нет Условия — отправитель сворачивает его на «», когда нет заметки.
· kamo-shared-library
Шаблон электронной почты LEADS ASSIGNED; затвердить назначениеLead для массового использования
«CeignLead» имел нулевые звонки и никогда не работал в производстве. Перед тем, как связать Путь массового переназначения на него, дать ему гарантии, что путь нуждается: - взять OrgId и проверить оба лидера и новый цессионарий принадлежат ему, так что Переназначение не может охватывать арендаторов (сообщается как «не найдено») "запрещено", так что ошибка не может быть использована для исследования иностранных свинцовых идентификаторов - блокировка строки с помощью findByUidForUpdate: ручное переназначение и одновременное пул-принять цель того же свинца и в противном случае влиться в потерянный обновление - очистить флаги бассейна, отражая CreditLeadAssignmentService. Лид, отмеченный для автоназначение в противном случае остается в бассейне после того, как заявлено от руки и Из-под своего нового владельца - опубликовывать маршрутизацию чата, как уже делает обновлениеLead, так что заемщик открыт в прямом эфире Чат следует за лидером вместо того, чтобы оставаться с предыдущим офицером Также добавьте канонический шаблон LEADS ASSIGNED. Ключ должен быть в CANONICAL KEYS или он никогда не может быть посеян и никогда не может самовосстанавливаться. Возвращает постоянный 404.
· kamo-shared-library
Добавить MANAGE ORG BRANDING (174)
Конечные точки брендинга (логотипы, цвета, фоны, тематика) были Только владелец или бог, не оставляя возможности делегировать брендинг без передачи Право собственности на организацию. Добавляет делегируемое право; владелец проверяет пребывание в качестве Неявный грант, чтобы существующие владельцы продолжали работать, не получая его.
· kamo-internal
Авторские матрицы приемлемости из панели каталога
Без матрицы, охватывающей заполняемость и цель сценария, ценообразование возвращает NO COVERAGE - Таким образом, до этого можно было оценить только покупку основного места жительства. Форма авторов a матрица и ее ячейки для выбранного предельного вида, заполнения и назначения с добавлением/удалением ячейки Ряды, рядом с блокировочной формой в той же панели. Оставляя продукт неустановленным авторам по одной матрице на ACTIVE продукт инвестора, поскольку Матричная сфера действия продукта НЕ НУЛЬНА и не может выразить «все продукты» в виде одной строки.
· SecurityService
Relay eligibility-matrix authoring; rebuild picks up the SUSPENDED
Relays POST ********************************************************************************** Помощник, поэтому стюард-авторы матрицы только для своего арендатора. Этот толчок также восстановится против изменения общего освобождения, которое позволяет возобновить заем. Камо-общая библиотека не имеет собственного CI — каждая служба клонирует и строит его из источника. Таким образом, исправление достигает этой службы только тогда, когда эта служба восстанавливается.
· kamo-internal
Восстановление студии-агента как полнофункционального рабочего пространства
Удаление ширины колпачка не было фиксацией; сама компоновка должна была быть спроектирована. Для пространства, а не терпимого в нем. Студия теперь имеет три зоны рядом: ** Автомагистраль** — секции, текущий выделен при прокрутке (IntersectionObserver, взвешенный сверху, так что секция становится текущей, когда ее заголовок Достигает там, где действительно есть внимание. Секции, написанные от руки, отмечены, поэтому Рукописную часть можно найти позже, не открывая каждую. ** Редактор** — сами разделы, наклоняющиеся на столько столбцов, сколько Видопорт держит вместо одной узкой ленты. Живая беседа — настоящая колонка на широком дисплее, а не полоса, которая Разбивает содержимое при открытии. Это цикл редактирования и просмотра студии Существует для: изменить инструкцию, увидеть изменение ответа, без навигации. Один экземпляр TestDrivePanel, перепозиционированный, а не дублированный — установка его Дважды начинались две бросковые сессии. Ниже xl он падает под редактором Полноразмерный ряд вместо того, чтобы сжимать третью колонку на дисплее без комнаты Во-первых, рельс полностью скрывается на маленьких экранах.
· kamo-internal
Автор политики блокировки - без одного, никакая ставка не может быть заблокирована вообще
RateCommitmentService отказывает в блокировке всякий раз, когда ценовой результат не несет lockPolicyVersionId («требуется версия с блокировкой»), и результат несет только один, если Инвестор имеет опубликованную версию политики блокировки. Ни один пользовательский интерфейс не может опубликовать его, поэтому блокировка скорости Он был недоступен для каждого арендатора, в то время как сама конечная точка уже была построена. и правильно заменяют. Отсутствовали только клиентский метод и эта форма. Форма принимает предлагаемые периоды блокировки в качестве упорядоченного списка, потому что ПЕРВЫЙ становится первым. по умолчанию, поэтому он намеренно не сортирует их; записи, которые не являются положительным целым Количество дней отбрасывается, а не отправляется как плохой срок блокировки.
· kamo-internal
Показать, как работает каждый агент
Добавляет секцию производительности в топ студии агента: разговоры, как Часто человек взял на себя и то, что вызвало это, результаты охвата и стоимость. Написано так, чтобы ни одна фигура не могла ввести в заблуждение: Зеро означает «Никто», но никогда — «0». Акция отображается только тогда, когда есть знаменатель; в противном случае нет разговоров Сравнение с ними. Процентов нулевого знаменателя не существует. - Когда ничего в период не несет цены, нет цифры стоимости вообще - Это просто объяснение того, что цены были установлены после того, как произошел трафик. частичный Покрытие показывает сумму плюс сколько ответов отсутствует. Подавленная информационно-пропагандистская работа представлена как особенность: Они продолжаются Цель - это ваша запись того, почему с кем-то не связывались. Неизвестные коды enum ухудшаются до читаемого текста, а не до исходного ключевого пути. Перевернутые сообщения и столбцы передачи были удалены: API не агрегируется их по версии, так что эти ячейки сделали бы сфабрикованный 0, как если бы он были измерены. Разговоры сами по себе отвечают на то, для чего предназначен стол, который сохранился. Копия обрабатывает какой трафик. Сложенный в существующий документ студии прокрутки, а не в новую вкладку, и исключены из списка агентов, где голый 0 против каждого агента будет точным неправильно прочитанное избегание.
· AIService
Счетная карточка агента
Что на самом деле делал каждый агент: разговоры, как часто человек должен был брать на себя ответственность и почему, аутрич-результаты, в том числе сдерживаемые, и сколько это стоит. Каждое число — это то, что данные могут поддерживать. Три вещи намеренно Не здесь: - ** Никаких токенов.** Они реальны на пути синхронизации и сфабрикованы на потоковая передача одного (content.length()/4), поэтому любая сумма является частью изобретения. Ответы на вопросы Тот же вопрос, честно говоря, потому что он нуль, а не угадывается, где Стоимость неизвестна. ** Никакого разрешения или отклонения.** Ничто не указывает на то, что разговор Все закончилось хорошо, и «никакой передачи не произошло» не является доказательством успеха. **Никаких сообщений в каждой версии или переадресации.** Они не являются агрегированными на Версия, и выделение 0 для них было бы изготовлением, выполненным как Измерение - точный отказ этого экрана существует, чтобы избежать. Стоимость несет явный отслеживаемый флаг и нулевую сумму, а не 0, когда ничего в окне не было оценено, поэтому организация, чей трафик предшествует ценообразованию, видит "Не записано" вместо уверенных $0,00. PricedCalls является авторитетом Таким образом, подлинный ноль от ценовых звонков свободного уровня все еще читается как Отслежено. Транскрипты транскриптов транскриптов VIEW SALES AGENT TRANSCRIPTS отдельно подсчет - резюме модели конкретного посетителя - это содержание разговора, а не метрика. Агенты без трафика возвращают структурно полную пустую табло: Агент, отсутствующий в списке, читается как ошибка, агент, присутствующий с нулями, читает Как истина. ParseHandoffArguments теперь делится с чатом, а не реализовывается. Таким образом, принуждение выдуманных причин Другому не может дрейфовать между ними. Сюита 150 тестов, зеленый.
· kamo-shared-library
Сгруппированные агрегированные запросы для оценочной карты агента
Двенадцать агрегатов @Query для сеансов, сообщений, записей об использовании и исходящих штрихи, поэтому карта результатов - это несколько сгруппированных запросов, а не строки загрузки В память. В предикатах вместо того, чтобы оставлять абонентам два свойства: - *** Тестовые сессии исключаются в самом запросе.** Молодой агент, который Собственные тест-драйвы автора в противном случае были бы большей частью данных, а абонент, который Забывает фильтровать, производит числа, которые выглядят реальными, а не реальными. **счет (оценка) учитывает только ненулевые расходы.** Это то, что позволяет Счетная карточка отличает «ничего не было оценено» от «это стоило ноль» те, кто поставит уверенные $0,00 перед организацией, чей трафик просто Предшествует ценообразованию. Исходящие прикосновения группируются по решению, а не фильтруются для отправки. The Отказы - самая интересная половина: агент, чьи прикосновения почти все SUPPRESSED QUIET HOURS неправильно настроен, и это невидимо, если декодеры Выброшен.
· kamo-internal
Редактировать, сколько стоит каждая модель
Добавляет редактирование цены за модель на экран настройки провайдера. Цены высевают из цена каждого поставщика, опубликованная в списке, где мы ее знаем, и пустая, где мы ее не знаем - пустой означает, что стоимость просто не отслеживается для этой модели, которая лучше. Число, которое уверенно ошибается. Копия говорит людям, чтобы проверить семенные фигуры против их собственного счета, а не придать им авторитетность. Исправляет ошибку отображения, пойманную в обзоре: обрезка с нулевым следом сделала бы Стоимость 10 как 1. Теперь он удаляет нули только после десятичной точки.
· AIService
Каталог ценообразования модели, путь записи и заполнение
Бухгалтерский учет затрат никогда не сработает: у AiModel есть ценовые столбцы Читает их и ChatOrchestrationService читает их для расчета стоимости. Их нигде не писали. Модели создаются только путем обнаружения поставщика, и Ни один провайдер API не возвращает цены. 140 моделей, 0 по цене, нет пути, по которому Может измениться. Колонны были структурно недостижимы. Три части: - ModelPricingCatalog Цена поставщика семян LIST при открытии, сопоставленная с ценой нормализованный идентификатор с дефисно-граничным правилом префикса, поэтому gpt-4 никогда не может Утверждение gpt-4o. Не-чатовые модели (TTS, встраивания, в режиме реального времени) отвергаются повторное использование существующей проверки модальности - они выставляют счет на другом листе. Конечная точка PATCH + пользовательский интерфейс, чтобы организация могла исправить или очистить цену. Орг-шпион точно Как и существующий DELETE. - Backfill заполняет только NULL колонки, на колонку самостоятельно и никогда перезаписывает то, что установила организация - в противном случае редактирование цен было бы Ложь. Идемпотент, и завернут так, что учет затрат никогда не сможет заблокировать загрузку. ** Модель, в которой мы не уверены, не имеет цены, а не угадывается.** GPT-5, o3, большинство Mistral, DeepSeek, xAI, Cohere и Meta намеренно пусты; OpenRouter и HuggingFace никогда не совпадают по дизайну, поскольку они выставляют свои собственные тарифы. И унаследовать цены выше по течению было бы догадкой. Неправильная цена приводит к Фигура в форме счета-фактуры, которая уверенно ошибочна - та же причина, по которой стоимость все еще остается не вычисляется на потоковом пути, где подсчитываются токены. Преобразование в колонку на 1к использует режим округления. Необязательно нарочно: цена нуждающихся в более чем 6 десятичных числах бросает на класс-init, а не молча хранить Разум и остается пустым. Сюита 145 тестов, зеленый.
· kamo-internal
Покажите контекст передачи ИИ агенту, принимающему на себя
Отображает событие системы AI HANDOFF в виде карты с причиной, резюме AI, и расшифровку разговора до сих пор - так заемщик делает Не нужно объяснять себя человеку, который поднимает трубку. Три деградировавших состояния являются явными и видимыми, а не молчаливыми. недоступен, транскрипт усечен и полезная нагрузка удалена в пути. Агент должен Никогда не оставляйте веру в то, что у них есть полный контекст, когда они этого не делают. Посетитель и агент делят одну тему STOMP, поэтому живой кадр прибывает отредактирован. Резюме ИИ — это его частная оценка посетителя и не может перейти к его браузер). Вместо того, чтобы сказать агенту перезагрузить, карта перечитывает полный ряд. Один раз из собственной аутентифицированной конечной точки. Перечитывание проверяется до того, как оно принятый — ответ, который вернулся неподвижно, отвергается, а не используется; Таким образом, предупреждение может быть ясно только тогда, когда контекст был действительно получен. Любая неудача Возвращается к перезагрузке сообщения.
· APIService
Прокси-маршрут передачи AI->human handoff
Добавить POST **************** Обращение в MediaService Вместе со своим создателем, сестрой. Без этого функция передачи была мертва по прибытии: конечная точка MediaService жёсткие требования X-Internal-Auth, X-Public-Chat-Org-Id и X-Public-Chat-Key-Hash, который впрыскивает только этот шлюз, так что виджет POST 404 здесь и никогда Дошел до него. Носит ту же условную охрану, что и CreateSupportSession. Увольнение Полный путь создания сеанса, так что опосредование его голым оставило бы Путь создания билетов, который обходит доказательство работы, его брат принуждает.
· MediaService
Перенесите разговор ИИ в человеческую нить при передаче
Создает или повторно использует сеанс поддержки, копирует транскрипт ИИ в виде одной системы Событие, маршрутизирует его и честно рассказывает посетителю, что происходит дальше. Конфиденциальность делится на аудиторию, которую первый пас получил задом наперед. The Резюме и причина ИИ Подробная информация - это его частная оценка посетителя, а также полная полезная нагрузка достигала браузера посетителя через две двери REST и Фрейм STOMP, пока агент ничего не видел. Редакция теперь применяется ко всем Путь, обращенный к посетителю; непрерывный ряд сохраняет полную полезную нагрузку для агента. chat.session.{guid} - это одна тема, на которую подписаны обе аудитории. кадр разрезается на то, что может видеть посетитель, а пользовательский интерфейс агента перечитывает полный ряд собственной аутентифицированной конечной точки. Idempotency вводится на aiSessionGuid, орг-скопирован и проверен до создания Что угодно. Ключи на сессии и проверка после создания - очевидное Форма — бесполезна именно тогда, когда имеет значение: повторная запись, потерявшая сеанс Токен всегда проходит чек и производит дубликат билета и второго агента. Страница. transcriptAttached сообщает о том, что произошло на самом деле. Ранее он возвращался Это верно даже тогда, когда книга молча провалилась, а это худшее, что возможно. комбинация: посетителю говорят, что его контекст попался, нить агента Он пустой, и никто не знает. Копирование-на-руку, а не миграция: ИИ остается там, где их читает аналитика.
· AIService
Инициированная агентом передача человеку, с контекстом
ИИ ранее не мог просить человека: правила эскалации дошли до модели через скомпилированную подсказку, но не было машиночитаемого сигнала обратно, поэтому Модель могла только сказать, что это приведет кого-то, и ничего не произошло. - Синтетический камо request человеческий инструмент, описанный с помощью собственного активированного агента Названия правил эскалации, так что модель видит идентичные триггерные условия. Быстрота и инструмент. Перехвачено перед отправкой MCP — это сигнал, а не Настоящий вызов инструмента - и строка TOOL, которая сохраняется, делает причину долговечной Аналитика готова с нулевыми новыми столбцами. Прикрепляется только тогда, когда канал действительно имеет прямую поддержку. Передай ему Инструмент, который обещает человеку, который никогда не сможет приехать, хуже, чем ИИ. отсутствие инструмента: виджет не имеет вкладки Поддержка, поэтому сигнал отбрасывается и Посетитель остается ждать кого-то, кто никогда не придет. - Новая внутренняя конечная точка возвращает причину передачи, резюме ИИ для любого Пользователю/помощнику (USER/ASSISTANT). TOOL и SYSTEM являются исключено - человек нуждается в разговоре, а не в технике. - причина Подробности и резюме намеренно удерживаются из браузера посетителя: Это частная оценка модели посетителя. только запрошенные, Причина переходит к клиенту; MediaService захватывает остальную сторону сервера. Повороты ИИ никогда не перемещаются и не удаляются. AiChatMessage остается аналитической системой Человек получает копию; Также исправлен скрытый баг, найденный на пути: блок инструментов проигнорировал модель Поддерживает флаг ToolUse, поэтому модель явно помечена как не поддерживающие инструменты. Все еще посылал их. 31 из 140 моделей помечены ложными; ai mcp server configs Пустое скопление, так что сегодняшний радиус взрыва равен нулю. Сюита 124 теста, зеленый.
· MediaService
Принять агент-авторский охват в открытую нить заемщика
Диспетчер связи AIService звонит. Без него весь исходящий путь, оканчивающийся в записанном 404 - ворота авторизованы касанием, Послание было составлено, и его негде было поставить. Владение остается разделенным преднамеренно: AIService решает, куда может пойти прикосновение. и пишет текст, этот сервис размещает его. Написание этих строк от AIService будет разветвлять право собственности на транскрипт на сервис, который не владеет ни чатом ни столов, ни розетки. Две вещи он не сделает. Это никогда не создает разговор - охват может возобновиться нить, которую посетитель уже открыл, никогда не вызовет окно чата у кого-то, кто Нет. И он никогда не пересекает орги: ведущее руководство, разрешающее билет другой организации помещает агента одной организации в разговор другой организации, таким образом, Проверяли билет, а не доверяли звонящему. Сообщение приписывается члену сессии, в точности как сообщение посетителя. Это - не назначенному человеческому офицеру. Оформление сообщения, составленного ИИ, как Хотя поименованное, лицензированное лицо написало, что для этого существует правило раскрытия ИИ. предотвратить. гарантирует, что подписка предшествует публикации NATS, поскольку потребитель использует Доставить полицию. Новое: публикация сначала сохранит сообщение, но отбросит его Каждый подключенный клиент. Возвращает как id, так и messageId, поэтому журнал аудита аутрич ссылается на сообщение, а не на поток. 404, когда не существует открытой нити, Таким образом, абонент записывает чистый сбой, а не предполагает доставку.
· AIService
Выходящие триггеры, планировщик и отправка веб-чата
Делает аутрич-спин фактически огнем. Ворота, контактное состояние, согласие и Аудит уже существовал; ничто не вызывало прикосновения к оценке. - NATS включен для AIService через собственный k8s/configmap.yaml (каждый сервис Java) имеет собственный k8s dir; KlusterServices имеет только кластерную инфраструктуру. JetStream NatsConfig намеренно оставляют в стороне: NatsConfig утверждает свой собственный коэффициент репликации централизованно предоставляемые потоки при запуске, и AIService подписывается только на ядро NATS и ничего не публикует, поэтому позволяя ему ничего не получить и рискнуть секундой Сервис, подтверждающий количество реплик. - AgentOutboundConsumer подписывается на security.leads.rt.> и потребляет ТОЛЬКО LEAD CREATED/LEAD UPDATED Издатель также издает блокировки и статистические события - обратиться к человеку, потому что коллега взял блокировку редактирования на их записи Это не оправдано. Ids приходят как строки от издателя, поэтому они парсируются. как текст, а не как длинный (). - AgentOutboundScheduler оценивает триггеры расписания в четырех границах: производные от агентов, которые на самом деле имеют охват (урезанный), тонкий скольжение Время срезает, поэтому стоимость отслеживает ставку нового лида, а не общие лиды, ряд на галочку колпачок и демпфер переоценки, поэтому свинцовый переход в тихие часы перепроверяется Один раз, а не каждый клещ за день. - Композиция семян текстовая Полная версия составлена оперативно, Никогда не набросок, плюс намерение триггера. записи о неисправности композиции недействительны; Нет никакого скрытого сообщения. Отправка WEB CHAT продолжает существующий поток. Аутрич может возобновить разговор, который открыл посетитель; он не может вызвать окно чата у кого-то Который никогда не открывал. - SMS/EMAIL/SOCIAL DM маршрут к записанному несоответствующему названию сантехника, поэтому организация, указывающая на триггер в SMS, видит, почему в информационном журнале Вместо того, чтобы ничего не происходило. 23 новых теста; люкс 68 и зеленый.
· kamo-internal
Требуемый текстовый редактор; отключить общие настройки AI; исправить переключение модели
Добавляет редактор для требуемого текста открытия/закрытия в масштабе всей организации - компилятор и Колонны существовали, но ничто не могло их установить, поэтому возможности были мертвы. Копия Ясно, что агенты не могут удалить его и что экономия относится к каждому. Агент немедленно, и тост сообщает, сколько агентов было переиздано. Это больше, чем просто «спасенные», потому что живые агенты просто изменили то, что они говорят. Два ранее существовавших жука, найденных по пути: Выключатель «Auto-select best available model» никогда не работал. фронтенд читать data.autoSelectModel и отправлять autoSelectModel, но бэкэнд возвращается и ожидает AutoModelEnabled — так переключатель всегда оказывался верным и его значение было Отбрасывается на каждый сейф. Исправленная интерфейсная сторона; никаких изменений сервера не требуется. - AiGeneralSettings.tsx был мертвым кодом, никогда не импортировался, в то время как дословно inline Дубликат жил в нижней части SecurityModelsTab.tsx. Вместо того чтобы внедрять требуется текст дважды, дубликат удаляется и SecurityModelsTab импортирует Общий компонент. Также заменяется чаевые помощи агентов по продажам, которые по-прежнему говорили пользователям, что функция была Скоро приедет.
· AIService
Настаивайте на требуемом тексте в масштабах всей организации и применяйте его немедленно
AiOrgSettings приобрела ForcedFooter и SalesAgentCompiler Складывает их в каждый агент, но контроллер настроек не читает и не пишет. Они — так что способность была мертва: спаситель, казалось, преуспел и вернулся. пустой на перезарядке. GET теперь возвращает оба поля (в том числе по умолчанию без установки) и PUT. упорядочивает их, нормализуя пустое до нуля, поэтому очистка поля фактически очищает его Вместо того, чтобы оставлять пустую нить, чтобы быть сложенной в виде бродячего разделителя. Требуемый текст вступает в силу немедленно, путем перекомпиляции и переиздания. каждый опубликованный агент в организации. Позволяет применить его к следующей публикации каждого агента Он был дешевле и является ловушкой: администратор, который всегда говорит, что вы автоматизированы. Помощник поверит, что это вживую, а агенту никто не переиздаст Он будет продолжать говорить без него бесконечно. Требуемая линия, которая молча Не применять хуже, чем не предлагать. Каждый пострадавший агент получает новый спасенный Копия, помеченная почему, и отчеты о том, сколько было опубликовано так Пользователь может сказать, что на самом деле произошло, а не просто «Спасено».
· kamo-internal
Полностраничная студия AI Sales Agent, заменяющая модальности
Редактор агента был Диалог MUI ~ 800px, вся поверхность которого была 10-рядной. Textarea, на одной вкладке ИИ, которая вообще использовала диалог. Теперь это посвященный Маршрут, и модель редактирования за ним структурирована, а не одна капля. - /settings/ai/sales-agents/new - колонка 720px, а не студия. Шаблонные карты (карта - это отрасль, поэтому ни одна отрасль не выпадает), затем два поля: имя и название. Одно предложение о бизнесе. Рабочий агент через минуту. - /settings/ai/sales-agents/[id] - полная ширина, ОДИН прокруточный документ с липким заголовки разделов, контент ограничен 880px, поэтому однолинейные входы не растягиваются на дисплее 4K. No 240px Nav Rail: девять секций - это работа свитка-шпиона, а не скролл-шпиона. Навигация. Try-it-out - это переключатель заголовка, а не постоянно зарезервированная колонка. Ан Пустая панель чата рядом с новым агентом - пустое пространство, которое читается как Неспособность пользователя его заполнить. Готовность — это упорядоченный, неприемлемый список того, что может помочь — никогда не доля. Часть говорит кому-то, что они терпят неудачу; список говорит им, что делать дальше. - Запертые правила делают запертым и несъемным, и берут секцию вручную Предупреждает, когда он содержит один (компилятор теперь повторно добавляет их независимо). Header ясно заявляет, что редактирование влияет только на новые разговоры, потому что моментально сфотографирован при создании сеанса, и пользователи в противном случае заключили бы Их изменение не сработало. OutboundEnabled отправляется только при фактическом изменении: сервер 403s Если это поле присутствует без MANAGE SALES AGENT OUTREACH, В любом случае, это сломает студию для тех, кому не хватает этого права. Также удаляет дубликат сырого ящика «AI system prompt» из канала чата. Редактор. Это было второе, более слабое место, чтобы написать то же самое. Версии, никаких заблокированных правил и никакой истории — какой бы редактор вы ни сделали Открыто решали, что слышали клиенты. Существующие подсказки по-прежнему разрешаются; каналы Используя один теперь получить уведомление, указывающее на агентов. Копия не несет никакого жаргона ИИ по дизайну, и жестко закодированный английский отраслевой массив Заменяются переводными этикетками.
· AIService
Компилятор агентов продаж, версия, аутрич-шлюз; исправление воспроизведения инструмента
Конфигурация структурированного агента компилирует в систему подсказку, замораживается на опубликованную Версия, и получает ворота агент должен пройти перед началом контакта. компилятор AgentConfig + SalesAgentCompiler: чистый, детерминированный компилятор Настройка в секционную подсказку. Пустые секции опущены, поэтому три правила Агент не компилирует документ, который в основном состоит из заголовков. Переопределение уровня раздела («напишите эту часть самостоятельно»), а не уровень документа необработанный переключатель: автор получает полную выразительную силу на одном разделе, в то время как каждый Другой раздел продолжает компилировать, сохраняет свои заблокированные правила и продолжает версификацию. - Тот же механизм делает миграцию байт-идентичной - проза агента перед конфигурацией Сохраняется в виде оверрайда всего документа и компилируется обратно без изменений, поэтому миграция Этот день не подходит для агентов, которые уже разговаривают с клиентами. Доказано тестом. - PhraseBank намеренно имеет два измерения, с хорошей прозой на TEMPLATE. Глобальный банк, работающий с каждой комбинацией чисел, нуждается в ~90 рукописных абзацах. вырождается в сложенные клаузулы и делает каждую организацию открытой с тем же самым предложение, которое разрушает единственное, что покупает организация. - Шесть шаблонов (первый на передней панели и входящий лид: они горизонтальны и покрыты) любой организации, вертикаль которой не указана. Каждое судно запирает правила соответствия Модель никогда не может быть удалена, проверена тестом. Lifecycle + авторизация - Опубликовать морозы {config, compiledPrompt, хеш, модель, провайдер}; откат Переназначает и восстанавливает черновик, чтобы студия никогда не могла показать что-то одно. Агент обслуживает другого. Контролер впервые получает права. Ранее любой аутентифицированный Член любой организации может переписать то, что эта организация говорит своим клиентам. Вернуться назад для MANAGE AI SETTINGS, чтобы ни один существующий администратор не был заблокирован при развертывании. Общественный чат предпочитает замороженную версию в прямом эфире ОбучениеКонтекст, и штампы продажАгентId/версияId на сессии - агент Там уже было решено и было отброшено. - Составление с помощью ИИ: одно предложение в рецензируемой конфигурации. Закрытые правила переносится в коде, никогда не отображается в модели, поэтому линия соответствия никогда не может быть удалены инструкциями-последователями. Outreach Gate (все 14 проверенных правил) - Opt-out бьет все остальные чеки и сообщается как причина, потому что Основание, записанное против отказа, само по себе является доказательством. SMS без записи согласия отказано: в соответствии с TCPA бремя доказывания лежит на Отправитель, поэтому отсутствие записи - это отсутствие согласия. Тихие часы оцениваются там, где находится контакт, а не там, где находится бизнес. Неудавшиеся посылки не тратят бюджет на прикосновения; подавленные посылки не тратят ни Один блок будет каскадом блокировать все после него. Ворота не закрываются - аутрич-ворот, который открывает ошибки, отправляет сообщения никому авторизованный, единственный провал, который нельзя отменить. Исправления, найденные по пути - Воспроизведение истории с инструментальным вызовом было нарушено: ряд TOOL не сохранился, а Помощник tool use Turn никогда не сохранялся, поэтому Turn 2 отправлял нулевой контент. блоки. Включающие инструменты не справились бы с каждым многоповоротным разговором. - textComplete не имел тайм-аута (блокировка .get(), прикрепление нити на медленном Провайдер) и не записывал использование, делая каждый звонок помощника невидимым для выставления счетов. - Раздел системы в контекстной установке был незамкнутым, поэтому глагольный агент плюс RAG Блок может вытеснить всю историю. CostEstimate теперь заполняется только на пути синхронизации, от реальных токенов провайдера. Потоковая передача остается нулевой: она производит токены как content.length()/4 и умножает Это означает, что реальная цена дает номер в форме счета, который является неправильным.
· kamo-shared-library
Структурированная конфигурация агента продаж, позвоночник версии и состояние охвата
Заменяет одиночный тренинг-контекстный пузырь структурированным, редактируемым агентом модель и добавляет контактный позвоночник, необходимый агенту, прежде чем он может инициировать Контакт, а не только ответ. - SalesAgent получает configJson (jsonb-as-String, соответствующий WebChatIntegration) .designConfig), hasConfig, publishedVersionId, audience and outboundEnabled. обучение Контекст сохраняется в виде компилируемого продукта, поэтому каждый существующий потребитель Продолжает работать нетронутым. HasConfig является явным, а не выведенным из ОбучениеКонтекст является пустым, потому что как только он компилируется, выход никогда не Проверка на пробелы и пробелы будет недостижимой. - SalesAgentVersion замораживает {configJson, compiledPrompt, compiledHash, modelId, Поставщик Id на публикацию. Модель прикреплена рядом с подсказкой: заморозка инструкции, в то время как модель автомаршрутов сделает артефакт полуправдой. - AiChatSession/AiUsageRecord набирает оборотыAgentId + salesAgentVersionId. Ранее «Какой агент справился с этим?» можно было ответить, только пройдя по мутабельному, Отменяемый, не FK WebChatIntegration.salesAgentId hop, поэтому переназначение канала Он молча переписал всю историю. - AiOrgSettings получает принудительное воспроизведение / принудительное питание в качестве новых нулевых колонок чем повторное использование defaultSystemPrompt, так что конкатенация является no-op до администратора Заполняет один. Повторное использование существующего поля изменило бы поведение каждого человека. У него уже был один населенный пункт в день развертывания. - AgentContactState + AgentOutboundTouch: поперечное подавление контактов, явные колонки отказа по каналам и согласие с отметкой времени. Opt-out хранится как реальные колонки, а не JSON, потому что "доказать, что это число было подавлено на Эта дата не должна зависеть от извлечения пути JSON. Записи журнала касаний Отзывы, а также отправки - журнал отправки доказывает, что вы сделали, журнал Решения доказывают то, чего вы не сделаете. Права 168-173 разделены ************************* MANAGE AI SETTINGS(53), которая ранее ничего из этого не закрывала.
· kamo-internal
AI Sales Agents Tab + назначение агента по каналу
Построение /settings/ai?tab=sales-agents (было загвоздкой): организации создают агентов для своих Отрасль продаж, либо из встроенного шаблона, либо путем написания учебного контекста Сами, затем отредактируйте/включите/удалите их. Чат-каналы (/настройки/функции/чат) теперь могут выбирать, какой агент управляет этим. ИИ канала, независимо — агент переопределяет необработанную систему.
· SecurityService
Enrich borrower chat routing + захват состояния предметной собственности
чат-маршрутизация теперь возвращает NMLS назначенного офицера, название, фотографию, телефон, электронную почту и имеют ли они действительную лицензию для государства предмета собственности, а также Укажите сами и нужно ли нам еще об этом просить. Повторное использование карты SAFE-Act Решенные данные, чтобы чат никогда не мог показать сфабрикованную личность. Добавляет POST/портал/субъект-государство: когда лид еще не имеет состояния собственности, Заемщик может установить его из чата; он течет через patchEstimate (и его назначение). Повторный вход в бассейн), как и любой другой заявленный факт, который разблокирует лицензионную линию.
· MediaService
Назначение агента по продажам на канал + отчет о доступности LO
- WebChatIntegration потоков CRUD salesAgentId (не очистит задание) - lo-presence теперь возвращает статус доступности участника вместе с онлайн, поэтому Виджет может показывать реальный статус вместо голой точки. Зонды Cross-org все еще Возврат только (online:false).
· AIService
Агент по продажам CRUD, шаблон ипотеки и агент-управляемый чат
- AiSalesAgentController (/api/ai/sales-agents): org-scoped CRUD + GET/templates - SalesAgentTemplateRegistry: встроенные стартовые шаблоны, начиная с Помощник ипотечного заемщика (соответствует: нет обязательных котировок, нет) Обещания одобрения, отсрочки лицензированному кредитному офицеру, запросы на предметное государство - PublicAiChatService: назначенное SalesAgent обучениеКонтекст становится топовым уровень быстрого водопада (агент -> быстрое интегрирование -> орг -> общее)
· kamo-shared-library
Предприятие SalesAgent + назначение агента по каналу
Орг-конфигурируемые агенты по продажам ИИ: названный агент для индустрии продаж, запрограммированный с обучающим контекстом авторы организации (от шаблона или от руки), присваиваемые Каналы для управления ИИ этого канала. Камо обслуживает все отрасли — ипотека Только один шаблон. - Предприятие SalesAgent (dao/beans/ai) + SalesAgentRepository + SalesAgentDTO - WebChatIntegration.salesAgentId (отменяемая мягкая ссылка) + поле DTO
· SecurityService
Автоматическое предоставление платформы MLOS Chat + обслуживание ключа сайта хостом
- ManagedChatIntegrationService: лениво чеканить платформу организации SPECIFIC AGENT WebChat Интеграция при первом доступе. KamoMLOS является первой стороной: организация, разрешенная хостом, Открытый ключ сайта принадлежит платформе и никогда не управляется администраторами. PortalChatConfigController GET **************************** Разрешить орг хостом, Получите или создайте управляемую интеграцию, верните открытый ключ сайта для <kamo-chat>. (Конечная точка mint + chatRoutingForGuid + assignLoanOfficer chat-routing) событие приземлилось в 67974fd с помощью переплетенного толчка; это добавляет конфигурационную / провизионную сторону и требует совместного использования 6b161b5

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