Release Notes
Функциональные изменения#
license-serverпроверяет непрерывное покрытие всего основного срока лицензии V3 лицензионными тарифами. Лицензии без тарифов или с разрывами покрытия отклоняются с причинойtariff_coverage_incomplete; портал показывает пояснение на русском языке. Проверка применяется также к ранее сохраненным лицензиям при их чтении.Реализован multitenant / cloud режим работы, включая управление тенантами и tenant-scoped доступом:
- Расширена ролевая модель управления доступом.
- Реализовано использование управляемых через UI API-ключей с поддержкой ролевой модели.
- Добавлена поддержка интеграции с IDM для управления пользователями в tenant-контексте.
- Добавлен суперпользователь с полными правами и возможностью восстановления через специальный сценарий.
Полностью переработан сервис биллинга:
- добавлена поддержка нескольких тарифов в одной лицензии, включая сроки действия и приоритеты их применения;
- добавлены именованные назначения тарифов, позволяющие применять разные тарифы к отдельным точкам маршрутизации — сегментам SIP-маршрута;
- поддерживаются тарификация по попыткам вызова или анализируемым вызовам, календарные месячные и квартальные отчетные периоды, абонентская плата и включенный объем;
- поддерживаются ступенчатая тарификация и скидка за объем с пороговыми ценами;
- тарифы поддерживают ставку НДС; в отчетах отдельно отображаются сумма без НДС, сумма НДС и итоговая сумма с НДС;
- расчет выполняется для каждого вызова с фиксацией фактически примененных назначения, тарифа, единиц тарификации, цен и стоимости, поэтому последующие изменения тарифов не изменяют уже рассчитанные вызовы;
- скорректированы правила расчета включенного объема, неполных периодов, скидок, НДС и округления денежных сумм;
- добавлены новые отчеты о потреблении и детализация по дням, тарифам, назначениям, вызовам, попыткам, детекциям и оплачиваемым единицам;
- в отчетности отдельно отображаются предварительная расчетная сумма по текущему открытому периоду и фактическая сумма к оплате по закрытым тарифным периодам;
- в интерфейсе отчетов снято ограничение просмотра последними двенадцатью месяцами: для выбора доступны все расчетные периоды, предоставленные
billing-server; - отчеты старого биллинга сохранены в отдельном архивном разделе без пересчета исторических данных по новым тарифам.
Реализована полная интеграция со SmartContact.
В профилях детекции добавлена возможность включать и отключать проигрывание роликов для пробития тишины.
Добавлена возможность сбора и анализа SIP trace, включая backend хранения и web UI для support-задач.
Полностью переработан раздел
Статистика:- единым источником данных стал CDR, отдельное хранилище
statsбольше не используется; - CDR, результаты детекции и разметка объединены в одном отчете;
- данные сохраняются в UTC (GMT), а отображаются в часовом поясе браузера;
- существенно расширены критерии поиска;
- добавлен отдельный фильтр расхождений между разметкой и результатом детекции;
- добавлена выгрузка отчета в CSV.
- единым источником данных стал CDR, отдельное хранилище
Полностью переработана загрузка разметки:
- добавлена загрузка CSV из портала, включая шаблон и встроенную справку;
- незагруженные записи возвращаются с указанием причины;
- поддерживается поиск по SIP Call-ID, Custom Call ID, а также по номеру клиента и времени вызова;
- добавлено опциональное поле
Источникдля контроля качества источников разметки; - в поставку добавлен контейнер автоматической загрузки разметки из сторонней СУБД:
- в одной установке SmartCPD можно развернуть несколько независимых экземпляров контейнера для разных источников данных и способов сопоставления;
- контейнер можно развернуть отдельно от стека SmartCPD, в том числе в инфраструктуре заказчика, для удалённой загрузки разметки в облачную или находящуюся в другом сетевом контуре установку;
- добавлен новый Markup API с поддержкой CSV и REST, заменяющий API отдельного сервиса
markup-api.
Добавлено хранение детальной истории детекции:
- каждый шаг детекции сохраняется с результатом, порядком и техническими деталями;
- расширенный отчет показывает все шаги детекции для каждого вызова;
- для каждого шага могут сохраняться полная запись и отдельная запись стороны клиента;
- записи доступны для прослушивания и скачивания из портала;
- сроки хранения управляются настройками: один день для полных записей, семь дней для записей клиента и 30 дней для истории детекций по умолчанию;
- автоматическая очистка записей ограничивает использование дискового пространства.
Расширены бизнес-отчеты Grafana:
- добавлен отчет для сравнения результатов A/B-тестирования;
- отчет по ключевым показателям дополнен историческими данными и результатами разметки;
- добавлен отчет для проверки работы анализатора аудиослепков;
Компоненты SIP:
- добавлена возможность интеграции с
rtpengine. Интеграция не входит в стандартную поставку SmartCPD и выполняется в рамках Professional Services; - добавлена опциональная поддержка облачного решения;
- реализована поддержка мостовых подключений между частным и публичным сетевыми контурами (
private -> public). Настройка такого сценария не входит в стандартную поставку SmartCPD и выполняется в рамках Professional Services; - расширен набор SIP-данных, сохраняемых и отображаемых в CDR.
- добавлена возможность интеграции с
Технические изменения#
- Изменена архитектура решения. Актуальное описание приведено в документе
Архитектура. - Изменены внешние API. Актуальные контракты приведены в документе
Внешнее API:- авторизация всех внешних методов переведена на управляемые Bearer API-ключи и ролевые привилегии;
- Prometheus API переведен со статического установочного токена на управляемые API-ключи с привилегией
metrics.canSee; - IDM API переведен на v2, legacy IDM API v1 и связанный статический токен удалены;
- Audit API переведен на v2;
- прежний Markup API заменен новым Markup API
/api/cdr/v1в составеcdr-collector.
- Добавлено описание ролевой модели в документе
Ролевая модель - Добавлено описание процесса внедрения продукта в документе
Внедрение - Добавлена поддержка автоматизированного CI-сценария для setup, генерации stack-артефактов, повторной конфигурации и деплоя, включая материализацию и ротацию Docker secrets.
- Добавлена проверка согласованности часовых поясов:
SMARTCPD_TZиSMARTCPD_DB_TZдолжны совпадать; setup проверяет это при интерактивной настройке и перед командамиgenerateиdeploy. - Упрощены скрипты подготовки PostgreSQL: вместо набора разрозненных сценариев используется единый flow создания БД, ролей и owner-based grants.
- Упрощена настройка встроенного health-контура и оповещений Grafana: health alert rules переведены на единый operational window, а базовая отправка уведомлений на email теперь настраивается через стандартные SMTP override-параметры Grafana.
- Сервис хранения логов
log2fileподдерживает автоматическую gzip-архивацию завершенных файлов за предыдущие дни и сохранение логов в отдельные файлы с настраиваемой агрегацией по часовым интервалам. Архивация включена по умолчанию. - Разделены контуры хранения исходных данных и данных биллинга:
cdr-collectorхранит исходные CDR, историю детекций и разметку;billing-serverхранит только тарифы, их назначения и расчетные данные биллинга;- исходные CDR и отдельная таблица
statsбольше не хранятся и не дублируются в контуре биллинга.
- На серверной стороне время сохраняется в UTC.
- Отдельный пользователь БД
markupбольше не требуется; добавлен новый пользователь БДcdr. - Обновлены технические дашборды Grafana для
cdr-collectorиcall-controller. - Компоненты SIP:
- разделена обработка удаленного завершения установленного вызова (
remote release) и отмены устанавливаемого вызова (CANCEL).
- разделена обработка удаленного завершения установленного вызова (
balancer:sip_trace_idиспользуется как уникальный бизнес-ключ вызова;- доработан механизм регистрации: при удалении или блокировке SIP-аккаунта на портале соответствующая запись удаляется из кэша
usrloc.
- Для устранения уязвимостей CVE обновлены не только компоненты приложений, но и базовые образы.
Исправленные ошибки#
- При загрузке разметки из CSV с невалидным UTF-8 вместо
500 Internal Server Errorвозвращается400 Bad Requestс сообщениемinvalid UTF-8 stringи расположением проблемного поля. Файл отклоняется до обработки записей. - Исправлены неточности setup flow и сопровождающей документации по настройке SmartContact, SIP trace и observability.
- Исправлена фильтрация вызовов по
Labelsв разделеСтатистика. - Скорректирован подсчет лимитов детекции.
billing-server:- уточнены критерии классификации попыток вызова и анализируемых вызовов для тарификации;
- исправлен пропорциональный расчет включенного объема и абонентской платы для тарифных окон, действовавших только часть отчетного периода;
- исправлены ошибки расчета биллинга, отображения и формирования отчетов и детализации.
balancer:- исправлена обработка коллизий
BYE, возникавших при спрямлении вызова абонентом; - исправлена блокировка загрузчика конфигурации при одновременных запросах.
- исправлена обработка коллизий
Совместимость и обновление#
Совместимость#
- SmartCPD 5.2.12, 5.3.2 (см. процесс обновления).
- Docker версии 26+.
- Debian 12, РЕД ОС 8 (проверены).
- PostgreSQL версии 14+.
Состав обновления#
- Добавлен сервис
cdr-collector. - Добавлен новый сервис
billing-server. - Добавлен опциональный сервис
billing-server-legacyдля миграции с SmartCPD 5.x и доступа к архивным отчетам старого биллинга. Сервис разворачивается только при включении миграции старого биллинга и не запускается при чистой установке SmartCPD 6.0.0. - Добавлен опциональный сервис
cdr-collector-markup-uploaderдля автоматической загрузки разметки из внешней СУБД. - Удален сервис
markup-api; предоставляемый им API заменен новым Markup API в составеcdr-collector. Обновлены сервисы:
| Сервис | Образ:версия |
|---|---|
amd | amd:6.0.0 |
analyzer | analyzer:4.4.0 |
balancer | balancer:6.0.0 |
config-server | smartcpd-config-server:6.0.0 |
grafana | grafana:6.0.0 |
license-server | license-server:6.0.0 |
log2file | log2file:6.0.0 |
metrics | metrics:6.0.0 |
mgw | mgw:6.0.0 |
portal-api | portal-api:6.0.0 |
portal-frontend | portal-frontend:6.0.0 |
resolver | service-host-ip-resolver:6.0.0 |
sipcapture-server | sipcapture-server:6.0.0 |
sipcapture-webapp | sipcapture-webapp:6.0.0 |
smartcpd | smartcpd-engine:6.0.0 |
Обновление с версий 5.x#
Прямое обновление до 6.0.0 поддерживается с 5.2.12 и 5.3.2. Перед обновлением исходная версия должна быть запущена, миграции БД завершены, работоспособность компонентов проверена. Для более ранних версий необходимо сначала выполнить обновление до указанной версии своей линейки.
Примеры путей обновления:
5.2.2 → 5.2.8 → 5.2.12 → 6.0.0.5.3.0 → 5.3.2 → 6.0.0.
Обновление требует миграции данных из legacy-таблиц cdr, stats и markup в новый контур cdr-collector. Порядок обновления и требования к миграции описаны в документе «Обновление SmartCPD».
На каждой промежуточной версии необходимо запустить SmartCPD, дождаться завершения миграций БД и проверить работоспособность компонентов.
Ограничения и особенности#
Контроль тарифов для облачных назначений#
Для облачных назначений наличие доступного тарифа у тенанта необходимо контролировать вручную, включая создание тенанта, изменение доступности тарифов и окончание срока их действия. При допуске новых вызовов платформа не проверяет наличие тарифа в биллинге и не блокирует вызовы из-за его отсутствия. Если на момент начала вызова не найден применимый тариф ни по назначению вызова, ни по основному назначению default, расчетный факт сохраняется с ошибкой no_effective_tariff, без примененного тарифа и со стоимостью 0. Вызов остается без рассчитанной стоимости; последующее появление тарифа не запускает автоматический пересчет этого факта.
Это ограничение ручного контроля не относится к тарифному покрытию валидной файловой лицензии V3: license-server проверяет, что хотя бы один тариф присутствует, а интервалы тарифов без разрывов покрывают весь срок действия лицензии. При нарушении этого правила лицензия признается невалидной и не предоставляет права на новые вызовы. Если другой действующей лицензии или применимой cloud policy нет, новые вызовы не допускаются. Допуск по cloud policy относится к облачному сценарию и требует ручного контроля тарифов, описанного выше.
Кодировка CSV-файлов разметки#
Загрузка разметки из CSV поддерживает только UTF-8. Файлы в других кодировках, включая Windows-1251, необходимо пересохранить в UTF-8 до отправки; автоматическое перекодирование не поддерживается.
Внешний Audit API#
Внешний Audit API в текущем релизе доступен только на уровне платформы. Tenant-scoped авторизация и получение журнала аудита в контексте клиента пока не поддерживаются.
Timezone приложения и БД#
В SmartCPD 6.0.0 timezone запуска контейнеров (SMARTCPD_TZ) должна совпадать с timezone сервера БД (SMARTCPD_DB_TZ). Setup проверяет это соответствие и отклоняет генерацию или развертывание конфигурации с разными значениями, поэтому установку и изменение конфигурации необходимо выполнять через smartcpd-setup.sh.
Потребление памяти сервисом amd#
При длительной работе amd на предельных нагрузках возможно повышенное или неравномерное потребление RAM. В контейнер amd уже включена библиотека libtcmalloc_minimal из Google Performance Tools. Если на большой нагрузке требуется стабилизировать профиль потребления памяти, библиотеку можно подключить через LD_PRELOAD в compose.override.yml:
services:
amd:
environment:
LD_PRELOAD: "/usr/lib/x86_64-linux-gnu/libtcmalloc_minimal.so.4"После изменения compose.override.yml необходимо перегенерировать и применить стек:
./smartcpd-setup.sh generate
./smartcpd-setup.sh deploytcmalloc использует отдельные кэши памяти для потоков, сокращая блокировки при выделении памяти. При длительной высокой нагрузке это может повысить производительность amd и сделать потребление RAM более плавным и стабильным.
Известные проблемы#
- Первичная инициализация биллинга после крупной миграции. При первичной инициализации
billing-serverпосле миграцииcdr-collectorможет возвращать ошибку500 Internal Server Error. Кроме того, биллинг выполняет избыточный проход по всей истории CDR до заданной даты начала расчёта вместо старта с нужной даты. Проблема сказывается только на крупных миграциях с объёмом более 40 млн записей CDR. Исправлено в 6.0.1. - Первичная инициализация тарифов облачных тенантов. Для облачных тенантов, не перечисленных явно в тарифе, назначение
defaultможет не создаваться с даты начала расчёта. При открытии списка назначений в UI оно создаётся текущей датой, в том числе до завершения первичной инициализации. Более ранние вызовы без применимого назначения получают ошибкуno_effective_tariffи стоимость0. Исправлено в 6.0.1. Уже созданные назначения и рассчитанные факты автоматически не исправятся. - [#25183] Full Control Group. Механизм Full Control Group в данном релизе не работает.
- [#25373] Метрики дашборда SIP-вызовов. Метрики Unavaialable и SCPD Error в дашборде SIP-вызовы работают некорректно.