Tariscope и высокая точность счетов за телекоммуникационные услуги
Эта статья в первую очередь предназначена для операторов связи, использующих или планирующих использовать биллинговую систему Tariscope Provider (SoftPI).
Счета за телекоммуникационные услуги часто требуют высокой точности, при этом 3 или 4 знака после запятой используют внутренне для расчета тарифов и стоимости услуг, чтобы обеспечить точность перед округлением окончательной суммы счета до двух знаков после запятой перед предоставлением его клиенту. Использование большего числа знаков после запятой (например, 4) минимизирует ошибки округления в сложных вычислениях, обеспечивая справедливую плату, даже если клиент видит в своем счете только копейки.
Почему важно больше 2 знаков после запятой в счетах за телекоммуникационные услуги?
Точность расчета: При взимании платы за звонки (например, 0,0857 доллара США в минуту) или передачи данных (например, 0,0018 доллара США за мегабайт), использование четырех знаков после запятой сохраняет точность промежуточного итога перед применением к использованию в счетах.
Минимизация ошибок: Слишком раннее округление (например, до двух или трех знаков после запятой) может привести к существенным ошибкам в счетах для пользователей с большим объемом звонков или часто звонящих.
Соответствие нормативным требованиям: В некоторых странах стандарты качества требуют от систем выставления счетов сводить к минимуму количество ошибок.
По сути, 3 или 4 знака после запятой в первую очередь в стоимости тарифа на звонки обеспечивает необходимую детализацию для того, чтобы выставление счетов за телекоммуникационные услуги были точными и справедливыми, даже если окончательный счет для клиента содержит меньше цифр (обычно 2 знака после запятой).
Биллинговая система Tariscope Provider позволяет задать индивидуальную точность расчета стоимости тарифа. Это сдается в параметрах тарифа. Пример этого показан на рисунке 1.

Рисунок 1
По всей видимости, в параметрах конкретного тарифа есть позиция Символов после запятой. По умолчанию она содержит значение: 2, которое можно изменить на любое другое.
Как правило, для задания стоимости услуг достаточно 2 знаков после запятой. И именно с такой точностью будет рассчитываться стоимость услуги, если в качестве тарифа для услуги выбрать значение Фиксированная сумма (рисунок 2).

Рисунок 2
Иногда у операторов связи возникает необходимость рассчитывать стоимость услуг с большей точностью, чем 2 знака после запятой. В этом случае у Tariscope существует два варианта для вычисления с 3 или более знаками после запятой.
Можно создать тариф-услугу (меню -> Дополнительные опции -> Тариф-услуга, для которой в качестве тарифа можно задать индивидуальную точность расчета (рисунок 1).) После этого на странице Услуги следует создать новую услугу для которой в списке Тариф выбрать наименование тариф-услуги, созданной на предыдущем шаге.
В том случае, когда оператору связи нужно, чтобы все услуги, для которых используется значение тарифа Фиксированная сумма, рассчитывались с точностью, например 4 знака после запятой, нужно внести маленькую правку в базе данных Tariscope.
Эту операцию должен выполнять либо администратор Tariscope, либо администратор Microsoft SQL Server.
Для этого откройте SQL Server Management Studio (SSMS). Откройте в ней базу данных Tariscope и найдите функцию dbo.ab_gettarifstable, как показано на рисунке 3.

Рисунок 3
Выберите эту функцию и щелкните правой кнопкой мыши. Появится меню, в котором выберите: Modify.
Откроется вкладка с содержанием этой функции.
В строке 91 измените значение 2 (округление до 2 знаков) на 4 (если требуется точность до 4 знаков после запятой). Пример этого показан на рисунке 4.

Рисунок 4
После этого на панели инструментов SSMS щелкните по кнопке Execute.
Должно появиться сообщение: Commands completed successfully. После этого остается только проверить точность начисления услуги.
Взаимодействие Tariscope с 3CX v20
Эта статья предназначена для пользователей лицензий на системы Tariscope Enterprise или Tariscope Provider с функцией ограничения, которая используется для управления IP АТС 3CX v20.
Начиная с версии Tariscope 4.6.7 был разработан новый сценарий для приложения Tariscope Observer, который передает команды на ограничение абонентов или снятие этих ограничений отдельному приложению TSconnector. Это приложение устанавливается на сервере с 3CX v20, и уже оно непосредственно отправляет команды на эту АТС. Есть отдельные приложения для Windows и Linux, зависимо от того, на какой операционной системе работает 3CX. Схема взаимодействия биллинговой системы (системы учета вызовов) Tariscope с 3CX показана на рисунке 1.

Рисунок 1
Все настройки системы ограничения в Tariscope выполняются по-прежнему за исключением выбора сценария и установки приложения TSconnector.
Загрузите с сайта Tariscope соответствующее приложение:
для Windows (tsconnector.zip) или Linux (tsconnector.tar.gz), в зависимости от того на какой операционной системе у вас установлен 3CX.
Для работы приложения TSconnector требуется конфигурационный файл от 3CX: 3CXPhoneSystem.ini
В Windows этот файл должен находиться в папке: C:\ProgramData\3CX\Bin
В Linux этот файл должен находиться в каталоге: /var/lib/3cxpbx/Bin/
Также необходимо предоставить доступ с других компьютеров к серверу PostgreSQL, на котором установлена база данных 3CX. Tariscope и TSconnector не работают с базой данных 3CX, а используют свою базу данных.
Для этого следует внести изменения в файл pg_hba.conf.
В Windows этот файл должен находиться в папке: C:\ProgramData\3CX\Data\DB
В Linux этот файл должен находиться в каталоге: var/lib/postgresql/<версия>/main/
Добавьте новые строки, чтобы разрешить доступ с других IP-адресов.
Например, для разрешения соединений с любого IP-адреса:
host all all 0.0.0.0/0 password
Для разрешения по конкретному IP адресу, например, 192.168.1.100, где установлен Tariscope: host all all 192.168.1.100/32 password
Установка приложения под Windows
Распакуйте архив tsconnector.zip в какую-нибудь папку, например, в папке: C:\TSconnector
Скопируйте файл 3CXPhoneSystem.ini в эту папку
TSconnector выполняет действия по установке или снятию ограничений в зависимости от того, какие команды от Tariscope он получит, с периодом, который задается в файле config.json в секундах. По умолчанию этот период составляет 30 секунд. При необходимости откройте этот файл и измените период.
Откройте в Windows Командную строку с правами администратора.
Создайте службу Windows следующей командой:
sc create TSconnector binpath= [путь в файл tsconnector.exe]
Например, если вы распаковали архив в папку C:\TSconnector, то эта команда должна выглядеть следующим образом:
sc create TSconnector binpath= C:\TSconnector\ tsconnector.exe
Запустите эту службу следующей командой:
sc start TSconnector
В случае успешного запуска службы в этой папке будет создан файл журнала работы приложения TS_restrictions.log. Проверьте его содержимое, что оно не содержит ошибок.
Установка приложения под Linux
Распакуйте архив tsconnector.tar.gz в каком-нибудь каталоге, например: /home/softpi/TSconnector (softpi здесь имя пользователя, с которым логинились в систему).
Скопируйте в этот каталог файл 3CXPhoneSystem.ini
Создайте файл unit для Linux, например, с именем ts-connector.service
Этот файл должен содержать следующие строки:
[Unit]
Description=Tariscope restrictions
[Service]
Type=notify
ExecStart=/home/softpi/TSconnector/TSconnector
[Install]
WantedBy=multi-user.target
Комментарии к содержимому файла:
Description – может быть случайным.
ExecStart – путь к файлу TSconnector из архива.
Скопируйте этот файл в каталог /etc/system/system
sudo cp /home/softpi/TSconnector/ts-connector.service /etc/system/system
Перезагрузите Linux. Следует учитывать, что будут перегружаться все службы, в том числе службы 3CX. Поэтому выберите нужное время.
sudo systemctl daemon-reload
Проверьте состояние демона ts-connector (если вы создадите unit файл для службы с другим именем, используйте это имя и в следующей команде):
sudo systemctl status ts-connector
Если служба неактивна, запустите ее.
sudo systemctl start ts-connector
Если все выполнено правильно, то должен быть статус "active". В этом случае будет создан журнал службы. Журнал работы службы TS_restrictions.log будет находиться в каталоге, где распакован архив.
Настройка сценария Tariscope
В Tariscope выберите Сбор данных/Observer -> Управление сбором данных.
На странице Сбор данных/Observer выберите строку Observer, работающую с 3CX v20.
На панели инструментов щелкните по иконке Изменить и выберите Сценарии Observer.
В списке Событие выберите требуемое, например, Изменение класса абонента, соответствующее условиям лицензии на Tariscope.
В списке Сценарий выберите: setcos-subscriber-3cx-v20.cs
Щелкните по иконке Изменить. Появится окно Редактирования, в котором будет отображен текст сценария.
Найдите там следующие строки и внесите в них соответствующие изменения:
const string DBHost = "127.0.0.1"; //IP address of PostgreSQL server
const string DBPort = "5432"; //IP port of PostgreSQL server
const string MasterDBUser = "phonesystem"; //Database username
const string MasterDBPassword = "pLvjPg8IKUo"; //Database username password
Для константы DBhostукажите IP-адрес, где установлен 3CX.
Для последующих 3-х констант сценария нужно заменить значения а используемые в файле 3CXPhoneSystem.ini в разделе CfgServerProfile.
Сохраните изменения в сценарии.
После этого, если все остальные настройки системы ограничения в Tariscope сделаны, можно запускать Observer.
Дополнительный автоматический анализ вызовов
В ряде случаев получения обработанной в Tariscope информации о вызовах недостаточно и требуется дополнительный анализ данных, который хотелось бы, чтобы Tariscope выполнял автоматически. К примеру, служба безопасности компании хотела бы оперативно знать обо всех вызовах, выполненных сотрудниками из телефонов ведомственной АТС к пожарной охране, полиции или скорой помощи. Другой пример, когда желательно знать обо всех исходящих звонках, стоимость которых выше определенной величины, или о звонках на (с) телефоны из черного списка. Можно придумать еще ряд случаев, когда необходимо оперативно получать сообщения об определенных вызовах.
Конечно, будет не лучшим решением подобных задач посадить за монитор с Tariscope сотрудника, отслеживающего такие вызовы. Но этого делать не надо, если использовать все возможности Tariscope. Tariscope можно настроить так, что он будет по окончании каждого вызова автоматически выполнять дополнительный анализ данных вызова на предмет соответствия предварительно заданным условиям, например, как мы упоминали ранее, выполнение каким-либо сотрудником вызова на какие-либо конкретные телефонные номера.
Особый случай, требующий оперативного отслеживания, это обнаружение телефонного фрода. Под телефонным фродом подразумевается определенный тип мошенничества, когда разными средствами выполняются несанкционированные вызовы, как правило, международные, за счет компании. В 2023 году по данным международной ассоциации CFCA (Communications Fraud Control Association) потери от телефонного фрода составляют около 38,95 млрд. рублей. долларов США[1].
Выявление фрода существенно сложнее, чем обнаружение, например, вызовов на конкретные телефонные номера, так как заранее неизвестно, на какие номера выполняются вызовы, когда, какой продолжительности. Для обнаружения фрода, как правило, рекомендуется использовать специальные системы, в большинстве случаев работа которых основана на сравнении конкретного вызова с моделью поведения конкретного абонента, группы абонентов и в целом компании. Tariscope имеет такую подсистему обнаружения фрода, но эта подсистема не входит в базовую лицензию на Tariscope и должна приобретаться дополнительно к базовой лицензии.
Вместе с тем, даже не купив такую подсистему, Tariscope дает возможность обнаруживать подозрительные вызовы, которые могут быть фродом. В этой статье мы как раз рассмотрим, как это сделать.
Во-первых,будем рассматривать только исходящие международные звонки стоимостью сверх заданной величины, так как фрод значительно реже используется для междугородных и тем более городских вызовов.
Во-вторых,из указанных вызовов в первом условии наиболее подозрительными вызовами с признаками фрода следует считать выполняемые в нерабочее время в выходные и праздничные дни.
В-третьих, можно оценивать страны, на которые выполнялся вызов. Считается, что больше всего звонков, являющихся фродом, выполняется в страны Карибского бассейна, а также Азии и Африки.
И, наконец, можно оценивать вызовы на принадлежность фроду от абонентов, данные по которым отсутствуют в базе данных системы Tariscope.
Теперь рассмотрим, каким образом поиск вызовов с частью вышеуказанных признаков можно реализовать в системе Tariscope.
В настройках службы Tariscope Observer можно выполнять сценарии при наступлении определенных событий. Для этого в ветке меню Сбор данных/Observer системы Tariscope следует выбрать пункт меню Управление сбором данных. Откроется страница настройки Сбор данных/Observer, пример которой приведен на рисунке 1.

Рисунок 1
Выберите строку из необходимых Observer, если у вас их несколько, и щелкните на панели инструментов по иконке Изменить. В появившемся меню выберите Сценарии Observer. В результате откроется страница Сценарии Observer, пример которой показан на рисунке 2.

Рисунок 2
Это окно содержит список событий, при пришествии которых Tariscope может запустить связанный с этим событием сценарий.
Возможна реакция на следующие события:
- Подключение источника данных.
- Отключение источника данных.
- Изменение класса абонента.
- Изменение класса группы.
- Периодическое действие.
- Новый вызов обработан.
- Ошибка подключения базы данных.
Для анализа вызовов на предмет принадлежности их к фроду в списке Событие следует выбрать событие Новый вызов проработан, а в списке Сценарии выбрать файл, содержащий сценарий анализа фрода. Поставляемые с Tariscope сценарии по умолчанию устанавливаются в папку C:\ProgramData\Tariscope\ObserverScripts
После выбора необходимого сценария сохраните настройки (рисунок 2).
Сценарии должны быть написаны на языке C#. Среди сценариев, поставляемых с Tariscope, есть файл fraud.cs. Он позволяет отправлять сообщения либо на заданный в сценарии электронный адрес или на электронный адрес, заданный в настройках Tariscope, о исходящих международных звонках продолжительностью более 150 секунд, выполненных в промежуток времени: с 19:00 до 08:00. Эти параметры пользователь Tariscope может изменить, удалить или добавить другие.
Для написания новых сценариев или редактирования существующих желательно иметь представление о программировании на языке C#, а также о создании запросов SQL.
Если вы не уверены в своих силах, обратитесь в службу технической поддержки компании SoftPI, так как неправильно написанный сценарий может нанести ущерб системе Tariscope.
Написание сценариев силами компании SoftPI не входит в услуги гарантийной или послегарантийной поддержки и производится за отдельную оплату.
Структура всех сценариев, используемых в Tariscope, одинакова. Каждый сценарий реализует интерфейс IScript.
В этом интерфейсе есть два метода:
1. Метод Init. Этот метод вызывается один раз при запуске сценария, когда служба Tariscope Observer компилирует и инициализирует этот сценарий.
2. Метод Main. В нем выполняются операции, связанные с конкретным событием. В метод Main передается объект Parameters.
3. При инициализации сценария в него передается интерфейс IScriptHost, позволяющий сценарию выполнять некоторые операции. К примеру, отправить сообщение по электронной почте.
Листинг сценария fraud.cs приведен ниже:
using Microsoft.Data.SqlClient;
using SoftPI.Tariscope.WebAdministration.Observer.Scripting.Interfaces;
using SoftPI.Tariscope.WebAdministration.Observer.Scripting.Models;
using System;
using SoftPi.Tariscope.DAL;
public class FraudScanner : IScript
{
private IScriptHost Host;
private bool NeedFinish = false;
//
//
********************************************************************************************
//
private int MAX_CALL_DURATION_S = 150;
private int CALLTYPE_INTERNATIONAL = 5;
private TimeSpan BEGINNING_OF_WORK = TimeSpan.Parse("08:00:00");
private TimeSpan END_OF_WORK = TimeSpan.Parse("19:00:00");
//
//
*********************************************************************************************
//
public void Init(IScriptHost host)
{
this.Host = host;
host.Close += OnClose;
NeedFinish = false;
}
private void OnClose(ref bool Cancel)
{
return;
}
public void Main(object Parameters)
{
NewCallActionParameters actionParameters = (NewCallActionParameters)Parameters;
try
{
this.Host.AddEvent("New call processing, ID= " + actionParameters.Id);
using (SqlConnection cn = new SqlConnection(this.Host.DatabaseConnectionString))
{
cn.Open();
CallItems CallItems = CallItems.Instance(cn);
SqlCommand cmd = CallItems.GetCommand("SELECT ID, Originator, Dialnumber,
CallDateTime, CallSeconds, CallType FROM viCalls WHERE ID=@callid");
cmd.Parameters.AddWithValue("@callid", actionParameters.Id);
using (SqlDataReader rs = cmd.ExecuteReader())
{
if (rs.Read())
{
if (rs.GetInt16(5) == CALLTYPE_INTERNATIONAL &&
rs.GetInt32(4) > MAX_CALL_DURATION_S &&
(((rs.GetDateTime(3).TimeOfDay > END_OF_WORK ||
rs.GetDateTime(3).TimeOfDay < BEGINNING_OF_WORK)) ||
(rs.GetDateTime(3).DayOfWeek == DayOfWeek.Sunday ||
rs.GetDateTime(3).DayOfWeek == DayOfWeek.Saturday)))
this.Host.SendMail("", "Fraud Detection system", "Suspicious call detected. ID=" + actionParameters.Id + " CallDateTime=" + rs.GetDateTime(3) + " Call duration=" + rs.GetInt32(4));
}
}
}
}
catch (Exception ex)
{
this.Host.AddEvent("Error running script: " + ex.ToString());
}
}
}
Для человека далекого от программирования приведенный выше код сценария может показаться совершенно непонятным. На самом деле, это не совсем так. В тексте сценария красным цветом выделены строки кода, в которых при необходимости возможно вносить изменения.
Рассмотрим первые четыре выделенных строки:
private int MAX_CALL_DURATION_S = 150;
private int CALLTYPE_INTERNATIONAL = 5;
private TimeSpan BEGINNING_OF_WORK = TimeSpan.Parse("08:00:00");
private TimeSpan END_OF_WORK = TimeSpan.Parse("19:00:00");
Эти строки объявляют четыре переменных:
- MAX_CALL_DURATION_S – это продолжительность разговора, равная 150 секунд, то есть 2 минуты 30 секунд. Вы можете изменить это значение на любое целое положительное число или 0.
- CALLTYPE_INTERNATIONAL – это тип вызова для международных разговоров, применяемых в Tariscope. Его значение равно 5. Если вы собираетесь рассматривать только международные вызовы, то не изменяйте это значение. Если вас интересуют другие вызовы, то определить их значение можно из документа Tariscope 4.6. Каталог баз данных.
- BEGINNING_OF_WORK – это время начала рабочего дня, которое здесь равно 8 часам утра. Вы можете изменить это значение на любое другое реальное значение времени начала рабочего дня
- END_OF_WORK – это время окончания рабочего дня, которое здесь равно 7 часов вечера. Вы можете изменить это значение на любое другое реальное значение времени истечения рабочего дня.
Следующая выделенная строка:
SELECT ID, Originator, Dialnumber, CallDateTime, CallSeconds, CallType FROM viCalls WHERE ID=@callid
Это SQL запрос к представлению viCalls на получение из него для текущего вызова, заданного условием ID=@callid , где @callid является параметром, содержащим идентификатор последнего вызова, который был обработан в Observer. Этот SQL запрос позволяет получить следующие поля:
- ID. Идентификатор записи.
- Originator. Телефонный номер, с которого был исполнен вызов.
- Dialnumber. Телефонный номер, на который был исполнен вызов.
- CallDateTime. Дата и время выполнения вызова.
- CallSeconds.Продолжительность вызова в секундах.
- CallType. Тип вызова.
При необходимости можно получить и другие параметры вызова из списка полей представления viCall.
Следующая выделенная часть сценария выполняет анализ данных на соответствие заданным условиям:
(rs.GetInt16(5) == CALLTYPE_INTERNATIONAL &&
rs.GetInt32(4) > MAX_CALL_DURATION_S &&
(((rs.GetDateTime(3).TimeOfDay > END_OF_WORK ||
rs.GetDateTime(3).TimeOfDay < BEGINNING_OF_WORK)) ||
(rs.GetDateTime(3).DayOfWeek == DayOfWeek.Sunday ||
rs.GetDateTime(3).DayOfWeek == DayOfWeek.Saturday)))
Этот код используется в операторе if в качестве условия соответствия данных. Он состоит из следующих условий:
rs.GetInt16(5) = CALLTYPE_INTERNATIONAL
Указывается значение 5-го поля запроса (поле CallType в SQL запросе). Отсчет полей начинается с 0. Значение поля сравнивается со значением переменной CALLTYPE_INTERNATIONAL. То есть это условие позволяет выявить, является ли этот вызов международным.
rs.GetInt32(4) > MAX_CALL_DURATION_S
Берется значение 4-го поля SQL запроса (поле CallSeconds). Отсчет значений начинается с 0. Значение поля сравнивается со значением переменной MAX_CALL_DURATION_S.
(rs.GetDateTime(3).TimeOfDay > END_OF_WORK ||
rs.GetDateTime(3).TimeOfDay < BEGINNING_OF_WORK))
В этом условии используется значение 3-го поля запроса, то есть поля CallDateTime. Проверяется, выпадает ли время вызова на промежуток времени между окончанием рабочего дня и началом следующего рабочего дня.
(rs.GetDateTime(3).DayOfWeek == DayOfWeek.Sunday ||
rs.GetDateTime(3).DayOfWeek == DayOfWeek.Saturday)
Это альтернативное условие времени вызова, которому должны соответствовать все международные вызовы продолжительностью более 150 секунд, выполненные в субботу или воскресенье.
Используя логические операторы && и || можно по-разному рассматривать соответствие вызова требуемым условиям.
Если результат проверки есть истина, то выполняется команда по отправке по электронной почте сообщения об этом вызове.
this.Host.SendMail("", "Fraud Detection system", "Suspicious call detected. ID=" + actionParameters.Id + " CallDateTime=" + rs.GetDateTime(3) + " Call duration=" + rs.GetInt32(4));
this.Host.SendMail() – это функция, с помощью которой отправляется сообщение по электронной почте. Эта функция имеет три параметра, которые находятся внутри скобок и разделяются запятыми:
- Первый параметр задает электронный адрес, куда отправляется сообщение. Если этот параметр пуст (""), как указано в приведенном выше выражении, то используется электронный адрес, указанный в настройке Tariscope Сообщение&почта. Если вы хотите отправлять сообщение на другой адрес, чем указанный на этой странице настройки или вы не настраивали этот параметр в Tariscope, то в кавычках следует задать этот адрес, например, "Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.".
- Вторым параметром является тема электронного письма. В этом сценарии таким параметром является "Fraud Detection System". При желании можно заменить этот параметр, например, на "Получен вызов с признаками фрода" или какой-либо другой.
- Третий параметр – это содержимое текста сообщения. В данном сценарии это:
"Suspicious call detected. ID=" + actionParameters.Id + " CallDateTime=" + rs.GetDateTime(3) + " Call duration=" + rs.GetInt32(4) .
Рассмотрим более подробно эту строчку.
Часть строки "Suspicious call detected. ID=" можно заменить, например, на следующее:
“Обнаружен подозрительный вызов с идентификатором =” . Значение этого идентификатора находится в actionParameters.ID.
Следующая часть строки " CallDateTime=" + rs.GetDateTime(3) этого вызова. Возможно, будет лучше, если эту часть строки заменить на следующую:
“ Дата и время вызова: “ & rs.GetDateTime(3)
И, напоследок, выражение + "Call duration=" + rs.GetInt32(4) содержать длительность вызова. Также, для удобства восприятия информации, можно заменить эту часть строки:
“ Продолжительность вызова:” & rs.GetInt32(4)
В строке SQL запроса, который рассматривался выше, содержится запрос еще двух параметров: Originator и Dialnumber. Соответственно, их значение также возможно выводить в теле электронного письма. Для этого следует добавить следующую строчку:
“ Вызов выполнялся из номера ” & rs.GetInt32(1) “ на номер “ & rs.GetImt32(2)
Если модифицировать SQL запрос, то в сообщении можно выводить информацию об абоненте, из номера которого выполнялся вызов, наименование населенного пункта, куда выполнялся вызов и другую информацию.
Private decimal MAX_CALL_COST = 10.0
Теперь необходимо добавить в SQL запрос получение информации о стоимости вызова. Для этого следует воспользоваться описанием представления viCalls в документе "Каталог баз данных Tariscope 4.x", чтобы найти требуемое поле. Это поле Cost. Тогда запрос должен выглядеть следующим образом:
SELECT ID, Originator, Dialnumber, CallDateTime, CallSeconds, CallType, Cost FROM viCalls WHERE ID=@callid
Если нас не интересует продолжительность вызова, то из запроса можно исключить поле CallSeconds. И теперь, получив с помощью этого SQL запроса данные по вызову , следует их проанализировать на соответствие интересующих нас условий: международный вызов со стоимостью более 10 гривен. Для этого строку, где проводится анализ, следует записать следующим образом:
(rs.GetInt16(5) = CALLTYPE_INTERNATIONAL &&
rs.GetInt32(4)> MAX_CALL_DURATION_S &&
rs.GetDecimal(6) > 10.0) &&
(((rs.GetDateTime(3).TimeOfDay > END_OF_WORK ||
rs.GetDateTime(3).TimeOfDay < BEGINNING_OF_WORK)) ||
(rs.GetDateTime(3).DayOfWeek == DayOfWeek.Sunday ||
rs.GetDateTime(3).DayOfWeek == DayOfWeek.Saturday))
Эта строка предполагает, что запрос поля CallSeconds остался. В случае удаления в строке анализа данных изменится значение в скобках, указывающих на номер поля в запросе, начиная с 0.
Аналогичным образом можно продолжать усложнять условия для выявления вызовов с признаками фрода.
При использовании сценариев для дополнительной обработки данных вызовов всегда следует помнить, что это использование повышает нагрузку на сервер и может привести к замедлению обработки.
Помимо этого, если данные о вызовах поступают в Tariscope с задержкой, например при получении их через FTP сервер, то и сообщения о подозрительных вызовах также будут сформированы с задержкой.
Если приведенной выше информации вам недостаточно для создания необходимого сценария, обратитесь в службу поддержки SoftPI.
Источники:
Обработка SMDR от Mitel MiVoice Business в Tariscope
Обработка SMDR данных от Mitel MiVoice Business в системе учета телефонных вызовов Tariscope выполнена для следующих настроек параметров SMDR в АТС этого типа:
| DASS II - Call Charge Information Provided: | No |
| Extended Digit Length: | No |
| MCD - Report Transfers: | No |
| Network Format: | Yes |
| Report Account Codes: | No |
| Report Incoming Calls: | Yes |
| Report Internal Calls: | Yes |
| Report Meter Pulses: | No |
| Report Outgoing Calls: | Yes |
| SMDR Meter Unit Per Station: | Yes |
| SMDR Record Transfer: | No |
| System Identification: | |
| Time Change Reporting: | No |
| Twenty-four Hour Time Reporting: | No |
| ANI/DNIS/ISDN/CLASS Number Delivery Reporting: | No |
| SMDR Real Time Reporting: | No |
| OLI Node ID Format for Incoming Trunk Calls: | No |
| Extended Time To Answer: | Yes |
| SMDR File Transfer: | Yes |
| Standardized Network OLI: | No |
| Standardized Call ID Format: | No |
| Suite Services Reporting: | No |
| Report Internal Unanswered Calls: | No |
| SMDR Extended Reporting Level 1: | No |
| Report Attendant Name: | No |
| Account Code Reporting for Internal Calls: | No |
| Tag Call Reporting: | No |
| Tag Call Identifier: | |
| Path Reporting for Internal ACD2 Calls: | No |
| Number of destination address digits to mask: | 0 |
| SMDR Extended Reporting Level 2: | No |
| Two B-Channel Transfer Reporting: | No |
| External Hot Desk User Reporting: | No |
| Suppress Initial SMDR Record with Account Code Entered Timer | 5 |
| Location Information Reporting: | No |
| SMDR Port Enabled: | Yes |
Рекомендуем именно таким образом настраивать АТС Mitel MiVoice Business.
Mitel MiVoice Business (3300) использует передачу данных из IP порта 1752. Со стороны Tariscope для получения данных SMDR следует использовать Tariscope Observer, у которого в качестве источника данных используется TCP клиент.
Особенностью парсера Mitel 3300 (MiVoice Business) является то, что в поле Код проекта для вызовов с использованием трансфера заносится следующая информация: для первого этапа трансфера - номер, на который передан вызов, а для второго этапа трансфера - номер, с которого получен вызов. Пример этого можно увидеть на рисунке ниже.

На этом рисунке отображены этапы вызова с использованием трансфера. Если в представлении вызовов выбрать строку, где есть один из этапов выполнения трансфера и щелкнуть на панели инструментов по иконке Показать связанные записи, то представление отобразит все этапы этого вызова, как показано на рисунке выше.
Работа со шлюзами SBC 1000 и SBC 2000 в Tariscope
К биллинговой системе Tariscope добавлена возможность сбора и обработки CDR информации от шлюзов SBC 1000 и SBC 2000 от компании Ribbon Communications.
Эти шлюзы передают данные CDR только на Radius accounting сервер. Поэтому в службе Tariscope Observer был добавлен новый источник данных – Radius accounting сервер. Пакеты данных, передаваемые на Radius accounting сервер, бывают двух типов: Стартовые (Start) и Стоповые (Stop). Обобщенная информация о выполненном вызове содержится только в Стоповых пакетах, поэтому в Tariscope производится только их обработка. Как Стартовые, так и Стоповые пакеты в SBC формируются для каждого участника вызова. Обрабатывается только один стоповый пакет, чтобы избежать дублирования данных в системе Tariscope. Далее мы приведем особенности настройки Tariscope, связанных именно шлюзами SBC 1000 и SBC 2000. В первую очередь нужно создать соответствующую телефонную систему в Tariscope. Для этого в меню выберите: Узлы связи → узел → Устройства → Управление устройствами.
Появится страница Устройства, пример которой приведен на рисунке 1.

Рисунок 1
Щелкните по иконке Добавить на панели инструментов. В появившемся окне Новое устройство введите любое название. Рекомендуется вводить название, соответствующее телефонной системе, например SBC 1000. Щелкните Сохранить. Появится страница Редактирование, показанная на рисунке 2.

Рисунок 2
И, наконец, нужно создать службу Tariscope Observer, которая будет получать CDR данные от SBC шлюзов и выполнять обработку этих данных.
Выберите в меню Сбор данных/Observer → Управление сбором данных. Отобразится соответствующая страница, на панели инструментов нажмите Добавить → Новый Observer. Появится соответствующее окно, где введите название профиля Observer. К примеру, это может быть: SBC 1000. Нажмите Сохранить. Появится окно, подтверждающее создание нового профиля Observer-а, где щелкните по кнопке Настройки. Отобразится страница Настройка Tariscope Observer, пример которой показан на рисунке 3.

Рисунок 3
В позиции Устройство указано «не выбрано», что означает, что вы должны указать телефонную систему из ранее созданных, для которой предназначен этот Observer. Щелкните по ссылке «тут» и выберите нужный узел связи и телефонную систему.
В списке Источник данных выберите значение Radius accounting server. Нажмите кнопку Настройка источника данных, расположенную справа от списка Источник данных. Появится окно Настройка источника данных, пример которого приведен на рисунке 4.
Рисунок 4
В позиции Порт укажите номер IP порта, на котором будет работать сервер Radius accounting. По умолчанию стандартным портом для этого сервера считается 1813. Если у вас есть несколько телефонных систем, которые должны передавать CDR данные в Tariscope через Radius accounting сервер, то для первого Radius accounting сервера используйте порт 1813, а для других Radius серверов – другие IP порты, которые свободны в вашей системе.
В позиции Общий секрет введите значение совместно секрета. Такое же значение должно быть и в настройках телефонной системы, которая будет передавать CDR данные.
Нажмите кнопку Готово.
На этом настройки, специальные для шлюзов SBC 1000 и 2000 закончены. Все остальные настройки в Tariscope выполняйте согласно рекомендациям приведенным в документе Tariscope 4.6. Руководство администратора.
Подкатегории
User's guide
The category contains articles of the document "Tariscope 4.x. User's guide".
How to configure
Эта категория содержит статьи, описывающие особенности настройки и работы с Tariscope.
Telecom services
Эта категория содержит статьи, связанные с настройкой, начислением и анализом телекоммуникационных усгул связи.
User's guide_4.5.х
The category contains articles of the document "Tariscope 4.5.x. User's guide".
