Версия

Дата Выхода

3.18

23.02.2026

Ключевые цели

  • Интеграция с Aurus PhoneUP.

  • Лицензирование SSW-узла с помощью License Manager.

  • CallCenter. Реализация функционала "коммутатор".

Интеграция с Aurus PhoneUP

ECSS-10 имеет ограниченную поддержку SIPREC для интеграции с внешними системами записи (SRS). В настоящий момент реализована и протестирована интеграция с ПО "Aurus PhoneUP".

ECSS-10 обеспечивает базовую возможность автоматической записи звонков с передачей аудиопотоков и структурированных метаданных на внешний Session Recording Server (SRS) по стандартизированному протоколу SIPREC. В базовый функционал входит — базовый вызов, удержание, трансфер (сопровождаемый/ несопровождаемый), переадресация, 3-way конференция. ECSS-10 выступает в качестве SRC (Session Recording Client).

SIPREC имеет приоритет над call recording: если в домене активирован SIPREC → локальная запись (call recording) отключается.

Лицензирование SSW-узла с помощью License Officer

В версии 3.18 в состав сборки был добавлен новый обязательный сервисный компонент License Officer (далее LO). Основная его задача с одной стороны взаимодействие с основным сервером лицензирования Eltex (ELM) или его локальной инсталляцией (ELM Offline), с другой стороны распределение лицензионных параметров по поддерживаемым типам ПО, таким как AuP и ECSS-10. Также в LO был сохранен традиционный тип лицензирования с помощью файлов.
Текущие инсталляции, которые используют традиционный тип лицензирования на самом SSW сохранят свою работу, однако в будущих версиях его поддержка будет закончена в пользу нового сервисного компонента.

CallCenter. Реализация функционала "коммутатор"

Добавлена возможность приоритизации входящих вызовов с помощью информации из адресной книги SSW

  • Приоритизация выполняется с помощью уже существующих механизмов IVR-скрипта.
  • Информация о приоритизации из адресной книги выполняется с помощью отдельного блока IVR "Запрос к адресной книге SSW"

Заменен механизм фиксированных ролей агентов КЦ "оператор" и "супервизор" на профили агентов и список возможностей (услуг) в этих профилях для web КЦ.

  • Весь функционал веба КЦ определяется услугами профиля. Есть минимальный набор услуг, который нельзя удалить из профиля.
  • В данный момент оператор и супервизор — это фиксированные профили, которые нельзя удалить. Можно добавлять и изменять новые.

Новые возможности

  • SSW. Добавлены новые аварийные события передаваемые на Peeper-сервер.

  • SSW. Добавлена возможность выставлять ограничения на количество CoCon-сессий от одного пользователя.

  • SSW. CallCenter. Добавлены профили диспетчера call-центра.

  • SSW. MSR. Добавлена настройка clock-rate для аудио-рекордера.

Добавлены новые аварийные события, передаваемые на Peeper-сервер

Триггеры аварийных событий поставляются вместе с тем программным обеспечением, для мониторинга которого они предназначены:

  • триггеры аварийных событий качества вызовов входят в пакет media-server;
  • триггеры аварийных событий массовых отказов в обслуживании входят в пакет ecss-node;
  • системные триггеры аварийных событий входят в пакет ecss-peeper-client.

Чтобы аварийных событий появились на peeper-server, достаточно:

  • установить соответствующий пакет ПО на сервер;
  • установить и корректно настроить ecss-peeper-client.

После этого уведомления и аварии автоматически добавляются в системе мониторинга. Ручная настройка или импорт не требуется.

Изменение порогов событий

В системе используется автоустановка аварий, поэтому изменение пороговых значений напрямую в Grafana не поддерживается.

Любые ручные изменения будут автоматически перезаписаны значениями, заданными в конфигурации программного обеспечения.

Добавлена возможность выставлять ограничения на количество CoCon-сессий от одного пользователя

Обнаруженная проблема: отсутствовало ограничение на количество сессий для пользователя CoCon.

Было: 

v.3.17.1.0.хххх

/system/info          
┌─────────────────────────────┬────────────────────────────────────────┐
│          Property           │                 Value                  │
├─────────────────────────────┼────────────────────────────────────────┤
│call_limit                   │infinity                                │
│callcenter_active_agents     │infinity                                │
│callcenter_active_supervisors│infinity                                │
│callcenter_call_limit        │infinity                                │
│gracefull_update             │false                                   │
│system_restfs_peer           │default (http://system.restfs.ecss:9990)│
│time_difference_threshold    │500                                     │
└─────────────────────────────┴────────────────────────────────────────┘
CODE

Добавлена возможность: в команду /system/set добавлен новый параметр max_cocon_session_per_user значение по умолчанию = 5, диапазон значений [2, 100]. В результате по умолчанию на один хост под одним пользователем невозможно установить более 5 (по умолчанию) сессий (10 на кластер).

выполняется в CoCon

/system/set max_cocon_session_per_user              
Integer range: [2, 100]    

/system/set max_cocon_session_per_user 2            
Property "max_cocon_session_per_user" successfully changed from: 
5
   to
2.
CODE


Стало:

v.3.18.1.0.ххх

/system/info                                         
┌─────────────────────────────┬────────────────────────────────────────┐
│          Property           │                 Value                  │
├─────────────────────────────┼────────────────────────────────────────┤
│call_limit                   │infinity                                │
│callcenter_active_agents     │infinity                                │
│callcenter_active_supervisors│infinity                                │
│callcenter_call_limit        │infinity                                │
│gracefull_update             │false                                   │
│max_cocon_session_per_user   │5                                       │
│system_restfs_peer           │default (http://system.restfs.ecss:9990)│
│time_difference_threshold    │500                                     │
└─────────────────────────────┴────────────────────────────────────────┘
CODE

При попытке установить шестую сессию (в случае значения по умолчанию) будет ошибка:

ssh admin@localhost -p8023 
admin@localhost's password: 
Permission denied, please try again.
admin@localhost's password: 
Permission denied, please try again.
admin@localhost's password: 
admin@localhost: Permission denied (publickey,password).
CODE

Добавлены профили диспетчера call-центра

 Было: доступ операторов СС имел два фиксированных значения – оператор и супервизор. 

Требуется: реализовать возможность адаптации интерфейса СС под задачи конкретного оператора/супервизора.

Стало: добавлена новая закладка "Профили агентов", в которой можно прописать необходимые параметры для разных категорий операторов/супервизоров.

И при создании/модификации агента назначить созданный профиль на оператора/супервизора.

Добавлена настройка clock-rate для аудио-рекордера

Было: В конфигурационном файле MSR - /etc/ecss/ecss-media-server/config.xml для настройки clock-rate (частоты дискретизации) использовался параметр mixer-clock-rate. Он применялся как для обработки аудио потоков, так и записи разговоров. При необходимости записывать файлы с clock-rate отличным 8 КГц, приходится менять mixer-clock-rate, что негативно сказывается на обработке аудио-потоков разговорных соединений, поскольку большинство кодеков работает с частотой 8 КГц и приходится создавать много ресемплеров.

Пример дефолтного конфигурационного файла — /etc/ecss/ecss-media-server/config.xml

было
<media mixer-clock-rate="8000" use-vad="no" cng-level="0"...

Стало: В конфигурационный файл MSR добавлен новый параметр record-clock-rate отвечающий за частоту дискретизации при записи файла разговора. В настоящее время clock-rate для аудио-потоков разговорных соединений и для записи разговоров может быть установлен различный:

При выставлении clock_rate > 48000, clock_rate устанавливается 48000, при отсутствии параметра record-clock-rate в конфигурационном файле → значение будет подставлять из mixer-clock-rate.

стало
<media mixer-clock-rate="8000" record-clock-rate="48000" use-vad="no" cng-level="0"...

Улучшения

  • SSW. CallCenter. Переход на Protocol UI.

  • SSW. SORM3. Добавлен трейс адаптации для 86 приказа.

  • SSW. Teleconference. При создании нового шаблона опция "использовать идентификатор конференции в поле SIP-заголовка contact" (conf-id-in-sip-contact-header) включена по умолчанию.

  • SSW. CallCenter. Доработана приоритизация абонентов.

  • SSW. Добавлено предупреждение при удалении контекста маршрутизации, если он используется на интерфейсе.

  • SSW. Команда отчистки свойства "number" в шаблоне конференции через * зачищает параметры для всех абонентов, в том числе которых нет в домене.

  • SSW. IVR. При просмотре IVR-скрипта добавлена проверка на превышение лимита блоков.

  • SSW. WebConf. Добавлен тип дня "Сокращенный" для Менеджера маршрутизации.

  • SSW. Поддержана генерация ошибки 423 при получении Expires меньше, чем Min-Expires для подписок.

  • SSW. WebConf. Добавлен недостающий перевод для подсказок у дополнительных услуг.

  • SSW. WebConf. Добавлена возможность добавить аудио-кодек "G726" в media-profile.

CallCenter. Переход на Protocol UI

Переход на Protocol UI (дизайн-систему) с сохранением прежней логики работы (функционал остался в том же виде и с той же логикой работы, что и до перехода) для модулей:

  • Operators (операторы)
  • Queues (очереди)
  • Calls (вызовы)
  • Dashboard (обзорная панель)
  • Связанные компоненты: таблицы мониторинга и статистики, модальные окна, журналы, аудиоплеер, настройки очередей и др.
  • Дополнительно – обновление самой библиотеки Protocol UI до актуальной версии

Добавлен trace-адаптации для 86 приказа

Было: функционал трассировки адаптации поддерживал два типа "sorm/tts". Но обработка адаптации SORM3 отличается от адаптации SORM.

было
/domain/test_domain/adaptation/trace type=        
sorm    tts


Добавлена возможность: в команду трассировки был добавлен новый тип type=sorm3.

стало
/domain/test_domain/adaptation/trace type=         
sorm     sorm3    tts

В результате трассировка адаптации для сервиса SORM3 показывается корректно. 

При создании нового шаблона опция conf-id-in-sip-contact-header включена по умолчанию

При создании шаблона через web-интерфейс по умолчанию включена опция conf-id-in-sip-contact-header (использовать идентификатор конференции в поле SIP-заголовка "contact"). Но при создании шаблона через CoCon опция выключена.

 Было: 

/domain/test_domain/teleconference/template/info "test conference"
===================================================
Template: test conference (06e8db2018e1f091)

Template properties:
┌──────────────────────────────────────────────────┬────────────────────────────────────────────────────────┐
│                       Key                        │                         Value                          │
├──────────────────────────────────────────────────┼────────────────────────────────────────────────────────┤
│description                                       │                                                        │
│number                                            │                                                        │
│answer_to_initiator_when_success_outgoing_call    │false                                                   │
│auto_collect                                      │false													│
│conf-id-in-sip-contact-header                     │false                                                   │
│destroy_by_no_initiator                           │true                                                    │
│destroy_when_only_one_member_left                 │false                                                   │
│display_name_prefix                               │"Teleconference"

...
CODE

 

Стало: Изменили значение по умолчанию для параметра conf-id-in-sip-contact-header. Сейчас при создании шаблона через web или CoCon значения идентичны и равны true.

/domain/test_domain/teleconference/template/declare new              
Success: Template has been declared with id 06ebcb35d4ea6471.

/domain/test_domain/teleconference/template/info new                 
===================================================
Template: new (06ebcb35d4ea6471)

Template properties:
┌──────────────────────────────────────────────────┬────────────────────────────────────────────────────────┐
│                       Key                        │                         Value                          │
├──────────────────────────────────────────────────┼────────────────────────────────────────────────────────┤
│description                                       │                                                        │
│number                                            │                                                        │
│answer_to_initiator_when_success_outgoing_call    │false                                                   │
│auto_collect                                      │false                                                   │
│'conf-id-in-sip-contact-header'                   │true                                                    │
│destroy_by_no_initiator                           │true                                                    │
│destroy_when_only_one_member_left                 │false                                                   │
│display_name_prefix                               │"Teleconference "                                       │
. . .
CODE

Доработана приоритизация абонентов

 Было: В "Адресной книге" у абонента были поля "Имя", "Отчество", "Фамилия", "Компания", "Должность", "Описание", "Фото".

Требуется: Для реализации нового функционала потребовалось дополнительное поле – "Приоритет".

Стало: Дополнительное поле в "Адресной книге" добавлено. В текущий момент поддерживается 10 приоритетов.

Добавлено предупреждение при удалении контекста маршрутизации, если он используется на интерфейсе

Было: Не выполнялась проверка использования "Контекста маршрутизации" при его удалении. Как результат на объектах (для примера транках) оставалась ссылка не несуществующий контекст, оставшиеся несуществующие контексты влияют на маршрутизацию вызовов.

Добавлен функционал : При удалении "Контекста маршрутизации"  через веб или CoCon выполняется проверка → если контекст используется на одном или нескольких интерфейсах, то в предупреждении оператору система распечатает используемые интерфейсы и контекст не будет удален. Неиспользуемые контексты удаляются.

/domain/test_domain/routing/delete test_name    

Routing context 'test_name' is used for interface(s): virtual:999@testing, 104@testing, 102@testing, system:teleconference, 42000@testing, system:ivr, TRUNK_rt001, 100@testing, bridge:name1.
Change interface(s) parameters before remove current routing context.
/domain/test_domain/routing/delete no_objects

Context was deleted

Команда отчистки свойства "number" в шаблоне конференции через * зачищает параметры для всех абонентов, в том числе которых нет в домене

Было: При выполнении команды /domain/<domain>/teleconference/template/group/number/clean с параметром number=* обнулялись только свойства абонентов входящих в указанный домен. Но в группе могут состоять абоненты не входящие в выбранный домен или вообще относящиеся к другой станции, и у данных абонентов обнуление свойств не выполнялось. 

Решение: При выполнении команды при указании  "*" – получать список всех абонентов в группе, а не на домене.

Стало: При указании  "*"--  обнулялись свойства всех абонентов входящих в группу, а не только в домен. В примере абоненты 1001-1009 входят в домен=test_domain, а абоненты 2001-2002 и 2222-2224 относятся к другим АТС:


стало

/domain/test_domain/alias/list              
Aliases of the ECSS domain: test_domain
┌───────┬─────────────────────────┬─────────┐
│ Type  │          Iface          │Addresses│
├───────┼─────────────────────────┼─────────┤
│sip    │1001@test_domain         │  1001   │
│sip    │1002@test_domain         │  1002   │
│sip    │1003@test_domain         │  1003   │
│sip    │1004@test_domain         │  1004   │
│sip    │1005@test_domain         │  1005   │
│sip    │1006@test_domain         │  1006   │
│sip    │1007@test_domain         │  1007   │
│sip    │1008@test_domain         │  1008   │
│sip    │1009@test_domain         │  1009   │
└───────┴─────────────────────────┴─────────┘
Total: 9

/domain/test_domain/teleconference/template/group/number/clean new new * --email                                
Success: Property has been cleaned for number(s): 1001, 1005, 1009, 2001, 2002, 2222, 2223, 2224
CODE


При просмотре IVR-скрипта добавлена проверка на превышение лимита блоков

Было: В ECSS-10 есть возможность выставить максимальное количество блоков в IVR-скрипте:

При открытии в IVR-редакторе скрипта с количеством блоков выше указанного значения IVR редактор зависнет на моменте загрузки скрипта. Для возобновления возможности работы с IVR редактором придется перезагружать страницу.


Решение: Добавить проверку на превышение лимита блоков при просмотре IVR-скрипта.

Стало:





Добавлен тип дня "Сокращенный" для Менеджера маршрутизации

Было: В календаре поддерживаются следующие типы дней: Выходной, Рабочий, Праздничный, Предпраздничный, Сокращенный предпраздничный, Сокращенный. А "Менеджер маршрутизации" в условиях по времени поддерживает только: Выходной, Рабочий, Праздничный, Предпраздничный, Сокращенный предпраздничный.

Стало: В "Менеджер маршрутизации" добавлен тип дня – "Сокращенный". Данные в "Календаре" и в "Менеджер маршрутизации" приведены в соответствие:

Поддержана генерация ошибки 423 при получении expires меньше, чем Min-Expires для подписок

Было: При работе с подписками не выполнялся контроль минимального времени (min-expires 90) подписок.

Стало: Используется контроль минимального времени для подписок. В случае получения запроса с временем меньше минимального SSW высылает ошибку 423 (Interval Too Brief).

Добавлен недостающий перевод для подсказок у дополнительных услуг

Не все подсказки были переведены: 

Было: 



Стало: Перевод подсказок добавлен:




Добавлена возможность добавить аудио-кодек "G726" в media-profile

Поддержка кодека "G726" была добавлена в версии 3.17, но не было возможности добавить данный кодек в media-profile.

Было:

было
/domain/testing/media-profile/info default      
. . .
Codec type: audio codecs configuration:
┌───────┬───────────────┬──┬────────┬─────┐
│Enabled│     Codec     │PT│Property│Value│
├───────┼───────────────┼──┼────────┼─────┤
│       │G722           │* │        │     │
│       │PCMA           │* │        │     │
│       │PCMU           │* │        │     │
│       │G729           │* │        │     │
│       │telephone-event│* │        │     │
└───────┴───────────────┴──┴────────┴─────┘

было
/domain/test_domain/media-profile/codecs-add default audio G726 * 
Error: codec with name: "G726" not supported

Стало:

стало
/domain/test_domain/media-profile/codecs-add default audio G726 *                 
Media-profile: default adds audio codecs successfully.

Codec type: audio codecs configuration:
┌───────┬───────────────┬──┬────────┬─────┐
│Enabled│     Codec     │PT│Property│Value│
├───────┼───────────────┼──┼────────┼─────┤
│       │G722           │* │        │     │
│       │PCMA           │* │        │     │
│       │PCMU           │* │        │     │
│       │G729           │* │        │     │
│       │telephone-event│* │        │     │
│       │G726           │* │        │     │
└───────┴───────────────┴──┴────────┴─────┘
стало
/domain/test_domain/media-profile/info default       
. . .
Codec type: audio codecs configuration:
┌───────┬───────────────┬──┬────────┬─────┐
│Enabled│     Codec     │PT│Property│Value│
├───────┼───────────────┼──┼────────┼─────┤
│       │G722           │* │        │     │
│       │PCMA           │* │        │     │
│       │PCMU           │* │        │     │
│       │G729           │* │        │     │
│       │telephone-event│* │        │     │
│       │G726           │* │        │     │
└───────┴───────────────┴──┴────────┴─────┘

Исправления

  • SSW. Добавлена передача NOTIFY со статусом terminated при удалении абонента.

  • SSW. WebConf. Актуализировано приложение "Информация о серверах SSW".

  • SSW. Restfs. Исправлена ошибка создания файла записи разговора с нулевой длительностью.

  • SSW. Исправлен вывод команды /domain/<DOMAIN>/sip/user/subscription-limits при изменении информации о лимитах.

  • SSW. Исправлено определение роли доступа для кнопок в карточке абонента.

  • SSW. Изменены права на команду ss_voicemail_mailbox_modify.

  • SSW. WebConf. Изменена всплывающая подсказка для приложения "Адаптация номеров".

  • SSW. Исправлена проблема зацикливания при запросе в RADIUS для SIP-Q интерфейса.

  • SSW. WebConf. Исправлена ошибка переключения  режимов "Плитка/Таблица/Дерево" приложения "Кластеры".

  • SSW. WebConf (Стандартный). Исправлен вывод информации расписания для для услуг — "переадресация по расписанию" (find_me) и "переадресация по расписанию и не ответу" (find_me_no_response) в "Стандартном режиме" и приложении "Портал абонента".

  • SSW. WebConf. Скорректировано описание в информационном окне при вводе нового пароля, не соответствующего критериям сложности.

  • SSW. Исправлена ошибка при попытке удаление более одного домена.

  • SSW. Исправлена ошибка звонка внутри "Босс-группы" (boss-group) через код услуги *126.

  • SSW. ДВО (Voicemail). Исправлена ошибка обработки услуги voicemail при значении опции override_messages=false.

  • SSW. ДВО (FBC). Исправлена ошибка при обработке услуги "Запрет переадресуемых вызовов" (fbc).

  • SSW. IVR. Исправлена ошибка обработки завершения вызова после IVR Connect с PlayOut.

  • SSW. SubscriberPortal. Исправлено отображение пароля учетной записи в приложении "Портал абонента".

  • SSW. IVR. Исправлена работа http-запроса в блоке RPC.

  • SSW. Исправлена ошибка на ядре при вызове в транк с активированной услугой "Сервис поддержки запросов к серверу геолокации" (tsmn_request).

  • SSW. WebConf. Исправлена ошибка вывода в web-интерфейсе sip_modifications для абонента.

  • SSW. WebConf. Исправлена ошибка положения окна статуса услуг на заднем плане в приложении "Менеджер транков".

  • SSW. WebConf. Исправлено отображение истории вызовов на вкладке "Вызовы" в приложении "Портал абонента".

  • SSW. Исправлена ошибка присутствия подраздела "cocon/role/" у пользователей, не имеющих прав что-либо там изменять.

  • SSW. SubscriberPortal. Исправлена ошибка обработки локального времени в списке активных конференций приложения "Портал абонента".

  • SSW. CallCenter. Исправлено отображение контактов в "Справочнике".

  • SSW. Restfs. Исправлена инициализация eccs-restfs-unit-conf.

  • SSW. В IVR исправлено значение по умолчанию полей "Установление соединения" и "Время ожидания" при создании блока Connect.

  • SSW. CallCenter. Исправлена ошибка, при которой добавление агента-алиаса приводит к поломке очереди.

  • SSW. Teleconference. Исправлена ошибка добавление почты для номеров группы телеконференции.

  • SSW. Исправлена ошибка создания домена с таким же именем после его удаления.

  • SSW. IVR. Исправлена сортировка медиа-файлов в блоке PlayOut.

  • SSW. CDR. Исправлена следующая ошибка: при не успешной передаче cdr-файла утилитой ecss-copycdr файл все равно будет помечен как _transfered.

  • SSW. Исправлен некорректный код ошибки при вызове в транк от абонента, не входящего в access_group.

  • SSW. CallCenter. Исправлен перевод в выводе сообщения о достигнутом лимите агентов.

  • SSW. Битрикс24. Исправлена ошибка авторизации на ОС Astralinux.

  • SSW. Исправлено обновление полей last_via и user_agent после перерегистрации абонента.

  • SSW. MSR. Исправлена ошибка обработки вызова с кодеком opus в SDP.

  • SSW. Исправлена ошибка в "Портал абонента". При активации услуги "Запуск IVR" услуга не активируется.

  • SSW. CVE. Устранена уязвимость с подделкой запросов на стороне сервера.

  • SSW. CDR. Исправлена ошибка отсутствия отчёта cdr после перезапуска хоста.

  • SSW. CallCenter. Исправлена ошибка, при которой очередь не переходит в пост-процессинг при отсутствии 180 Ringing.

  • SSW. Устранена обнаружена уязвимость в настройках COOKIE.

  • SSW. Исправлена ошибка ответа на NOTIFY при включенном nat_traversal отправляется на адрес отправителя.

  • SSW. Исправлена ошибка отправки NOTIFY по BLF подпискам на ТА Yealink при отработке резерва.

  • SSW. WebConf. Исправлено зависание IVR-редактора.

  • SSW. Teleconference. Исправлено несоответствие длительности разговора на странице совещания.

  • SSW. WebConf. Исправлена сортировка времени в блоке IVR TIME.

Добавлена передача NOTIFY со статусом terminated при удалении абонента

Было: При удалении абонента с подсистемы подписок абоненту не приходил  "NOTIFY" со статусом "terminated".

Стало: После удаления абонента выполняется отправка сообщения  NOTIFY с Subscription-State: terminated.

Актуализировано приложение "Информация о серверах SSW"

Было: В web-приложении "Информация о серверах SSW" не корректно выводилась информация о версии, также отсутствовала информация о контрольной сумме.

После исправления ошибки: Версия ПО и контрольная сумма указаны корректно.

Исправлена ошибка создания файла записи разговора с нулевой длительностью

Было: В случае использования услуги "call_recording" для несостоявшихся разговоров (по причине сброс вызова до ответа со стороны А/В, отбой по таймауту), длительность которых 0 сек система создавала файл записи разговора.

После исправления ошибки: Добавлена доменный параметр ignore_empty_call_record = false/true (значение по умолчанию false).

При выставленном параметре ignore_empty_call_record = true → пустые файлы будут помечены как *.purge и утилитой restfs-cleaner будут удалены.

Исправлен вывод команды /domain/<DOMAIN>/sip/user/subscription-limits при изменении информации о лимитах

 Было: При подключении услуги BLF у абонента, в cocon отсутствовала информация о лимитах до момента активации/деактивации услуги.

 /domain/test_domain/sip/user/subscription-limits * *        
┌──────┬────┬─────┐
│Number│Type│Limit│
├──────┼────┼─────┤
└──────┴────┴─────┘

После исправления ошибки: информация о лимитах отображается корректно:

 /domain/test_domain/sip/user/subscription-limits * * 
┌──────┬────┬─────┐
│Number│Type│Limit│
├──────┼────┼─────┤
│104   │blf │0/16 │
│102   │blf │0/16 │
│101   │blf │0/16 │
│100   │blf │1/16 │
│103   │blf │0/16 │
└──────┴────┴─────┘

Исправлено определение роли доступа для кнопок в карточке абонента

 Было: При работе оператора с установленной ролью "только просмотр и редактирование" приложения "Карточка абонента" были доступны кнопки "Добавить" и "Удалить":

После исправления ошибки: Кнопки "Добавить" и "Удалить" не доступны в соответствии с ролью оператора (только просмотр и редактирование).

Изменены права на команду ss_voicemail_mailbox_modify

Было: Для работы с сервисом "Портал абонента" предполагается создать пользователя, у которого права доступа будут ограничены только приложением "Портал абонента" на одном или нескольких доменах. Такого пользователя нужно создать, в примере пользователь "test".

Укажите в конфигурационном файле - /etc/ecss/ecss-web-conf/settings_local.py логин и пароль данного пользователя (по умолчанию указан пользователь "admin" и рекомендация смены пользователя):

cat /etc/ecss/ecss-web-conf/settings_local.py 
# global const for web_conf.
# coding=utf-8

# Debug log level for web-conf
DEBUG = False
. . .
# Special username for which only the subscriber portal commands are available.
# It is not recommended to use the administrator login for security reasons.
LOGIN_HTTP_TERMINAL = 'test'
# Password for special user.
PASSWORD_HTTP_TERMINAL = 'test'
# IP:PORT ECSS server for subscriber portal
URL_HTTP_TERMINAL = '127.0.0.1:9999'
. . .

При данной конфигурации (пользователь имеет только права на приложение "Портал абонента") была проблема прослушивания/удаления записей голосовой почты в приложении "Портал абонента". 

Стало: Изменили права доступа для разрешения ecss-<DOMAIN>-domain-subscriber-portal, теперь действия с голосовой почтой в приложении выполняются без ошибок:

Изменена всплывающая подсказка для приложения "Адаптация номеров"

 Было: В предыдущих версиях подсказка в приложении "Адаптация номеров" для поля "номер" была одинаковой как для "Условия" так и для "Действия", что не совсем корректно.

Стало: В текущей версии выполнили коррекцию текста подсказки для поля "номер" в закладке "Действия":


Исправлено проблема зацикливания при запросе в RADIUS для SIP-Q интерфейса

Было: При запросах в RADIUS для вызовов через SIP-Q интерфейс некорректно обрабатывался release cause, что приводило к зацикливанию.

Стало: Выполнили правки корректирующие данную проблему. Проблема устранена.

Исправлена ошибка переключения  режимов "Плитка/Таблица/Дерево" приложения "Кластеры"

Было: В приложении "Кластеры" реализована возможность выбора режима просмотра Плитка/Таблица/Дерево, при этом Плитка и Таблица работают корректно, а при нажатии на кнопку Дерево происходит выход из "Менеджер конфигурации".

Стало: Исправлена процедура обработки события по нажатию кнопки "Дерево":

Исправлен вывод информации расписания для услуг — "переадресация по расписанию" (find_me) и "переадресация по расписанию и не ответу" (find_me_no_response) в "Стандартном режиме" и приложении "Портал абонента"

 Было: В "Стандартном режиме" и приложении "Портал абонента" при использовании шаблона расписания информация о дне недели и времени не отображалась.

После исправления ошибки
Расширенный режим:

Стандартный режим:

Портал абонента:

Скорректировано описание в информационном окне при вводе нового пароля, не соответствующего критериям сложности

Было: В ECSS-10 есть возможность указывать критерии сложности пароля для пользователя CoCon/Web. В случае указания в файле /etc/ecss/global.config критериев сложности пароля, для примера не менее 8 символов, включающих в себя строчные и заглавные буквы латинского алфавита, а также цифры и спецсимволы система, при создании нового пользователя/модификации пароля для пользователя, будет выполнять проверку соответствия нового пароля данным критериям.
При создании пользователя в CoCon получим понятное сообщение об ошибки при не соответствии критериям:

/cocon/passwd admin 
[passwd] Changing password for admin
Enter new password: 
Confirm new password: 
Password is too weak. Failed safety restrictions:
Passwords must contain a minimum of 1 upper case letter [A-Z]
Passwords must contain a minimum of 1 special character: !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
Passwords must be at least 8 characters in length
Passwords must contain a minimum of 1 numeric character [0-9]

В случае использования Web получим также ошибку, но менее информативную, и сложно понять, что сделано не корректно:

Стало: Исправлена обработка/подготовка выходного сообщения оператору. По сообщения понятно, что требуется скорректировать:

Исправлена ошибка при попытке удаления более одного домена

 Было: При попытки удаления более одного домена получали ошибку "Cannot remove domain, cause: not_found", хотя домен существует и доступен для использования.

/domain/list 
There are declared ECSS domains:
 abf
 test_domain
 testing

Total: 3

/domain/declare one
New domain one is declared

/domain/declare two
New domain two is declared

/domain/list                    
There are declared ECSS domains:
 abf
 one
 test_domain
 testing
 two

Total: 5

/domain/remove one        
[remove] You are going to remove domain "one". All properties, aliases, aliase's profiles
         , SS settings, bridges, routing contexts, restrictions, access-types, access-gro
         ups will be removed.
Are you sure?: yes/no ?> yes
[**********************************************************************] 2s 977ms 
Declaration of domain "one" is removed.

domain/remove two           
[remove] You are going to remove domain "two". All properties, aliases, aliase's profiles
         , SS settings, bridges, routing contexts, restrictions, access-types, access-gro
         ups will be removed.
Are you sure?: yes/no ?> yes
Cannot remove domain, cause: not_found

/domain/list                    
There are declared ECSS domains:
 abf
 test_domain
 testing
 two

Total: 4

/domain/remove two        
[remove] You are going to remove domain "two". All properties, aliases, aliase's profiles
         , SS settings, bridges, routing contexts, restrictions, access-types, access-gro
         ups will be removed.
Are you sure?: yes/no ?> yes
Cannot remove domain, cause: not_found

/domain/list                    
There are declared ECSS domains:
 abf
 test_domain
 testing
 two

Total: 4

Стало: После исправления ошибки домены успешно удаляются без ошибок:

/domain/list                    
There are declared ECSS domains:
 domain_b
 test_domain
Total: 2

/domain/declare one
New domain one is declared

/domain/declare two
New domain two is declared

/domain/list 
There are declared ECSS domains:
 domain_b
 one
 test_domain
 two

Total: 4

/domain/remove one 
[remove] You are going to remove domain "one". All properties, aliases, aliase's profiles
         , SS settings, bridges, routing contexts, restrictions, access-types, access-gro
         ups will be removed.
Are you sure?: yes/no ?> yes
[**********************************************************************] 1s 703ms 
Declaration of domain "one" is removed.

/domain/remove two 
[remove] You are going to remove domain "two". All properties, aliases, aliase's profiles
         , SS settings, bridges, routing contexts, restrictions, access-types, access-gro
         ups will be removed.
Are you sure?: yes/no ?> yes
[**********************************************************************] 1s 109ms 
Declaration of domain "two" is removed.

/domain/list                    
There are declared ECSS domains:
 domain_b
 test_domain
Total: 2

Исправлена ошибка звонка внутри "Босс-группы" (boss-group) через код услуги *126

Было: Абонент участник "Boss-group", набирая комбинацию *126*номер_Boss-group, попадал на другого абонента участника данной группы. Аналогично при наборе  *126*номер_Boss-group*0 (или 1/2/..) приводило к подключению к другому участнику данной группы. Данная работа не совсем корректна. Кодовая комбинация *126*номер_Boss-group / *126*номер_Boss-group*0 (или 1/2/..) предназначена для возможности вмешательства в разговор/перехват вызова при поступлении звонка на номер Boss-group с использованием "blf". Для звонков между участниками Boss-group не предназначена.

Стало: После исправления ошибки звонок на другого участника Boss-group не устанавливается.

Исправлена ошибка обработки услуги voicemail при значении опции override_messages=false

Было: В случае заполнения выделенного объема (mailbox_volume) и наступлении нового события для записи сообщения, абонент А получал 480 Temporarily Unavailable сообщение, которое передавалось по истечении таймера 60 сек. В течении этого времени абонент А слушал тишину. 

Стало: После коррекции ошибки в случае переполнения mailbox. Абонент А сразу получает сообщение:

487 Request Terminated
Warning: 399 ecss "system: VoiceMail mailbox full" 

Исправлена ошибка при обработки услуги "Запрет переадресуемых вызовов" (fbc)

Было: При активной услуге "Запрет переадресуемых вызовов" (fbc) звонок абонента А переадресовывался на абонента "С" при использовании у абонента "В" услуги "cfu_type2".

Стало: После исправления ошибки на терминал абонента А поступает сообщение:

SIP/2.0 480 Temporarily not available
...
Reason: Q.850;cause=31;text="Normal unspecified" 
Warning: 399 ecss "system: side A has banned call forwarding" 

Исправлена ошибка обработки завершения вызова после IVR Connect с PlayOut

Было: В случае использования в IVR скрипте блока "PlayOut" после проигрывания всех сообщений на ТА вызов остается активным, в трассировке отсутствует посылка BYE, в истории вызовов он помечен как завершенный по причине systemFailure с описанием Call process failure. Причина в том, что в play_settings появляется undefined, который не обрабатывался в функции process_play_settings.

Стало: После исправления ошибки обработки завершения вызова, по окончанию проигрывания указанных в скрипте сообщений вызов успешно отбивается. 

Исправлено отображение пароля учетной записи в приложении "Портал абонента"

Было: В приложении "Портал абонента" в поле пароль указывался не пароль учётной записи "Портала абонента", а пароль SIP-абонента. 

Стало: Исправлено отображение поля "пароль", а также окно "Помощь по Порталу абонента":

Исправлена работа http-запроса в блоке RPC

Было: http_uri:parse(URL) был заменен на uri_string:parse(URL), в результате в IVR блоке RPC не работал http-запрос.

Стало: После исправления ошибки http-запрос обрабатывается корректно:

  • при указании существующего URL https://ubuntu.com скрипт успешно отрабатывает по коду "200";
  • при указании НЕ существующего URL https://test.local.ru/missing_page скрипт успешно отрабатывает по коду "404".

Исправлена ошибка на ядре при вызове в транк с активированной услугой "Сервис поддержки запросов к серверу геолокации" (tsmn_request)

Было: При установлении соединения через транк с услугой "Сервис поддержки запросов к серверу геолокации" (tsmn_request) через интервал времени, задаваемый таймером core "no_answer_timeout", получали ошибку, в результате которой: на вызывающей стороне вызов будет считаться завершенным (systemFailure/Call process failure), запись разговора прекратится (если включена на абоненте), абоненты продолжат общаться. После завершения вызова одной из сторон вторая сторона не получает BYE. Проблема возникает, если с "tsmn" транка не приходит сообщение "answer".

Стало: После исправления ошибки обработка услуги "tsmn_request" вызов выполняется без ошибок.

Исправлена ошибка вывода в web-интерфейсе sip_modifications для абонента

Было: В web-интерфейсе не корректно (не полностью) выводилась информация о модификации SIP-заголовков:

Информация в CoCon

/domain/test_domain/sip/user/info sip 42005@test_domain 
┌──────────────────────────────┬────────────────────────────────────────────────────────────┐
│             User             │                     42005@test_domain                      │
├──────────────────────────────┼────────────────────────────────────────────────────────────┤
. . .
│sip-modifications             │From: []...[; end_sip_mod]                                  │
│                              │Contact: [CONTACT_sip_mod ]...[; test]                      │
. . . 
└──────────────────────────────┴────────────────────────────────────────────────────────────┘
CODE

Информация в web:

Стало: После исправления ошибки информация в CoCon и в web идентичны:

Исправлена ошибка положения окна статуса услуг на заднем плане в приложении "Менеджер транков"

Было: При управлении услугами на транке во вкладке "Дополнительные услуги" во время сохранения данных окно статуса услуг выводилось на заднем плане, что создавало неудобство в работе.

После исправления ошибки: Окно статуса услуг выводилось на передний план.

Исправлена ошибка отображение истории вызовов на вкладке Вызовы в приложении "Портал абонента"

 Было: В приложении "Портал абонента" не отображалась история вызовов. Не было отображения как активных вызовов? так и завершенных.

Стало: После исправления ошибки абонент в личном кабинете может наблюдать всю историю своих вызовов:

Исправлена ошибка присутствиz подраздела "cocon/role/" у пользователей, не имеющих прав что-либо там изменять

В случае, если у пользователя нет прав ecss-admin (глобального администратора), подраздел команд /cocon/role/ не должен быть доступен данному пользователю. 

cocon/list users              
┌─────────┬─────────────────────────────────────────┬─────┬─────────────┐
│  Login  │                 Groups                  │Roles│ Group roles │
├─────────┼─────────────────────────────────────────┼─────┼─────────────┤
│test     │ecss-test_domain-domain-admin            │     │             │
└─────────┴─────────────────────────────────────────┴─────┴─────────────┘
CODE

Было

test@[mycelium1@ecss1#abf.test]:/$ /cocon/
my-groups         nodes-summary     role/             
test@[mycelium1@ecss1#abf.test]:/$ /cocon/role/
There is no such command: 
Стало: После исправления ошибки раздел /cocon/role/ недоступен пользователю:
test@[mycelium1@ecss1#abf.test]:/$ cocon/
my-groups         nodes-summary 

Исправлена ошибка обработки локального времени в списке активных конференций приложения "Портал абонента"

Было: Некорректно обрабатывалась разница значений времени в часовых поясах между SSW-сервером и хостом абонента, на котором запущено приложение "Портал абонента" – длительность конференции в приложении не соответствовала реальной. В примере разница в часовых поясах — 7 часов. Продолжительность конференции на ТА абонента (Twinkl) 00:01:13. В приложении "Портал абонента" 07:01:14.

Стало: После исправления ошибки продолжительность конференции в "Портале абонента" корректна.

 Исправлено отображение контактов в "Справочнике" приложения "CallCenter"

 Было: На вкладке "Справочник" приложения CallCenter происходило дублирование имени, в примере имя "Оксана" назначено только для агента id=200.

После исправления ошибки: Дублирования больше не происходит.

Исправлена инициализация eccs-restfs-unit-conf

Было: Периодически при старте сервиса ecss-restfs-unit получали ошибку:

udo systemctl status ecss-restfs-unit-conf.service 
× ecss-restfs-unit-conf.service - Configure ecss-restfs-unit of ecss-10
     Loaded: loaded (/lib/systemd/system/ecss-restfs-unit-conf.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Fri 2026-02-06 17:00:25 +07; 2 days ago
   Main PID: 29181 (code=exited, status=7)
        CPU: 7ms

Feb 06 17:00:25 ecss1 systemd[1]: Started Configure ecss-restfs-unit of ecss-10.
Feb 06 17:00:25 ecss1 ecss-unitd[29183]: curl: (7) Couldn't connect to server
Feb 06 17:00:25 ecss1 systemd[1]: ecss-restfs-unit-conf.service: Main process exited, code=exited, status=7/NOTRUNNING
Feb 06 17:00:25 ecss1 systemd[1]: ecss-restfs-unit-conf.service: Failed with result 'exit-cod

Проблема была в в запуске restfs-unit-conf сразу после restfs-unit и сразу же при попытке обращения к restfs-unit, не дождавшись, пока restfs-unit загрузится.

Решение: Установить задержку между запуском restfs-unit и restfs-unit-conf, чтобы restfs-unit успел проинициализироваться.

После исправления ошибки: Инициализация eccs-restfs-unit-conf выполняется успешно.

В IVR исправлено значение по умолчанию полей "Установление соединения" и "Время ожидания" при создании блока Connect

 Было: При создании нового скрипта для исходящего вызова с блоком "Connect" появлялась ошибка:



При этом в ошибке указывается поле "Номер", хотя речь о поле "Установление соединения" и "Время ожидания", которое вообще не выбрано.

После исправления ошибки: IVR-скрипт отрабатывает корректно.

Исправлена ошибка, при которой добавление агента-алиаса приводит к поломке очереди

В очередь СС могут быть добавлены в качестве агента не только агенты, но и алиасы.

/domain/test_domain/cc/queue/info test               
┌──────────────────────────────────────────┬─────────────┐
│                 Property                 │    Value    │
├──────────────────────────────────────────┼─────────────┤
│acw_status_set                            │undefined    │
│agent_number_forwarding_enabled           │false        │
│agents                                    │agent:500    │
│                                          │alias:103    │
. . .
└──────────────────────────────────────────┴─────────────┘
CODE

Было: При добавлении в очередь хотя бы одного агента-алиас очередь переставала работать. При звонке в очередь абонент А попадал в тишину, ответ от IVR не выполнялся, вызов не распределялся на агентов.

После исправления ошибки: Вызова распределяются на доступных агентов успешно.

Исправлена ошибка добавления почты для номеров группы телеконференции

 Было: При добавлении email одному из участников группы телеконференции у остальных участников почта удаляется.

/domain/testing/teleconference/template/info "test" --show-numbers --show-groups  
...

Group numbers:
┌──────┬──────────────────────────────────────────────────┬────────────────────────────────────────────────────────┐
│Number│                       Key                        │                         Value                          │
├──────┼──────────────────────────────────────────────────┼────────────────────────────────────────────────────────┤
│300   │-                                                 │-                                                       │
│      │description                                       │"Абонент  - 300"                                      │
│      │email                                             │--email 300.autotest@yandex.ru                          │
│      │role                                              │--role member                                           │
│      │voice                                             │--voice false                                           │
│301   │-                                                 │-                                                       │
│      │description                                       │"Абонент - 301"                                       │
│      │role                                              │--role member                                           │
│      │voice                                             │--voice false                                           │
└──────┴──────────────────────────────────────────────────┴────────────────────────────────────────────────────────┘
Total: 2

/domain/testing/teleconference/template/group/number/set "test" "test_set" 301 --email  301.autotest@yandex.ru
Success: Property has been set for number(s): 301

/domain/testing/teleconference/template/info "test" --show-numbers --show-groups 
...

Group numbers:
┌──────┬──────────────────────────────────────────────────┬────────────────────────────────────────────────────────┐
│Number│                       Key                        │                         Value                          │
├──────┼──────────────────────────────────────────────────┼────────────────────────────────────────────────────────┤
│300   │-                                                 │-                                                       │
│      │description                                       │"Абонент  - 300"                                        │
│      │role                                              │--role member                                           │
│      │voice                                             │--voice false                                           │
│301   │-                                                 │-                                                       │
│      │description                                       │"Абонент - 301"                                         │
│      │email                                             │--email 301.autotest@yandex.ru                          │
│      │role                                              │--role member                                           │
│      │voice                                             │--voice false                                           │
└──────┴──────────────────────────────────────────────────┴────────────────────────────────────────────────────────┘
Total: 2
CODE

Проблема: Команда /domain/<DOMAIN>/teleconference/template/group/number/set не обновляет флаги, а перезаписывает их, сбрасывая старые.

После исправления ошибки: Новые данные добавляются не сбрасывая предыдущие.

/domain/testing/teleconference/template/info "test" --show-numbers --show-groups 
...

Group numbers:
┌──────┬──────────────────────────────────────────────────┬────────────────────────────────────────────────────────┐
│Number│                       Key                        │                         Value                          │
├──────┼──────────────────────────────────────────────────┼────────────────────────────────────────────────────────┤
│300   │-                                                 │-                                                       │
│      │description                                       │"Абонент  - 300"                                        │
│      │email                                             │--email 300.autotest@yandex.ru                          │
│      │role                                              │--role member                                           │
│      │voice                                             │--voice false                                           │
│301   │-                                                 │-                                                       │
│      │description                                       │"Абонент - 301"                                         │
│      │email                                             │--email 301.autotest@yandex.ru                          │
│      │role                                              │--role member                                           │
│      │voice                                             │--voice false                                           │
└──────┴──────────────────────────────────────────────────┴────────────────────────────────────────────────────────┘
Total: 2
CODE


Исправлена ошибка создание домена с таким же именем после его удаления

 Было: При удалении домена с большим количеством абонентов (несколько тысяч) и попытки создать домен с таким же именем команда не выполнялась.

/domain/remove test_4 --force      
[**************                                                        ] 16msCommand timeout
/domain/declare test_4 --add-domain-admin-privileges --add-domain-user-privileges
Error: Invalid command's result: {error,{system_error,"test_4"}}

Проблема: При удалении абонентов запускалась функция проверки ДВО для отчистки лимитов лицензии на домене. 

После исправления ошибки: При удалении домена целиком функция проверки больше не запускается, данная функция выполняется только при удалении абонента.

/domain/remove test1                                        
[remove] You are going to remove domain "test1". All properties, aliases, aliase's profil
         es, SS settings, bridges, routing contexts, restrictions, access-types, access-g
         roups will be removed.
Are you sure?: yes/no ?> yes
[**********************************************************************] 1s 287ms 
Declaration of domain "test1" is removed.

/domain/declare test1 --add-domain-admin-privileges --add-domain-user-privileges 
New domain test1 is declared


Исправлена сортировка медиа-файлов в блоке PlayOut

 Было: При создании в IVR-блока "Проигрывания звуковых файлов после ответа" с последовательностью из нескольких файлов:

Предполагалось проигрывания последовательности –  "Внимание", "Активировано", "Будильник поставлен на".

Получили: обратную последовательность – "Будильник поставлен на" "Активировано" "Внимание".

После исправления ошибкиФайлы указанные в блоке "Проигрывания звуковых файлов после ответа" проигрываются в правильной последовательности.

Исправлена ошибка, при которой в случае неуспешной передаче cdr-файла утилитой ecss-copycdr файл все равно будет помечен как _transfered

Было: После попытки передачи cdr-файла на внешний сервер утилитой ecss-copycdr файл будет помечен как "_transfered" вне зависимости от результата передачи. И в случае ошибки на стороне приема, (для примера mirror: Access failed: 550 Failed to change directory. (/var/ftp/cdr) ) повторную попытку передачи файлов выполнить будет невозможно.
Контроль неуспешной передачи не выполнялся.

После исправления ошибки: Файлы помечаются как "_transfered" только после успешной передачи на внешний сервер. В случае ошибки при передаче файл не помечается и есть возможность выполнить повторную передачу файлов.

Исправлен некорректный код ошибки при вызове в транк от абонента, не входящего в access_group

Было: В случае звонка от абонента А не входящего в access_group на абонента В подключенного к группе доступа получаем ответ:

480 Temporarily not availableReason: Q.850;cause=31;text="Normal unspecified"
Warning: 399 ecss "system: no access from access group all to access_group_name"

 Но если группа доступа подключена к исходящему транку, то при попытке установления соединения от абонента А не входящего в эту группу получим ответ:

404 Not FoundReason: Q.850;cause=3;text="No route to destination" 
Warning: 399 ecss "system: No trunks found" 
Данное сообщение не корректно в случае использования групп доступа/access_group.

После исправления ошибки: При попытке звонка абонента А на транк или на абонента В, входящих в access_group, получаем:

480 Temporarily not availableReason: Q.850;cause=31;text="Normal unspecified"
Warning: 399 ecss "system: no access from access group all to access_group_name"

Исправлен перевод в выводе сообщения о достигнутом лимите агентов

Было: Не был выполнен перевод уведомления о превышении количества агентов:

Исправлен перевод:

Битрикс24. Исправлена ошибка авторизации на ОС Astralinux

Было: После ввода данных в "https://<IP_add>:8802/bitrix/login" получаем ошибку "Internal server error".

Права сервиса ecss-crm-server были ограничены, что приводило к ошибке доступа к базе данных.

Решение: Запуск сервиса с повышенными привилегиями.

После исправления ошибки: Авторизация выполняется успешно.

Исправлено обновление полей last_via и user_agent после перерегистрации абонента

Было:  В случае регистрации абонента с разных ТА и разных IP add в полях "last_via" и "user_agent" информация не обновляется. И оператор видит не актуальную информацию.

После исправления ошибки: Обновление полей "last_via" и "user_agent" выполняется при каждой новой регистрации.

/domain/test_domain/sip/user/registered sip 42007@test_domain 
...
┌──────────────────┬──────┬─────────┬──────────────────────────────────────────────┬──────────────────────────────────────┐
│     Interface    │Number│ Dynamic │                Contact                       │             Registration info        │
├──────────────────┼──────┼─────────┼──────────────────────────────────────────────┼──────────────────────────────────────┤
│ 42007@test_domain│42007 │ false   │ q: 1.0; ip-set: test_set; on port: 5060;     │ registered on:                       │
│                  │      │         │  sip registered by node: sip1@ecss1          │ node: sip1@ecss1 port:               │
│                  │      │         │  gate: {gate_amqp,<<"acp.adapter.init.ex">>, │ udp 10.0.20.31:5060 last via list:   │
│                  │      │         │  <<"acp.sip.sip1.test_set.init.rk">>}        │ SIP/2.0/UDP 10.0.20.35;              │
│                  │      │         │  sip transport: udp                          │ received=10.0.20.35;rport=5060       │
│                  │      │         │  user-agent: VP-15P/2.9.5-b18 sofia-sip/1.25 │ last user agent:                     │
│                  │      │         │  <sip:42007@10.0.20.138:5060>;expires=163    │ Twinkle/1.10.2                       │
│                  │      │         │ q: 0.0; ip-set: test_set; on port: 5060; sip │                                      │
│                  │      │         │  registered by node: sip1@ecss1              │                                      │
│                  │      │         │  gate: {gate_amqp,<<"acp.adapter.init.ex">>, │                                      │
│                  │      │         │  <<"acp.sip.sip1.test_set.init.rk">>}        │                                      │
│                  │      │         │  sip transport: udp                          │                                      │
│                  │      │         │  user-agent: Twinkle/1.10.2                  │                                      │
│                  │      │         │  <sip:42007@10.0.20.35>;expires=218;q=0.000  │                                      │
└──────────────────┴──────┴─────────┴──────────────────────────────────────────────┴──────────────────────────────────────┘

/domain/test_domain/sip/user/registered sip 42007@test_domain 
...
┌──────────────────┬──────┬─────────┬──────────────────────────────────────────────┬──────────────────────────────────────┐
│     Interface    │Number│ Dynamic │                Contact                       │             Registration info        │
├──────────────────┼──────┼─────────┼──────────────────────────────────────────────┼──────────────────────────────────────┤
│ 42007@test_domain│42007 │ false   │ q: 1.0; ip-set: test_set; on port: 5060;     │ registered on:                       │
│                  │      │         │  sip registered by node: sip1@ecss1          │ node: sip1@ecss1 port:               │
│                  │      │         │  gate: {gate_amqp,<<"acp.adapter.init.ex">>, │ udp 10.0.20.31:5060 last via list:   │
│                  │      │         │  <<"acp.sip.sip1.test_set.init.rk">>}        │ SIP/2.0/UDP 10.0.20.35;              │
│                  │      │         │  sip transport: udp                          │ received=10.0.20.138;rport=5060      │
│                  │      │         │  user-agent: VP-15P/2.9.5-b18 sofia-sip/1.25 │ last user agent:                     │
│                  │      │         │  <sip:42007@10.0.20.138:5060>;expires=299    │ VP-15P/2.9.5-b18 sofia-sip/1.25      │
│                  │      │         │ q: 0.0; ip-set: test_set; on port: 5060; sip │                                      │
│                  │      │         │  registered by node: sip1@ecss1              │                                      │
│                  │      │         │  gate: {gate_amqp,<<"acp.adapter.init.ex">>, │                                      │
│                  │      │         │  <<"acp.sip.sip1.test_set.init.rk">>}        │                                      │
│                  │      │         │  sip transport: udp                          │                                      │
│                  │      │         │  user-agent: Twinkle/1.10.2                  │                                      │
│                  │      │         │  <sip:42007@10.0.20.35>;expires=197;q=0.000  │                                      │
└──────────────────┴──────┴─────────┴──────────────────────────────────────────────┴──────────────────────────────────────┘
┌─────────────┐
│ elements: 1 │
└─────────────┘
CODE


MSR. Исправлена ошибка обработки вызова с кодеком opus в SDP

Было: При попытки использования кодека "opus" в SDP звонок завершался ошибкой. 

Решение: При компиляции процедуры обработки кодека "opus" использовать другой параметр уровня оптимизации.

Стало: Звонки с использованием кодека "opus" обрабатываются успешно.

Исправлена ошибка, при которой в "Портал абонента" при активации услуги "Запуск IVR" услуга не активируется

Было:  После выключения услуги "Запуск IVR при входящем звонке (personal_ivr)" в "Портал абонента" повторно включить услугу не получалось. Выдавалась предупреждение об ошибке и услуга оставалась выключенной.

 После исправления ошибки: Включение/выключение услуги происходит корректно.

 

Устранена уязвимость с подделкой запросов на стороне сервера

Было: В настройках HTTP-сервера на порту 9990/TCP была обнаружена уязвимость, позволяющая транслировать HTTP/HTTPS запросы на другие сервисы от имени уязвимого сервера.

Решение: Для сервиса ecss-restfs поддержать белые списки в случае api/proxy.

Стало: При установке сервиса ecss-restfs появилась возможность установить белые списки:

белый список адресов прописать в файл /etc/ecss/ecss-restfs/api-proxy.conf

# -------------------------------------------------------------------
# Формат файла фильтра API (api/proxy):
#   - IP: 192.168.0.1
#   - Домен: example.com
#   - Wildcard: *.wildcard.com
#   - Комментарии: строки, начинающиеся с #
# Пример:
192.168.0.1
example.com
# комментарий
*.wildcard.com
# -------------------------------------------------------------------


Исправлена ошибка отсутствия отчётов cdr после перезапуска хоста

Было: Если в момент создания CDR файлов выполнялась перезагрузка хоста, то последующие CDR файлы вручную или по таймеру не создавались.

Причина: После перехода с MySQL на PostgresQL некорректно выполнялась инициализация таймеров запуска процедуры генерации CDR-файлов.

После исправления ошибки: После рестарта SSW CDR продолжают создаваться как по Time так и по Period без ошибок.

CallCenter. Исправлена ошибка, при которой очередь не переходит в пост-процессинг при отсутствии 180 Ringing

Было: Очередь CallCenter некорректно обрабатывает переход в статус пост-обработки вызовов, в которых ТА не отправляет 180 Ringing, в результате чего вызов не учитывается при подсчете статистики.

После исправления ошибки: Переход вызовов в статус пост-процессинг успешно выполняется для ТА не отправляющих 180 Ringing. Подсчет статистики выполняется корректно.

Устранена обнаружена уязвимость в настройках COOKIE

Было: В настройках COOKIE обнаружена уязвимость, В настройке по умолчанию, на TCP-портах 1100, 1101, 1102, 1103, 1104 запущены сервисы, -каждый из которых имеет своё значение COOKIE по умолчанию.
Если злоумышленнику станет известен cookie для одной из нод (ds/core/pa-sip/mediator/mycelim), он может подключиться к одному из портов ноды (если они не скрыты за firewall) и исполнить команду на хосте от имени пользователя ssw.

Решение: Убрать упоминание cookie в файлах. Убрать флаг -setcookie из команды запуска ноды, чтобы его нельзя было увидеть в "htop" или через "ps aux". Сделать конфигурирование cookie для каждой ноды через диалоговое окно при конфигурации "ecss-node".

Стало: При установке ecss-node появилась возможность указать уникальные COOKIE для каждой ноды:

. . .

Информация в файлах COOKIE закодирована или отсутствует:

Было:
cat /etc/ecss/default/ecss-core
NODES="core1" 
COOKIE=ecss_core_cookie

cat /etc/ecss/default/ecss-ds
NODES="ds1" 
COOKIE=ecss-ds

cat /etc/ecss/default/ecss-mediator
NODES="md1" 
COOKIE=mediator-cluster

cat /etc/ecss/default/ecss-mycelium
NODES="mycelium1" 
COOKIE=mycelium

cat /etc/ecss/default/ecss-sip
NODES="sip1" 
COOKIE=ecss_pa_sip_cookie

cat /etc/ecss/default/ecss-sorm
NODES="sorm1" 
COOKIE=ecss_sorm_cookie

Стало:

cat /etc/ecss/default/ecss-core 
NODES="core1"
cat /etc/ecss/default/ecss-ds
NODES="ds1" 
cat /etc/ecss/default/ecss-mediator
NODES="md1" 
cat /etc/ecss/default/ecss-mycelium
NODES="mycelium1" 
cat /etc/ecss/default/ecss-sip
NODES="sip1" 
cat /etc/ecss/default/ecss-sorm
NODES="sorm1" 
CODE

Флаг "-setcookie" не выводится в командах "htop", "ps aux"

Исправлена ошибка, при которой ответ на NOTIFY при включенном nat_traversal отправляется на адрес отправителя

Было: При включенном параметре "nat_traversal" ответ на "NOTIFY" отправляет на адрес, полученный в поле "contact", хотя должен отправлять на адрес, с которого пришло сообщение.

После исправления ошибки: Ответ на "NOTIFY"отправлять на адрес, с которого пришло сообщение.

Исправлена ошибка отправки NOTIFY по BLF подпискам на ТА Yealink при отработке резерва

Было: Если опция node_control выключена на sip-интерфейсе, то при отработке резерва, на оставшейся ноде не изменяется информация с какой ноды можно отправить NOTIFY, что вызова проблемы с доставкой сообщения до ТА.

Решение: Если не выставлен "node_control", при процедуре отработки резерва обновлять параметры ноды.

После исправления ошибки: Резерв подписок на ТА VP и Yealink отрабатывает корректно, уведомления поступают после возвращения первой ноды в работу.

Также проблем не наблюдается при поочередном выключении нод и переключении подписок на работающую ноду, подписки сохраняются, нотификации продолжают поступать на ТА.

WebConf. Исправлено зависание IVR-редактора

Было: При открытии или импортировании некоторых скриптов IVR происходит зависание веб конфигуратора.

Решение: Изменена процедура загрузки скрипта в редактор IVR.

Стало: Зависание веб конфигуратора больше не проявляется.

Teleconference. Исправлено несоответствие длительности разговора на странице совещания

Было: В активной комнате телеконференции происходит рассинхрон по времени длительности совещания, общий таймер  конференции сильно отстает от реального времени конференции и накапливает задержку. 

Причина: При каждом серверном обновлении таймер конференции сбрасывался к значению tc.duration, которое из-за сетевой задержки всегда немного отставало от локального счётчика каждое обновление сдвигало таймер назад, эффект накапливался.

Стало: Новое серверное значение параметра tc.duration теперь сравнивается с локальной оценкой текущего времени, а не с предыдущим серверным. Отставание таймера больше не наблюдается.

WebConf. Исправлена сортировка времени в блоке IVR TIME

Было: При выполнении сортировки в блоке IVR Time в случае наличия в таблице нескольких строчек с интервалами времени и несколькими строчками с расписанием сортировка выполнялась некорректно (чередовались интервалы времени и расписания).

Стало: Сортировка выполняется корректно — сортировка по интервалам времени и сортировка по расписаниям: