Пишемо примітивну білінг-статистику для Asterisk
Етап 1: вивчаємо структуру таблиці cdr та що в ній зберігається
Нам цікаві поля:
- src-джерело;
- dst – призначення;
- billsec – секунди, що тарифікуються (секунди після зняття трубки);
- channel - використовуваний канал;
- dstchannel - канал напряму;
- calldate – дата та час;
- uniqueid – унікальний ідентифікатор;
- disposition – що трапилося з викликом: ANSWERED, NO ANSWER, BUSY, FAILED.
- userfield – вільне поле.
price_russia – таблиця з кодами регіонів України та цінами.
price_international - таблиця з кодами країн та цінами.
clients - таблиця з клієнтами.
* Поле rate дозволяє давати знижку або ставити націнку для клієнта (пишемо 90 - даємо знижку в 10 відсотків, ставимо 110 - отримуємо націнку в 10 відсотків).
clients_ext – зіставлення клієнтів та екстеншенів.
сalls - таблиця з обробленими дзвінками.
*type – тип дзвінка (вхідний/вихідний).
Етап 3: Обробка даних.
Передбачається, що даний скрипт буде запускатися за розкладом, і що б нічого не пропустити, на початку виконання скрипту ми помічаємо необроблені рядки, для того щоб обробляти тільки їх, і не чіпати ті, які можуть з'явитися поки виконується скрипт:
Перше що ми робимо - це завантажуємо в масив інформацію про: 1. Клієнтах, їх екстеншенах, групах та множнику.
2. Коди регіонів, опис та ціни по Україні.
3. Коди країн, опис та ціни по світу.
Відповідно робимо ми ось що:
Тепер можемо вибрати з бази, зазначені рядки та розпочати обробку.
Власне обробка (перед першим викликом функції я наводжу цю функцію, хоча природно вониповинні розташовуватися або на початку файлу або в сусідньому файлі.) :
Визначаємо напрям дзвінка:
Тепер нам потрібно визначити екстеншен, яким ми зможемо визначити клієнта. Екстеншен можна витягти з каналу, у таблиці cdr - це поля "channel" при вихідному виклику і "dstchannel" при вхідному.
* знаю що тут краще використовувати регулярні вирази, але…
Тепер визначаємо, якому клієнту належить екстеншен.
Округлюємо секунди до хвилин:
Якщо внутрішній або вхідний дзвінок, ціну можна встановити в нуль, а опис залишити порожнім. А в іншому випадку потрібно визначити куди пішов дзвінок.
Визначаємо ціну дзвінка:
Тепер ми маємо все, що б, записати інформацію про дзвінок в таблицю.
І в самому кінці, помітити рядки як повністю в оброблені:
Написане вище писалося під Москву, але легко може бути перероблено під інше місто або країну. Посилання на вихідні коди: 77.108.85.102/habr/import.php.txt, 77.108.85.102/habr/functions.php.txt,
А у нас тут можна отримати грант на тестовий період Яндекс.Хмари. Варто лише у полі «секретний пароль» запровадити «Хабр»