Текущая схема учёта звонков выглядит так:
- Парсим data_log, ищем поинты по A.164-номеру -> тарифицируем -> пишем в log_session
- Парсим те же записи data_log повторно, ищем поинты по B.164-номеру -> пишем в log_incoming_session
Вроде всё хорошо. Но у нас например оборудование разделяет входящие и исходящие звонки и пишет их в логи отдельно с соответствующим признаком. Поэтому, если наш абонент звонит другому нашему абоненту, то от оборудования приходит две записи: одна с признаком "originating", другая - "terminating". Но в CDR нет подобного признака, поэтому записи дублируются. Чтобы это сгладить, мы зануляем поле A.164 для всех входящих звонков. Дубли от этого не исчезают, но по крайней мере исходящие дважды не тарифицируются.
В результате имеем 2 косяка:
- В лк клиенту показывается 0 в качестве номера звонящего
- Если звонили из нашей сети, то в списке входящих звонок будет показан 2 раза
С первым можно бороться, поправив шаблон xsl, чтобы отображался A-номер (не A.164). Но это косметика.
Со вторым - только навешивать на конвертер логов дополнительную ответственость за удаление таких дублей. Но это
не наш метод Сейчас вся схема с входящими в BG выглядит прикрученной сбоку.
Может быть разработчикам есть смысл интегрировать входящие звонки в схему тарификации?
- Задействовать поле "категория" в CDR
- Добавить признак "вх/исх" в log_session и работать с одной таблицей вместо log_incoming_session
- Потом при желании можно будет легко добавить узел тарифного плана и тарифицировать входящие
По-моему, выглядит более прозрачно и гибко, чем сейчас.