Додатковий автоматичний аналіз викликів
У ряді випадків отримання обробленої в Tariscope інформації про виклики недостатньо і потрібен додатковий аналіз даних, який хотілося б, щоб Tariscope виконував автоматично. Наприклад, служба безпеки компанії хотіла б оперативно знати про всі виклики, які виконані співробітниками в пожежну охорону, поліцію або швидку допомогу. Інший випадок, коли бажано знати про всі вихідних дзвінків, вартість яких вище певної величини, або про дзвінки на телефони конкурентів. Можна придумати ще цілий ряд випадків, коли необхідно оперативно отримувати повідомлення про певні виклики.
Звичайно, буде не кращим рішенням подібних завдань посадити за монітор з Tariscope співробітника, який би відстежував такі виклики. Але цього робити і не треба, якщо використовувати всі можливості Tariscope. Tariscope можна налаштувати так, що він буде після закінчення кожного виклику автоматично виконувати аналіз даних виклику на предмет відповідності попередньо заданим умовам, наприклад, як ми згадували раніше, виконання будь-яким співробітником компанії виклику на номери швидкої допомоги, пожежної служби або поліції.
Особливий випадок, який вимагає оперативного відстеження, це виявлення телефонного фрода. Під телефонним фродом мається на увазі певний тип шахрайства, коли різними засобами виконуються несанкціоновані виклики, як правило, міжнародні, за рахунок компанії. У 2015 році за даними міжнародної асоціації CFCA (Communications Fraud Control Association) втрати від телефонного фрода становлять десь 38,1 млрд. Доларів США [1].
Виявлення фрода істотно складніше, ніж виявлення, наприклад, викликів на конкретні телефонні номери, так як заздалегідь не відомо, на які номери будуть виконуватися виклики, коли, який тривалістю. Для виявлення фрода, як правило, рекомендується використовувати спеціальні системи, в більшості випадків робота яких заснована на порівнянні конкретного виклику з моделлю поведінки конкретного абонента, групи абонентів і в цілому компанії. На даний момент Tariscope не має підсистеми виявлення фрода, але це не означає, що в ньому немає ніяких можливостей для його виявлення. Для цього перш за все слід сформулювати умови, на підставі яких можна оцінювати виклик на приналежність до фроду. Давайте спробуємо це зробити, щоб потім на підставі цієї інформації здійснити всі необхідні настройки Tariscope.
По-перше, будемо розглядати тільки вихідні міжнародні дзвінки вартістю понад заданої величини, так як фрод значно рідше використовується для міжміських і тим більше міських викликів.
По-друге, із зазначених викликів в першій умові найбільш підозрілими викликами з ознаками фрода слід вважати ті, які виконуються в неробочий час, у вихідні та святкові дні.
По-третє, можна оцінювати країни, звідки виконувався виклик. У таблиці 1 наведені 10 країн, звідки був найбільший фрод - трафік згідно зі звітом CFCA [1] за 2015 рік. Наводяться консолідовані дані, а також дані для країн Північної Америки, Європейського Союзу та решти світу. З країни під номером 1 був найбільший фрод трафік, з країни під номером 10 - був найменший фрод трафік з перелічених країн.
Таблиця 1
Узагальнені дані | Для Північної Америки | Для Європейського Союзу | Для інших країн світу | |
1 | Куба | Куба | Куба | Латвія |
2 | Сомалі | Сомалі | Великобританія | Куба |
3 | Боснія і Герцеговина | Санта Люсія | Сербія | Литва |
4 | Естонія | Боснія і Герцеговина | Естонія | Сомалі |
5 | Латвія | С'єрра-Леоне | Гвіана | Боснія і Герцеговина |
6 | Гвінея | Ямайка | Сомалі | Естонія |
7 | Сербія | Кірібаті | Африканські країни | Гвінея |
8 | С'єрра-Леоне | Туніс | Албанія | Сербія |
9 | Великобританія | Гренада | Алжир | Сенегал |
10 | Литва | США | Прибалтійські країни | С'єрра-Леоне |
Для аналізу належності виклику до фрода можна враховувати не тільки звідки був виконаний виклик, але і куди він був виконаний. Згадуваний раніше звіт CFCA [1] містить і таку інформацію, яка згрупована в таблиці 2.
Таблиця 2
Узагальнені дані | Для Північної Америки | Для Європейського Союза | Для інших країн світу | |
1 | США | Філіппіни | Іспанія | США |
2 | Пакистан | Пакистан | Великобританія | Куба |
3 | Іспанія | Канада | Куба | Сомалі |
4 | Куба | Нідерланди | Сомалі | Італія |
5 | Італія | Іспанія | Пакистан | Литва |
6 | Філіппіни | Франція | Єгипет | Пакистан |
7 | Сомалі | США | Австрія | Латвія |
8 | Великобританія | Індія | Швейцарія | Іспанія |
9 | Домініканська республіка | Нігерія | США | Туніс |
10 | Єгипет | Бельгія | Італія | Німеччина |
І, нарешті, можна оцінювати виклики на належність до фроду від абонентів, дані по яких відсутні в базі даних системи Tariscope.
Тепер розглянемо, яким чином пошук викликів із зазначеними вище ознаками можна реалізувати в системі Tariscope.
У налаштуваннях служби Tariscope Observer є можливість виконувати сценарії при настанні певних подій. Для цього в дереві налаштування програми Tariscope слід вибрати налаштування необхідної служби Tariscope Observer. Залежно від використовуваного джерела викликів вікно програми Tariscope для цього режиму буде різним. На малюнку 1 показано вікно програми Tariscope для випадку отримання інформації з FTP сервера.
Малюнок 1
Воно містить кнопку Сценарії. Клацніть по цій кнопці. З'явиться вікно Сценарії Tariscope Observer, показане на малюнку 2.
Малюнок 2
Це вікно містить перелік подій, при настанні яких Tariscope може запустити пов'язаний з цією подією сценарій.
Можлива реакція на такі події:
- Підключення джерела даних.
- Відключення джерела даних.
- Зміна класу абонента.
- Зміна класу групи.
- Періодична дія.
- Виклик оброблено.
- Помилка підключення до бази даних.
Для аналізу викликів на предмет належності їх до фроду, слід вибрати подію Виклик оброблено. Після цього, натисніть на кнопку «...». У вікні вибору файлів потрібно вибрати файл, який містить сценарій з аналізу фрода. Сценарії, що поставляються з Tariscope, за замовчуванням встановлюються в папку:
…Program Files (x86)\SoftPI\Tariscope4\Scripts
Сценарії можуть бути написані на мовах Visual Basic.Net (VB.Net) або C#. Серед постачаємих з Tariscope сценаріїв поки є тільки сценарії на мові VB.Net. Файли з цими сценаріями мають розширення 'vb'. У корені зазначеної вище папки є файл fraud.vb. Він дозволяє відправляти повідомлення або на задану в сценарії електронну адресу або на електронну адресу, задану в налаштуваннях Tariscope, про вихідні міжнародні дзвінки тривалістю понад 150 секунд.
Для написання нових сценаріїв або редагування існуючих бажано мати уявлення про програмування на мові VB.Net або C#, а також про створення SQL запитів.
Якщо ви не впевнені в своїх силах, краще зверніться в службу технічної підтримки компанії SoftPI, так як неправильно написаний сценарій може завдати шкоди системі Tariscope.. Написання сценаріїв силами компанії SoftPI не входить в послуги гарантійної або післягарантійних підтримок і виконується за окрему оплату.
Структура всіх сценаріїв, що використовуються в Tariscope, однакова. Кожен сценарій реалізує інтерфейс IScript. У цьому інтерфейсі є два методи:
- Метод Init. Цей метод викликається один раз під час запуску сценарію, коли служба Tariscope Observer компілює і ініціалізує цей сценарій.
- Метод Main. У ньому виконуються операції, пов'язані з конкретною подією. У метод Main передається об'єкт Parameters, який має тип, різний для кожного виду подій.
- При ініціалізації сценарію в нього передається клас IScriptHost, який дозволяє сценарію виконувати деякі операції програми. Наприклад, відправити повідомлення по електронній пошті.
Лістинг сценарію fraud.vb наведено нижче:
Option Strict Off
Imports System
Imports System.Data
Imports SoftPi.Tariscope.Common
Imports SoftPI.Tariscope.Observer
Imports System.Windows.Forms
Imports Microsoft.VisualBasic
Imports System.IO
Imports System.Collections
Imports System.Collections.Generic
Imports SoftPI.Tariscope
Public Class FraudScanner
Implements IScript
Private Host As IScriptHost
Private NeedFinish As Boolean = False
'
'
Private MAX_CALL_DURATION_S As Integer = 150
Private CALLTYPE_INTERNATIONAL As Integer = 5
'
'
Public Sub Init(ByVal host As IScriptHost) Implements IScript.Init
Me.Host = host
AddHandler host.Close, AddressOf OnClose
NeedFinish = False
End Sub
Private Sub OnClose(ByRef Cancel As Boolean)
Return
End Sub
Public Sub Main(ByVal Parameters As Object) Implements IScript.Main
Dim actionParameters As NewCallActionParameters = DirectCast(Parameters, NewCallActionParameters)
Try
Me.Host.AddEvent("New call processing, ID=" & actionParameters.Id)
Using cn As SqlClient.SqlConnection = New SqlClient.SqlConnection(Me.Host.DatabaseConnectionString)
cn.Open()
Dim CallItems As DAL.CallItems = DAL.CallItems.Instance(cn)
Dim cmd As SqlClient.SqlCommand = CallItems.GetCommand("SELECT ID, Originator, Terminator, CallDateTime, CallSeconds, CallType FROM viCalls WHERE ID=@callid")
cmd.Parameters.AddWithValue("@callid", actionParameters.Id)
Using rs As SqlClient.SqlDataReader = cmd.ExecuteReader()
If rs.Read() Then
If rs.GetInt16(5) = CALLTYPE_INTERNATIONAL AndAlso rs.GetInt32(4) > MAX_CALL_DURATION_S Then
Me.Host.SendMail("", "Fraud Detection system", "Suspicious call detected. ID=" & actionParameters.Id & " CallDateTime=" & rs.GetDateTime(3) & " Call duration=" & rs.GetInt32(4))
End If
End If
End Using
End Using
Catch ex As Exception
Me.Host.AddEvent("Error running script:" & ex.ToString)
End Try
End Sub
Для людини далекого від програмування наведений вище код може здатися "дрімучим лісом". Насправді це не зовсім так. У тексті сценарію червоним кольором виділені ті рядки коду, в яких при необхідності можливо вносити зміни.
Розглянемо перші два виділені рядки:
Private MAX_CALL_DURATION_S As Integer = 150
Private CALLTYPE_INTERNATIONAL As Integer = 5
Эти строки объявляют две переменные (MAX_CALL_DURATION_S i CALLTYPE_INTERNATIONAL), які мають цілий тип (Integer), і їм присвоюється конкретні значення. У змінної MAX_CALL_DURATION_S задається величина тривалості виклику (150 секунд = 2 хвилини 30 секунд). Далі ця змінна використовується для порівняння з тривалістю кожного міжнародного виклику, і всі виклики більш цієї величини слід розглядати на приналежність до фроду. Значення в 150 секунд можливо замінити на будь-яке інше значення. Для виділення саме міжнародних викликів використовується змінна CALLTYPE_INTERNATIONAL. Їй присвоюється значення 5, що в Tariscope для поля Тип виклику (CallType) якраз відповідає міжнародним викликам. Для того, щоб зрозуміти звідки взято це значення слід звернутися до документа "Tariscope 4.x. Каталог бази даних", опис таблиці Calls, значення поля CallType (Таблиця 2.12.3).
Наступний виділений рядок:
SELECT ID, Originator, Terminator, CallDateTime, CallSeconds, CallType FROM viCalls WHERE ID=@callid
Тут формується рядок SQL запиту, в якому отримуються такі поля уявлення viCalls для поточного виклику:
- ID. Ідентифікатор запису.
- Originator. Телефонний номер, з якого був виконаний виклик.
- Terminator. Телефонний номер, на який був виконаний виклик.
- CallDateTime. Дата і час виконання виклику.
- CallSeconds. Тривалість виклику в секундах.
- CallType. Тип виклику.
При необхідності можливо отримати і інші параметри виклику з переліку полів уявлення viCall (дивіться в документі "Tariscope 4.x. Каталог бази даних").
Наступний виділений рядок сценарію виконує аналіз даних на відповідність заданим умовам:
rs.GetInt16(5) = CALLTYPE_INTERNATIONAL AndAlso rs.GetInt32(4) > MAX_CALL_DURATION_S
Він використовується в операторі 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.
Обидві умови об'єднуються логічним оператором І. Тобто дія, яка задана після оператора Then, буде виконуватися тільки в тому випадку, коли виконаються ці обидві умови. І цією дією є відправка повідомлення по електронній пошті, що визначається наступним виразом:
Me.Host.SendMail("", "Fraud Detection system", "Suspicious call detected. ID=" & Parameters & " CallDateTime=" & rs.GetDateTime(3) & " Call duration=" & rs.GetInt32(4))
Me.Host.SendMail() – це функція, за допомогою якої виконується відправка повідомлення по електронній пошті. Ця функція має три параметри, які знаходяться всередині дужок і розділяються комами:
- Перший параметр задає електронну адресу, куди виконується відправка повідомлення. Якщо цей параметр порожній (""), як зазначено в наведеному вище виразі, то використовується електронна адреса, вказана в налаштуванні Tariscope - сторінка налаштування "Відомості та пошта". Якщо ви бажаєте відправляти повідомлення на якусь іншу адресу, ніж зазначену на цій сторінці налаштування або ви не налаштовували цей параметр в Tariscope, то в лапках слід задати цю адресу, наприклад, "Ця електронна адреса захищена від спам-ботів. Вам потрібно увімкнути JavaScript, щоб побачити її.".
- Другим параметром є тема електронного листа. У цьому сценарії таким параметром є "Fraud Detection system". При бажанні можно замінити цей параметр, наприклад, на "Отримано виклик з ознаками фрода".
- Третій параметр - це вміст тексту повідомлення. В даному сценарії це: "Suspicious call detected. ID=" & Parameters & " CallDateTime=" & rs.GetDateTime(3) & " Call duration=" & rs.GetInt32(4).
Розглянемо більш докладно цей рядок.
Частину рядка "Suspicious call detected. ID=" & Parameters можливо замінити, наприклад, на наступне: “Виявлений підозрілий виклик з ідентифікатором =” & Parameters. Значення цього ідентифікатора знаходиться в Parameters.
Наступна частина рядка " CallDateTime=" & rs.GetDateTime(3) буде відображати дату і час цього виклику. Можливо, буде краще, якщо цю частину рядка замінити на наступну: “ Дата і час виклику: “ & rs.GetDateTime(3)
І, наостанок, вираз " Call duration=" & rs.GetInt32(4) буде містити тривалість виклику. Також, для зручності сприйняття інформації, можна замінити цю частину рядка на: “ Тривалість виклику:” & rs.GetInt32(4)
У рядку SQL запиту, який розглядався вище, міститься запит ще двох параметрів: Originator і Terminator. Відповідно, їх значення також можливо виводити в тілі електронного листа. Для цього слід додати наступний рядок:
“ Виклик виконувався з номера ” & rs.GetString(1) “ на номер “ & rs.GetString(2)
Якщо модифікувати SQL запит, то в повідомленні можливо виводити інформацію про абонента, з номера якого виконувався виклик, найменування населеного пункту, куди виконувався виклик та іншу інформацію.
Тепер повернемося до наших умов для виявлення викликів, які можна підозрювати, як фрод. Додамо спочатку аналіз вартості виклику. Для цього в місці сценарію, де задавалися розглянуті вище змінні MAX_CALL_DURATION_S і CALLTYPE_INTERNATIONAL, додамо змінну MAX_CALL_COST, для якої задамо значення вартості виклику, починаючи з якого виклик може розглядатися, як підозрілий. Наприклад, нехай це буде значення 3 гривні. Тобто сценарій повинен реагувати на будь-який виклик, вартість якого більше, ніж 3 гривні.
Private MAX_CALL_COST As Decimal = 3.0
Тепер необхідно додати в SQL запит отримання інформації про вартість виклику. Для цього слід скористатися описом уявлення viCalls в документі "Каталог баз даних Tariscope 4.x", щоб знайти необхідне поле. Це поле Cost. Тоді запит повинен виглядати наступним чином:
SELECT ID, Originator, Terminator, CallDateTime, CallSeconds, CallType, Cost FROM viCalls WHERE ID=@callid
Якщо нас не цікавить тривалість виклику, то із запиту можна виключити поле CallSeconds. І тепер, отримавши за допомогою цього SQL запиту дані за викликом, слід їх проаналізувати на задоволення умов, які нас цікавлять: міжнародний виклик з вартістю понад 3 гривні. Для цього рядок, де проводиться аналіз, потрібно записати наступним чином:
rs.GetInt16(5) = CALLTYPE_INTERNATIONAL AndAlso rs.GetInt32(6) > MAX_CALL_COST
Цей рядок передбачає, що запит поля CallSeconds залишився. У разі, якщо його видалили, у рядку аналізу даних зміниться значення в дужках, які вказують на номер поля в запиті, починаючи з 0:
rs.GetInt16(4) = CALLTYPE_INTERNATIONAL AndAlso rs.GetInt32(5) > MAX_CALL_COST
Тепер посилимо умови для пошуку викликів, які можна розглядати як фрод. Будемо аналізувати міжнародні виклики з вартістю понад 3 гривні, які виконані з 19:00 до 08:00. Для цього слід створити відповідно дві змінні: для закінчення робочого часу - END_OF_WORK і початку робочого часу - BEGINNING_OF_WORK.
Private BEGINNING_OF_WORK As TimeSpan = TimeSpan.Parse("08:00:00")
Private END_OF_WORK As TimeSpan = TimeSpan.Parse("19:00:00")
У документі "Tariscope 4.x. Каталог баз даних" знаходимо поле CallDateTime, яке містить дані про дату і час дзвінка, і додаємо його в SQL запит, якщо його там ще немає:
SELECT ID, Originator, Terminator, CallDateTime, CallSeconds, CallType, Cost FROM viCalls WHERE ID=@callid
Для аналізу результатів запиту будемо використовувати такий вираз:
rs.GetInt16(5) = CALLTYPE_INTERNATIONAL AndAlso rs.GetInt32(4) > MAX_CALL_DURATION_S AndAlso (rs.GetDateTime(3).TimeOfDay > END_OF_WORK OrElse rs.GetDateTime(3).TimeOfDay < BEGINNING_OF_WORK)
Якщо крім неробочого часу нас цікавить будь-який час у вихідні дні, то вказаний вище вираз для аналізу результатів запиту слід ще трохи ускладнити, додавши в нього аналіз належності дня виклику до суботи або неділі:
rs.GetInt16(5) = CALLTYPE_INTERNATIONAL AndAlso rs.GetInt32(4) > MAX_CALL_DURATION_S AndAlso (rs.GetDateTime(3).TimeOfDay > END_OF_WORK OrElse rs.GetDateTime(3).TimeOfDay < BEGINNING_OF_WORK) AndAlso (rs.GetDateTime(3).DayOfWeek=DayOfWeek.Sunday OrElse rs.GetDateTime(3).DayOfWeek=DayOfWeek.Saturday)
Аналогічним чином можна і далі ускладнювати умови для виявлення викликів з ознаками фрода.
При використанні сценаріїв для додаткової обробки даних викликів слід завжди пам'ятати, що це використання підвищує навантаження на сервер і може привести до уповільнення обробки. Крім цього, якщо дані про виклики надходять в Tariscope з затримкою, наприклад, при отриманні їх через FTP сервер, то і повідомлення про підозрілі виклики також будуть сформовані з затримкою.
Якщо наведеної вище інформації вам недостатньо для створення необхідного сценарію, зверніться в службу технічної підтримки компанії SoftPI.
Посилання
1. http://cfca.org/fraudlosssurvey/2015.pdf
2. Tariscope - система обліку телефонних розмов і білінгова система для операторів зв'язку