Писане на примитивна статистика за таксуване за Asterisk

Етап 1: изучаваме структурата на cdr таблицата и какво се съхранява в нея

Интересуваме се от полета:

  • src - източник;
  • dst - дестинация;
  • billsec – таксувани секунди (секунди след вдигане на слушалката);
  • канал - използван канал;
  • dstchannel - канал за посока;
  • calldate - дата и час;
  • uniqueid - уникален идентификатор;
  • разположение - какво се случи с повикването: ОТГОВОРЕНО, НЯМА ОТГОВОР, ЗАЕТО, НЕУСПЕШНО.
  • userfield - свободно поле.
Етап 2: Създайте нашите таблици.

price_russia е таблица с регионални кодове на България и цени.

price_international – таблица с кодове на държави и цени.

клиенти — таблица с клиенти.

* полето тарифа ви позволява да дадете отстъпка или да зададете надценка за клиента (пишем 90 - даваме отстъпка от 10 процента, поставяме 110 - получаваме надценка от 10 процента).

clients_ext - картографиране на клиенти и разширения.

повиквания – таблица с обработени повиквания.

*тип – тип повикване (входящ/изходящ).

Етап 3: Обработка на данни.

Предполага се, че този скрипт ще работи по график и за да не пропуснем нищо, в началото на изпълнението на скрипта маркираме необработените редове, за да обработим само тях и да не докосваме тези, които могат да се появят, докато скриптът работи:

Първото нещо, което правим, е да заредим информация за: 1 в масива. Клиенти, техните разширения, групи и множител.

2. Кодове на региони, описания и цени за България.

3. Кодове на държави, описание и цени по света.

Съответно ние правим следното:

Сега можем да изберем маркираните редове от базата данни и да започнем обработката.

Самата обработка (преди първото извикване на функция давам тази функция, макар и естественоте трябва да се намират или в началото на файла, или в съседен файл.) :

Определете посоката на повикването:

Сега трябва да дефинираме разширение, чрез което можем да идентифицираме клиента. Разширението може да бъде извлечено от канала, в таблицата cdr това са полетата „channel“ за изходящо повикване и „dstchannel“ за входящо повикване.

* Знам, че е по-добре да използвам регулярни изрази тук, но ...

Сега определяме на кой клиент принадлежи разширението.

Закръгляване на секунди до минути:

Ако обаждането е вътрешно или входящо, цената може да бъде зададена на нула и описанието може да остане празно. В противен случай трябва да определите къде е отишло обаждането.

Определете цената на разговора:

Сега имаме всичко, за да напишем информация за разговора на масата.

И в самия край маркирайте редовете като напълно обработени:

Горното е написано за Москва, но лесно може да бъде преработено за друг град или държава. Връзка към източници: 77.108.85.102/habr/import.php.txt, 77.108.85.102/habr/functions.php.txt,

И тук можете да получите грант за тестов период на Yandex.Cloud. Необходимо е само да въведете "Habr" в полето "секретна парола".