В системе ECSS-10 разработан механизм для создания пользователем произвольных метрик/статистик на основе вызывных данных (данных, на основе которых генерируются CDR, а именно mysql таблицы ecss_calls_db.tolltickets).

Каждый фильтр проверяет, если данный вызов соответствует заданным правилам rules (критериям, условиям), то в метрику с именем metric_name, переменными частями variable_part_1, variable_part_2 записывается +1 вызов. Т.е. метрика metric_name показывает сколько было вызовов, удовлетворяющих условиям описанным в правиле rules.

Список правил в фильтре работает по принципу "И", т.е. чтобы фильтр сработал все правила должны вернуть true.
Если же нам надо, чтобы в одну метрику попадали вызовы по разными критериям (по принципу "ИЛИ"), то необходимо сознать несколько фильтров, у которых параметр metric_name совпадает.

В качестве переменных частей (variable_part_1, variable_part_2), а также сравниваемого значения, можно использовать как фиксированные названия, так и макро-переменные. В этом случае вместо макро-переменной подставится значение из CDR записи вызова. Возможные значения макро-переменных:

  • $OADDR_A - номер абонента А до маршрутизации
  • $OADDR_B - номер абонента Б до маршрутизации
  • $ADDR_A - номер абонента А после маршрутизации
  • $ADDR_B - номер абонента Б после маршрутизации
  • $RELEASE_CAUSE_A - Причина завершения вызова для абонента А
  • $RELEASE_CAUSE_B - Причина завершения вызова для абонента B
  • $RELEASE_CAUSE - Причина завершения вызова (зависит от release_initiator: 0/1 - для абонента А, 2 - для абонента B)
  • $RELEASE_CAUSE_ISUP_A - ISUP причина завершения вызова для абонента А
  • $RELEASE_CAUSE_ISUP_B - ISUP причина завершения вызова для абонента B
  • $RELEASE_CAUSE_ISUP - ISUP причина завершения вызова (зависит от release_initiator: 0/1 - для абонента А, 2 - для абонента B)
  • $RELEASE_INITIATOR - Сторона-инициатор релиза: 0 - system, 1 - calling, 2 - called
  • $IFACE_A - Интерфейс абонента А
  • $IFACE_B - Интерфейс абонента B
  • $CATEGORY_A - Категория абонента А
  • $CATEGORY_B - Категория абонента B
  • $ENDPOINT_A_HOST - IP абонента А
  • $ENDPOINT_A_PORT - Port абонента А
  • $ENDPOINT_B_HOST - IP абонента B
  • $ENDPOINT_B_PORT - Port абонента B
  • $ISUP_SPC_A - SPC код абонента А
  • $ISUP_SPC_B - SPC код абонента B
  • $ISUP_DPC_A - DPC код абонента А
  • $ISUP_DPC_B - DPC код абонента B
  • $ISUP_NI_A - Тип сети абонента А
  • $ISUP_NI_B - Тип сети абонента B
  • $CIC_A - Номер CIC абонента А
  • $CIC_B - Номер CIC абонента B
  • $MODE - тип вызова(acd | callback | internal | message | mgm | normal | refer | supervise)
    • normal - обычный вызов. Вызовы, не относящиеся ни к одной из категорий, упомянутых ниже в этом списке, являются обычными и обладают mode = normal.
    • acd (automatic call distribution) - вызов, который инициирует очередь для соединения с оператором.
    • callback - обратный вызов, инициируемый одним из сервисов ДВО. Например Alarm, Callback, Custom Callback, Autoredial With Callback.
    • internal - служебный вызов, используемый некоторыми сервисами ДВО для внутренних нужд. Данные вызовы не попадают в CDR.
    • message - вызов, инициируемый сервисом CSTA SendMessage (ECMA-269 17.1.24 Send Message).
    • mgm - управление ДВО, выполняемое с телефонного аппарата.
    • refer - вызов, инициируемый SSW, в ответ на сообщение Refer (IETF draft-mahy-sip-remote-cc-05 Remote Call Control in SIP using the REFER method and the session-oriented dialog package).
    • supervise - вызов, инициируемый для присоединения к разговору супервизора КЦ.
  • $OCDPN - оригинальный номер Б
  • $RGN - redirecting number
  • $RN - redirection number
  • $TG_A - Транк-группа интерфейса абонента А
  • $TG_B - Транк-группа интерфейса абонента B
  • $CDR_GROUP - Имя CDR группы
  • $IVR_WIDGET_ID - Идентификатор widget-а, для вызовов с IVR
  • $CC_AGENT_A_ID - Идентификатор агента КЦ для абонента А
  • $CC_AGENT_B_ID - Идентификатор агента КЦ для абонента B
  • $CC_AGENT_A_GROUP - Имя группы, которой принадлежит агент КЦ для абонента А
  • $CC_AGENT_B_GROUP - Имя группы, которой принадлежит агент КЦ для абонента B
  • $CC_QUEUE - Имя очереди КЦ из которой пришел вызов
  • $RATING - Значение из IVR блока "Оценка"

Отдельная категория макропеременных - динамически формируемые списки.

  • $INVALID_NUMBER_RELEASE_CAUSES - список причин завершения вызова, отмеченных как "набор номера вне плана набора"
  • $UNSUCCESSFUL_RELEASE_CAUSES - список причин завершения вызова, отмеченных как "неуспешные" (управляется с помощью команд /domain/<DOMAIN>/tts/statistics/<CMD> unsuccessful_release_causes)

Макропеременные на основе этих динамически формируемых списков работают только с оператором "in",  и  логически оправданное применение - только с фильтрами на основе release_cause_a(b), например:

release_cause_b in $UNSUCCESSFUL_RELEASE_CAUSE
release_cause_a in $INVALID_NUMBER_RELEASE_CAUSES

Использовать эти макропеременные в качестве variable_part_1(2) нельзя.

Каждое из правил в рамках фильтра представляет собой набор из трех полей:

1.  Имя поля, на которое действует данное правило.

Возможные имена полей:

  • oaddr_a - номер абонента А до маршрутизации
  • oaddr_b - номер абонента B до маршрутизации
  • addr_a - номер абонента А после маршрутизации
  • addr_b - номер абонента B после маршрутизации
  • dialed_digits - набранные цифры
  • release_cause_a - причина завершения вызова для стороны А
  • release_cause_isup_a - ISUP причина завершения вызова для стороны А
  • release_description_a - текстовое описание причины релиза для стороны А
  • release_cause_b - причина завершения вызова для стороны B
  • release_cause_isup_b - ISUP причина завершения вызова для стороны B
  • release_description_b - текстовое описание причины релиза для стороны B
  • release_initiator - сторона-инициатор релиза: 0 - system, 1 - calling, 2 - called
  • iface_a - интерфейс абонента А
  • iface_b - интерфейс абонента B
  • display_name_a - displayName абонента А после маршрутизации
  • display_name_b - displayName абонента B после маршрутизации
  • category_a - категория абонента А
  • category_b - категория абонента B
  • endpoint_a_host - IP сигнализации абонента А
  • endpoint_a_port - порт сигнализации абонента А
  • endpoint_b_host - IP сигнализации абонента Б
  • endpoint_b_port - порт сигнализации абонента Б
  • original_called_num - оригинальный номера абонента Б в случае переадресаций
  • redirecting_num - redirecting номер
  • redirection_num - redirection номер
  • trunk_group_id_a - ID транка для стороны А
  • trunk_group_id_b - ID транка для стороны B
  • ivr_widget_id - идентификатор widget-а, для вызовов с IVR (сервиса CallBack).
  • cdr_group - имя CDR группы
  • cc_agent_a_id - Идентификатор агента КЦ для абонента А
  • cc_agent_b_id - Идентификатор агента КЦ для абонента B
  • cc_agent_a_group - Имя группы, которой принадлежит агент КЦ для абонента А
  • cc_agent_b_group - Имя группы, которой принадлежит агент КЦ для абонента B
  • cc_queue - Имя очереди КЦ из которой пришел вызов
  • rating - Значение из IVR блока "Оценка"
  • dpc - параметр DPC для вызовов через SIGTRAN
  • is_answered - флаг, отвечен ли вызов

2.  Оператор, который применяется к полю из п.1

Возможные операторы:

  • = - сравнение поля с введенным значением
  • in - проверяется, что поле соответствует одному из значений в списке в п.3
  • like - проверяет, что значение из п.3 является подстрокой поля из п.1 (доступно только для текстовых полей)
  • digitmap - проверяется, что поле удовлетворяет digitmap-у, записанному в значение из п.3 (доступно только для полей, в которых содержатся номера телефонов).
    А так же можно указать признак not, который означает что результат применения оператора будет инвертирован

3.  Значение - значение для правила.

Возможные значения:

  • фиксированное значение
  • логически оправданная макропеременная

Команды CoCon-а, позволяющие в рамках домена добавлять произвольные вызывные метрики, удалять их, просматривать текущие фильтры:

add-rule

Данная команда добавляет правило для фильтра статистики.

Путь команды:

/domain/<DOMAIN>/core/statistics/calls/filter/add-rule

Синтаксис:

add-rule <ID> <FIELD> <OPERATOR> <VALUE>

Параметры:

  • ID - уникальное в рамках домена имя фильтра;
  • FIELD - имя поля в cdr-файле;
  • OPERATOR  - сравниваемый оператор;
  •  VALUE - значение поля.

Пример 1:

admin@mycelium1@ecss1:/$ domain/biysk.local/core/statistics/calls/filter/add-rule no_answer_calls_c release_cause_isup_b = 18           
Filter rule successfully added.

[exec at: 24.07.2020 09:07:46, exec time: 329ms, nodes: core1@ecss1]

Пример 2:

admin@mycelium1@ecss1:/$ domain/biysk.local/core/statistics/calls/filter/add-rule unsuccess_out_calls_c release_cause_b = $UNSUCCESSFUL_RELEASE_CAUSES
Filter rule successfully added.

[exec at: 24.07.2020 09:13:32, exec time: 240ms, nodes: core1@ecss1]

declare

Данная команда добавляет  фильтр  для вызывной статистики.

Путь команды:

/domain/<DOMAIN>/core/statistics/calls/filter/declare

Синтаксис:

declare <ID> <METRIC_NAME> [<OPTIONS>]

Параметры:

  • ID - уникальное в рамках домена имя фильтра;
  • METRIC_NAME - метрика, описываемая фильтром;
  • Дополнительные опции:
  • VAR1 - Переменная часть 1 данной метрики (опциональный параметр);
  • VAR2 - Переменная часть 2 данной метрики (опциональный параметр);
  • DESCRIPTION - описание;
  • RULES - список правил, описывающих фильтр (опциональный параметр).

Пример 1:  Создание фильтра для счетчика успешных вызовов на номер 240500.

admin@mycelium1@ecss1:/$ domain/biysk.local/core/statistics/calls/filter/declare vip_240500_answered answered_240500 --description "вызовы с ответом на 240500" --rules addr_b = 240500              
Success: Filter 'vip_240500_answered' successfully declared.

[exec at: 27.02.2020 10:36:10, exec time: 325ms, nodes: core1@ecss1]

Пример 2: Создание фильтра для метрики по isup_cause для транка ems1.

admin@mycelium1@ecss1:/$ domain/biysk.local/core/statistics/calls/filter/declare ems1_cause ems1_cause --description "статистика по isup causes" --rules iface_b = ems1 --var1 $RELEASE_CAUSE_ISUP          
Success: Filter 'ems1_cause' successfully declared.

[exec at: 27.02.2020 10:42:18, exec time: 308ms, nodes: core1@ecss1]

info

Данная команда показывает информацию по фильтрам вызывной статистики.

Путь команды:

domain/<DOMAIN>/core/statistics/calls/filter/info

Синтаксис:

info <ID>

Параметры:

  • ID - уникальное имя фильтра в рамках домена (опционально, без указания ID выводятся все)

Пример:

admin@mycelium1@ecss1:/$ domain/biysk.local/core/statistics/calls/filter/info   
┌────────────────────────────────┬────────────────────────────────────────────────────┬────────────────────────────────┬─────────────────────┬───────────────┬────────────────────────────────────────────────────────────────────────┐
│          Filter name           │                       Rules                        │          Metric name           │   Variable part 1   │Variable part 2│                              Description                               │
├────────────────────────────────┼────────────────────────────────────────────────────┼────────────────────────────────┼─────────────────────┼───────────────┼────────────────────────────────────────────────────────────────────────┤
│busy_calls_c                    │release_cause_a in [bPtyBusyUDUB, bPtyBusyNDUB]     │busy_calls_c                    │                     │               │Количество вызовов на занятых абонентов за период времени               │
│empty_a_number_calls_c          │oaddr_a = undefined                                 │empty_a_number_calls_c          │                     │               │Количество поступивших в систему вызовов без номера вызывающего абонента│
│filter                          │release_cause_a != normal                           │metric                          │var1                 │var2           │                                                                        │
│filter1                         │is_answered = true                                  │success_calls_c                 │                     │               │"Просто с ответом"                                                      │
│filter2                         │release_cause_isup_b = 16                           │success_calls_c                 │$RELEASE_CAUSE_ISUP_B│               │"isup коз Б = 16"                                                       │
│filter3                         │release_cause_isup_b != $UNSUCCESSFUL_RELEASE_CAUSES│success_calls_c                 │                     │               │"Успешные козы"                                                         │
│no_answer_calls_c               │release_cause_isup_b = 18                           │no_answer_calls_c               │                     │               │Количество вызовов без ответа вызываемого абонента за период времени    │
│                                │is_answered = false                                 │                                │                     │               │                                                                        │
│released_calls                  │                                                    │released_calls                  │$RELEASE_CAUSE_A     │               │Заверешенные вызовы                                                     │
│success_calls_c                 │is_answered = true                                  │success_calls_c                 │                     │               │Количество успешных вызовов за период времени                           │
│total_invalid_number_calls_c    │release_cause_a in $INVALID_NUMBER_RELEASE_CAUSES   │total_invalid_number_calls_c    │                     │               │Количество раз набора номера вне плана набора                           │
│total_trunk_in_calls_c          │trunk_group_id_a != undefined                       │total_trunk_in_calls_c          │                     │               │Количество попыток внешних входящих вызовов за период времени           │
│total_unsuccess_trunk_in_calls_c│release_cause_a in $UNSUCCESSFUL_RELEASE_CAUSES     │total_unsuccess_trunk_in_calls_c│                     │               │Общее количество неуспешных входящих вызовов                            │
│                                │trunk_group_id_a != undefined                       │                                │                     │               │                                                                        │
│unsuccess_out_calls_c           │release_cause_b = $UNSUCCESSFUL_RELEASE_CAUSES      │unsuccess_out_calls_c           │                     │               │Общее количество неуспешных исходящих вызовов за период                 │
│                                │release_cause_a in $UNSUCCESSFUL_RELEASE_CAUSES     │                                │                     │               │                                                                        │
└────────────────────────────────┴────────────────────────────────────────────────────┴────────────────────────────────┴─────────────────────┴───────────────┴────────────────────────────────────────────────────────────────────────┘

[exec at: 24.07.2020 09:19:00, exec time: 14ms, nodes: core1@ecss1]

remove

Команда удаляет фильтр для вызывной статистики.

Путь команды:

/domain/<DOMAIN>/core/statistics/calls/filter/remove

Синтаксис:

remove <ID> [<OPTIONS>]

Параметры:

  • ID - уникальное имя фильтра в рамках домена

Опции:

--purge_statistics - удалить статистику, связанную с фильтром (по умолчанию значение false)

Пример:

admin@mycelium1@ecss1:/$ domain/biysk.local/core/statistics/calls/filter/remove filter3 --purge_statistics              
Filter 'filter3' successfully removed

[exec at: 24.07.2020 09:22:41, exec time: 284ms, nodes: core1@ecss1]

remove-rule

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

Путь команды:

/domain/<DOMAIN>/core/statistics/calls/filter/remove-rule

Синтаксис:
remove-rule <ID> <NUMBER>

Параметры:

  • ID - уникальное в рамках домена имя фильтра;
  • NUMBER - номер правила для фильтра.

Пример:

admin@mycelium1@ecss1:/$ domain/biysk.local/core/statistics/calls/filter/remove-rule vip_240500_answered 1
Filter rule 'is_answered = true' successfully removed.

[exec at: 28.02.2020 14:43:48, exec time: 342ms, nodes: core1@ecss1]

set

Команда позволяет изменить одну из опций существующего фильтра.

Путь команды:

domain/<DOMAIN>/core/statistics/calls/filter/set

Синтаксис:

set <ID> <OPTION> <VALUE>

Параметры:

  • ID - уникальное в рамках домена имя фильтра;
  • OPTION - одна из опций фильтра(description, variable_part_1, variable_part_2);
  • VALUE - значение опции.

Пример:

admin@ds1@ecss1:/$ domain/biysk.local/core/statistics/calls/filter/set vip_240500_answered description                              
New description:    
admin@ds1@ecss1:/$ domain/biysk.local/core/statistics/calls/filter/set vip_240500_answered description "Вызовы на 240500 отвеченные"
Filter option successfully changed.

[exec at: 02.03.2020 15:20:11, exec time: 257ms, nodes: core1@ecss1]