Перейти к содержимому
KAMOUniverse

Журнал изменений

Что нового.

Каждое усовершенствование платформы, как только она появится.

  1. · kamo-internal

    История производственного класса + вкладки голосовой почты с инструментом медиаплеера

    Закладка истории (SoftphoneHistoryTab.tsx): Бесконечная прокрутка через IntersectionObserver внутри контейнера прокрутки панели - Фильтровые чипы: Все / Входящие / Исходящие / Пропущенные / Записанные - Запись иконки в строке действий, когда сторона изображения имеет запись строки - меню переполнения строки (Добавить в контакты) - Нажмите, чтобы позвонить обратно через существующий dialpad Закладка голосовой почты (SoftphoneVoicemailTab.tsx): Бесконечная прокрутка, фильтрующие чипы (All / Unread / Has audio) Per-row Play / Call Back / Больше действий - Автомаркировка в игре Двухвариантный диалог удаления: Archive (soft-hide, все пользователи) vs. Permanently delete (справа от VOIP VOICEMAIL PERMANENT DELETE; возвращается в состояние инвалидности для пользователей без него) - Кнопка "отметить все" с нулевой ценой Инструмент Mediaplayer popup **************************** - Аудио: синтезированный скруббер в стиле формы волны, click-to-seek, Replay10/Forward10, частота воспроизведения (0,5x-2x), цикл, громкость + немое, устройство вывода, выполненное из параметров AV Видео: содержит видопорт, PiP, полноэкранный, тот же скруббер + элементы управления - Многодорожечный селектор для записи вызовов (мастер + каждый канал) - Скачать - Два режима источника: запись voipApi (звонок/VM) или актив визуализации по imgId Зарегистрировано в tools/registry/registrations.ts Hook + сантехника: - UseSoftphone раскрывает историю + голосовые сообщения (loadMore, hasMore, isLoading) и действия архивирования / постоянного удаления - voipApi получает lookupRecording, getRecordingMetadata, archiveVoicemail, paginated getVoicemails - /api/voip proxy передает аудио/видео/октет-поток тела с **************** неповрежденным (без буферизации), поэтому медиа-элементы скраб - Новые **************** пересылки на новую конечную точку потоковой передачи DocsService с Range - VOIP VOICEMAIL PERMANENT DELETE добавлен в интерфейсный реестр RoleRightType, поэтому проверьте правильные ворота

  2. · InitializerService

    Миграционный бегун для колонок Recording provider-lookup + колонки архивов VM

    Добавляет RECORDINGS.provider instance id (UUID) и provider external id (VARCHAR(64)) плюс составной индекс idx recordings provider lookup, используемый основной конечной точкой поиска вкладки «История софтфона». Также добавляется PHONE VOICEMAIL.is archived + date archived для нового потока мягкого архива. Уничтожает любые ранее существовавшие строки RECORDING / RECORDING EXTS в одном и том же проходе — естественно, идемпотентный (предикат соответствует только строкам, чей провайдер external id по-прежнему NULL, что не произойдет, когда ConversionService будет на новом пути кода). Заказ 35 — после **************** (30) так что таблицы записи существуют до приземления АЛТЕР.

  3. · ConversionService

    Persist providerInstanceId + providerExternalId на записи при глотании

    Потоки X-Phone-Server-Id и X-Asterisk-Unique-Id (уже в UnprocessedRecording) на новых полях RecordingMetadata, поэтому строки вызова / голосовой почты в системе визуализации несут ключ соединения обратно в строку поставщика источника. Для голосовых сообщений помощник отправляет исходное имя файла (например, msg0000); мы удаляем префикс msg и ведущие нули, чтобы сохраненный ключ соответствовал тому, что REST API голосовой почты FreePBX возвращает в качестве идентификатора сообщения.

  4. · DocsService

    Добавить ******************* с поддержкой HTTP Range

    Общие конечные точки потоковой передачи для аудио/видеоизображения, используемые внутренним инструментом MediaPlayer. Повторное использование авторизации ImageService (так же, как /download / ...), но потоков с Accept-Ranges + Content-Range, чтобы медиа-элементы могли очищаться без загрузки полного файла.

  5. · VOIPService

    Запись воспроизведения, архив голосовой почты, выделенная голосовая почта, обогащение истории

    - Новая запись Контроллер с объемным поиском, потоковое аудио для треков master + per-channel и метаданные для окна инструмента медиаплеера CallController.getCallHistory / getVoicemails обогащает каждую строку с помощью записи изображений Id через новый RecordingLookupService - однократная поездка туда и обратно, без N + 1 - PhoneProvider.getVoicemails теперь принимает (memberId, страница, размер); FreePBX пагинирует клиентскую сторону от одного вывода, RingCentral использует нативную подкачку, KamoPBX продолжает бросать NotSupported - Конечная точка архива голосовой почты (скрыто через PhoneVoicemail.isArchived) и постоянное удаление, защищенное VOIP VOICEMAIL PERMANENT DELETE - GodActive bypass требует как GD-подхода, так и активного переключения - PhoneProvider получает GetInstanceId(), поэтому контроллеры могут решить ключ подключения для записи поиска без второго заводского вызова

  6. · kamo-shared-library

    Ключи поиска провайдера на Записи, архив голосовой почты, потоковая передача диапазона MinIO

    - Запись: добавить провайдераInstanceId + провайдерExternalId для присоединения провайдера call-history / voicemail строки обратно к средствам визуализации - PhoneVoicemail: add isArchived + dateArchived for soft-hide from softphone listings - RoleRightType: добавить VOIP VOICEMAIL PERMANENT DELETE (разрушительные ворота удаляются; архив остается доступным для всех) - MinIOStorageService: добавьте openRange() + RangeStream, чтобы конечные точки аудио/видео могли выполнять HTTP Range - RecordingImagingService: поток провайдера id + внешний id через RecordingMetadata в строку Recording на ingest

  7. · kamo-internal

    Добавить вкладку «История» — выделенный график аудита с поиском и фильтрами

    - LeadHistoryPanel: липкая панель инструментов фильтра с дебюнсированным поиском, фильтры ****************, таблица MUI с пагинацией, цветные чипы событий, разрешение имени участника для полей назначения / счета - leadApi: getLeadHistory() и getLeadHistoryFilters() с полной поддержкой запроса-парама - LeadHistoryEntry, LeadHistoryActor, LeadHistoryFieldMeta, LeadHistoryPageResponse, LeadHistoryFiltersResponse types - Next.js прокси-маршруты для **************** и /фильтры LeadViewClient подключается для рендеринга LeadHistoryPanel, когда активна вкладка History

  8. · SecurityService

    Добавить GET /{id}/history и /{id}/history/filters конечные точки

    Назначенная, фильтруемая, доступная для поиска конечная точка с лид-историей с загрузкой пакетного актера (без N + 1). Конечная точка фильтра возвращает различные используемые поля, все поля реестра, различные субъекты и все типы событий. Все мутирующие конечные точки теперь передают вызывающего участника в качестве актера в LeadHistoryService для атрибуции.

  9. · kamo-shared-library

    Добавить журнал аудита истории лидов - сущность, реестр, сервис, DTO, крючки LeadService

    - LeadHistory entity (UUID PK, простые длинные FK - никаких ограничений FK для удаления / преобразования свинца) - LeadHistoryEventType enum с читабельными этикетками - LeadHistoryFieldRegistry: единственный источник истины для ~55 отслеживаемых свинцовых полей; добавление поля - одна строка - Запись LeadFieldDescriptor (ключ, этикетка, категория, экстрактор) - LeadHistoryService: snapshot/diff pipeline, ************* paginated+filtered findHistory, distinctFields/Actors for filter dropdowns - LeadHistoryDTO с вложенным ActorDTO; все Длинные идентификаторы, сериализованные как Струна для точной безопасности CockroachDB JS - LeadService: история крючков на создание, обновление, удаление, назначение Lead, назначение LeadAccount, unassignLeadAccount

  10. · SecurityService

    Актер Wire LeadHistoryService следит за ведущим контролером

  11. · kamo-internal

    Добавить интерфейс назначения свинцового счета, валютную систему, страницы назначения / нового счета, настройки валютного поля

  12. · SecurityService

    Добавить конечные точки назначения свинцовой учетной записи, обновить AccountController для CurrencyType

  13. · kamo-shared-library

    Добавьте CurrencyType enum, обновите CountryType с основной валютой, добавьте валюту к Счету / Организации, добавьте назначение свинцового счета в LeadService

  14. · kamo-internal

    Динамическая этикетка типа участника в заголовке страницы моей учетной записи

    Заголовок теперь гласит «Мой аккаунт участника команды», используя сконфигурированный этикетки поведения, автоматически переключающиеся после загрузки типа участника.

  15. · kamo-internal

    Переместить кнопку Create Document в панель инструментов DocManager

    Кнопка была доступна только на /doc/manager. Перенес всю логику (состояние, обработчик, DOC TYPES, меню) в DocManager Он появляется на каждом встроенном экземпляре. Упрощенная страница.tsx DocManager без каких-либо действий.

  16. · kamo-internal

    Переместите почтовый адрес в строку 3 столбца с главной информацией и основным контактом

  17. · kamo-internal

    Международная поддержка — CountrySelect, LanguageSelect, Subdivision Поле во всех формах

    - Добавить многоразовые CountrySelect (207 стран, значки флага), LanguageSelect (26 языков, значки флага), SubdivisionField (выпадение штата США с флагами; другие страны показывают помеченное текстовое поле) - Добавить константы стран (countries.ts, languages.ts, usStates.ts, timezones.ts) - Закладка «Lead view Details: per-card in-place editing» с полями **************** - Формы создания лидов: полный список стран/подразделений/временных зон, заменяющий ограниченные встроенные списки Настройки LabelManager: язык по умолчанию в разделе 8, CountrySelect+Subdivision Поле в обращении - ContactInfoStep (мастер сетевого создания): CountrySelect+SubdivisionField заменяет ограниченный выбор MyAccountTab: CountrySelect+SubdivisionField заменяет поля с простым текстом - types/leads.ts: add country and subdivision fields

  18. · kamo-shared-library

    Добавить международную поддержку — Ведущая страна/подразделение/временная зона, язык организации, CountryType isProvince

    CountryType: add PROVINCE NAMES set, isProvince(), getSubdivisionLabel() - Организация: добавить язык (язык) поле - Свинец: добавьте поля страны (CountryType), подразделения (String), часового пояса (TimezoneType) **************** Добавить страны, подразделения, часовые пояса - LeadService.createLead: обработка новых полей; язык по умолчанию + страна из настроек организации - LeadService.updateЛид: обработка новых полей ************* Добавить язык touchedKey

  19. · kamo-internal

    ASSIGN LEADS справа, фильтр агента неназначенный вариант, очистка колонки сетки

    - Врата «Неназначенные лидеры» фильтр фильтра за ASSIGN LEADS «Все лидеры» исключают неназначенных лидеров для членов без права Удалить колонки Street, Product, Source; удалить выпадающие фильтры Product/Source - Удалить колонку компании; в колонке контактов указано название компании, возвращается имя контакта - Колонка поставщиков показывает инструментарий с деталью продукта - источник - Столбцы даты опускают префикс будни, уменьшаются с 170px до 140px DateTimeDisplay: добавить showWeekday prop (по умолчанию ложный)

  20. · kamo-shared-library

    Добавить ASSIGN LEADS (ID 137) в разделе CRM

  21. · kamo-internal

    Добавить назначение Отправляйтесь в раздел «Рынок и назначение» /leads / new

    - Привлекает активных членов команды из **************** на гору - Члены групп по отделам с алфавитно сортированными отделами и членами - Форматы с названиями "Последний, Первый"; первый вариант - "Авто Ассигнован / Не назначен" - Поля разделов заказов: Ведущий рынок, Назначение, Лучшее время для контакта, Продавец, Продукт, Тип перспективы (все lg = 4) Исправления лидовApi.ts для отправки назначенного TeamMemberId вместо мертвого назначенного поля пользователя - Добавляет назначенный TeamMemberId к типу Lead

  22. · kamo-asterisk-support

    Emit записал расширение At + per-file в манифесте загрузки

    - Наблюдатель: каждая выпущенная Запись несет Записанную Ат, полученную из Сегмент EPOCH нашего управляемого **************** Имя файла, возвращаясь к файлу mtime для голосовой почты / устаревших файлов. - Grouper: CallBatch теперь отслеживает расширения файлов (один на файл, параллельно) Запись (англ. RecordedAt) и запись (англ. Earlyly leg start). Сортировка ключа для ног записывается с FinalizedAt в качестве тай-брейка, поэтому Нога мастера детерминирована. Загрузчик: манифест теперь включает в себя запись верхнего уровня At и per-file расширение. ConversionService потребляет и то, и другое для записи (date recorded, длина от ffprobe) и строки RecordingExt.

  23. · ConversionService

    Передача записи метаданных в визуализацию — длина ffprobe + анализ манифеста

    ********************** Скачать ffprobe -show entries на мастере Opus/WebM, возвращается мс. 0 = неизвестно (не смертельно). **************** сейчас: * запускает зондDurationMs на мастере для получения длины записи; * анализирует манифест (отправленный с помощью kamo-asterisk-support) и данные расширения / канала для каждого файла, возвращаясь к строке постановки анализ даты и названия канала для более старых полезных нагрузок; * проходит **************** Дата Запись, longMs, участвующие расширения) в RecordingImagingService Можно писать новые строки Recording + RecordingExt.

  24. · kamo-shared-library

    Запись + ЗаписьСубъекты, RecordingImagingService пишет их

    - Новая регистрирующая организация (UUID id, IMG ID, IS MASTER, IS VM, EXTENSION, MEMBER ID, Длина, DATE RECORDED, DATE CREATED [DB-по умолчанию через @CreationTimestamp]. Один ряд на завершенную голосовую почту или запись вызова, загруженную на визуализацию. - Новая организация RecordingExt (UUID id, RECORDING ID, EXTENSION, MEMBER ID, IS MASTER. Один ряд на канал, который участвовал в записи; Основная нога помечена IS MASTER=true, каждая другая нога ложная. **************** теперь записывает Metadata пакет (phoneServerInstanceId, dateRecorded, longMs, участвующие расширения) и продолжает запись + запись в строках та же транзакция, что и Img / ImgDat. MemberId решается за одну ногу через **************************** VOIP экземпляр (нулевой, когда не назначен).

  25. · kamo-internal

    Обновление карт администрирования платформы в соответствии с унифицированной структурой вкладок

    Заменить две устаревшие карты (отдельная страница организации + конфигурация) Пять карт, соответствующих фактическим вкладкам: General, Organizations, VOIP & SMS, System User, and Advanced — каждая ссылка напрямую на правильный ?tab= param.

  26. · kamo-internal

    Раскладка полнопроводной сетки и триггер синхронизации движения от Advanced Tab

    - Перепроектировать вкладку VOIP и SMS для использования полной ширины области контента: охват статистики трубопроводов Верхний ряд, обработка записей и глобальный график синхронизации сидят бок о бок. в двухколонной сетке в точке разрыва lg+ - Трубопроводные карты показывают живые счета с галочками нулевого состояния и ошибкой цветовое кодирование; автообновление каждые 30 лет, отмеченное в подзаголовке - Карта Global Sync объединяет настройки расписания, строку временных меток последней синхронизации, и ручной триггер в одну панель; включенный / приостановленный чип в заголовке - Переместить «Force global VOIP sync» из вкладки Advanced (дубликат триггера) уже присутствует на VOIP и SMS; Расширенная вкладка теперь показывает текст заполнителя

  27. · kamo-internal

    Объединить организации на странице конфигурации с унифицированными вкладками nav

    - Добавить организации в качестве вкладки в **************** (Общие организации · VOIP и SMS · Пользователь системы · Расширенный заказ) - Удалить ************* автономную страницу - Обновить Nav для администрирования платформы в SettingsStatusWindow, чтобы перечислить все 5 вкладок в качестве подпунктов, указывающих на конфигурацию?tab=... - Исправьте макет на всех вкладках: согласованная p: {xs:2, sm:3} накладка, чтобы содержимое больше не попадало в стены карт Улучшить карты GeneralTab с фоном значков и более жестким ритмом типографики - Update SettingsView title/subtitle для унифицированной страницы

  28. · kamo-marketing

    Add Go logo to BUILT WITH banner

  29. · kamo-internal

    Surface PHONE SERVER ID на вкладке обзора телефонных станций

    Операторы, настраивающие поддержку kamo-asterisk на хосте FreePBX, должны вставлять Соответствие VoipProviderInstance UUID в файл конфигурации помощника PHONE SERVER ID. До сих пор им приходилось копаться в строке URL или в База данных. Новый раздел «Идентификатор сервера телефона» на /settings/features/phone/{id} Обзор показывает UUID в монопространственном поле только для чтения одним щелчком мыши Кнопка копирования (помощник CopyableIdField, также многоразовый для будущих аналогичных программ) идентификаторы).

  30. · kamo-internal

    Расширение VOIP в Interaction Center открывает софтфон с номером

Ваша вселенная ждет.

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

Бесплатно навсегда — не требуется кредитная карта