Писане на примитивна статистика за таксуване за Asterisk
Етап 1: изучаваме структурата на cdr таблицата и какво се съхранява в нея
Интересуваме се от полета:
- src - източник;
- dst - дестинация;
- billsec – таксувани секунди (секунди след вдигане на слушалката);
- канал - използван канал;
- dstchannel - канал за посока;
- calldate - дата и час;
- uniqueid - уникален идентификатор;
- разположение - какво се случи с повикването: ОТГОВОРЕНО, НЯМА ОТГОВОР, ЗАЕТО, НЕУСПЕШНО.
- userfield - свободно поле.
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" в полето "секретна парола".