jellfish
13.12.2005, 12:37
Вопрос простой потому что не понимаю логики... Рошу ее разъяснить.

Есть CDR строки меридиана.


S 113 00 101 A028001 10/04 11:53:27 00:09:56.0 A9749423
& 000 000
& 000


E 007 00 A028001 100 10/04 12:04:51 00:01:28.0
& 000 000
& 000



Как это тарифицировать? Т.е. это должно быть 2 отдельных начисления на счет абонента с разным временем или 1 (сложить время) и т.д.

Zero!!
13.12.2005, 12:43
А что доки по CDR нет?
Там все детально описанно.

jellfish
13.12.2005, 12:47
Есть. Но я не разобрался...

RXL
13.12.2005, 18:57
Трансфер это был. 101-й позвонил в город, а потом сделал трансфер на 100-го. Соотв., получаем S-запись для первого этапа и E для второго. Для 101-го это был исходящий звонок, а для 100-го - входящий. Так что все правильно.
Или начисляй вторую фазу 100-му, либо обрабатывай CDR с учетом таких особенностей.

jellfish
13.12.2005, 20:15
2 RXL

Т.е. фактически получаем следующую ситуацию. Звонит 101 на город, разговаривает, после 00:09:56.0 переводит звонок на 100 и 100 говорит с городом. Правильно я понял?

Т.е. 2 звонка имеем
101->749423
749423->100 (или 101->100?)

Я понимаю что все зависит от ситуации. Но в большинстве таких случаев как надо рассматривать данный звонок?

Фактически же получаем что S аналогичен N.
А E аналогичен N но только входящий с набранного номера в S...

RXL
16.12.2005, 17:36
Ну так я в предыдущем посте все это уже описывал...

Давай прямо: что смущает и что не получается?

Кстати, доку почитать не мешает!

PhoneMan
16.12.2005, 18:01
jellfish пишет
Фактически же получаем что S аналогичен N.
А E аналогичен N но только входящий с набранного номера в S...
Да все они "аналогичны" в некотром смысле.
Просто S это от слова Start, а E от слова End. Таким образом помечены, чтобы тарификатор (и ваш в т.ч.) рассматривал их не как изолированные, а как связанные события.


А как деньги считать это вопрос.
IMHO если задача сопоставить свой CDR со счетами, которые выставляет за услугу оператор, то удобнее сложить время и привести два эти разговора к одной записи. Т.к. для оператора это был один звонок.
Если задача выставлять счета внутренним абонентам, то логичнее считать и тарифицировать для каждого из них в отдельности. И формировать каждому свою распечатку в конце месяца. IMHO.

Удачи

PS: кстати, трансферов может быть и побольше, чем один.. поговорили, передали дальше, потом ещё дальше, потом подвесили на парковку, потом опять поговорили, но уже втроем в режиме конференции.. Готовы отлавливать такие ситуации?

jellfish
16.12.2005, 18:15
Непонятно как их считать.

Если следовать вашей логике получаем что это один и тот же звонок (S+E) т.е. выхов на город был один.

Тогда если вместо внутренних номеров будет город причем город приписан к разным абонентам с кого списывать с того кто начал звонок или с того на кого его перевели...

Например 2 звонка

S 123456->987654
E 123457->987654 (т.е. перевели на 123457)

Ну так вот номер 123456 это номер абонента 1
а 123457 это номер абонента 2. С кого списать деньги?

jellfish
16.12.2005, 18:22
кстати, трансферов может быть и побольше, чем один.. поговорили, передали дальше, потом ещё дальше, потом подвесили на парковку, потом опять поговорили, но уже втроем в режиме конференции.. Готовы отлавливать такие ситуации?


Спасибо. Учту. Но нет пока необходимости и примеров...

RXL
17.12.2005, 01:52
Например 2 звонка

S 123456->987654
E 123457->987654 (т.е. перевели на 123457)
Либо эти записи от разных звонков, либо ты напутал с направление вызова: в локальном трансфере для абонента, на котого перевели, звонок будет входящим, а не исходящим.
Уточни этот момент.

В сборе нескольких запесей к одному звонку надо использовать общий ключ. Например, если появилась запись "S" с транком на одной из сторон, то, следует плонимать, что транк трансферить он не может: следует искать запись, в которой фигурирует это же транк (и так до записи "E" с его же участием). Конечно, возможны сбойные ситуации (сбой сборщика или сбой станции), при которых часть данных будет потерена. В таком случае стоит проверять все записи, в которых упоминается этот транк: если запись "E" так и не была найдена до того, как нашлась запись "N" или "S", то - явно она относится к другму звонку и сбой был.

Кстати, различные ситуации лучше моделировать искуственно, а не ждать их случайного обнаружения. Это, конечно, если есть такая возможность.

PhoneMan
17.12.2005, 18:04
jellfish пишет
...С кого списать деньги?
Если затрудняетесь принять решение как разработчик, отдайте право принятия решения пользователю. Включите в настройки тарификатора элемент управления, позволяющий сделать выбор:
- тарифицировать на инициатора звонка (засвеченного в "S"-строке);
- тарифицировать на последнего (засвеченного в "Е"-строке);
- списывать с каждого его часть.
Успехов.

jellfish
17.12.2005, 23:55
2 PhoneMan

Это все понятно. Думал что я чего то недопонял просто... И есть один единственный очевидный путь.

pvalera
18.12.2005, 20:06
Кстати, на таких вызовах нужно четко понимать, что именно показывает TIMESTAMP. Иначе будут нестыковочки :) Эх, хорошо было бы если все обрабатывалось как на N записях... Взял поле TIMESTAMP, отнял от него DURATION и дальше работай без проблем :)