Andrei Posted December 12, 2024 Posted December 12, 2024 20 часов назад, Andrei сказал: И получаю ошибку по непонятной причине. Вроде формат точно такой же как в приведенном на скриншоте примере. И в чем проблема - не понятно Полдня экспериментировал - так и не понял в чем проблема. update: проблема оказалась в кодировке загружаемого файла, я его готовлю на компе с виндой и кодировка получается win1251, так что перед загрузкой в биллинг его надо обязательно конвертнуть в utf-8. Иначе биллинг его не понимает: Цитата 12.12.2024 12:42:05 ERROR LWP32669 [json_session.cpp:94:Read] Token exception: syntax error on input: "{"id":1,"method":"importPhoneCategories", "params":{"tar_id":93,"cat_id":10,"timefrom ":"2024-11-01 14:58:00","phone_categories":[{"zone_num":"8", "zone_descr":,"class_name":, "cat_descr":,"above":3.3443,"perm_above":0.0,"round_seconds":1,"free_seconds":0,"includes":0,"direction":1}]}}" Вставить ник Quote
Andrei Posted January 22, 2025 Posted January 22, 2025 В 11.12.2024 в 23:33, dereiff сказал: чтобы тарифицировать А вы не практиковали парсер cdr-ок, который умел бы преобразовывать дату-время звонка из вида "Sun Dec 01 14:58:51 2024" в вид, который переваривает телефонный агент ЛБ? Вставить ник Quote
dereiff Posted January 23, 2025 Posted January 23, 2025 15 часов назад, Andrei сказал: А вы не практиковали парсер cdr-ок, который умел бы преобразовывать дату-время звонка из вида "Sun Dec 01 14:58:51 2024" в вид, который переваривает телефонный агент ЛБ? На первый взгляд формат вполне себе разбираемый через текстовый парсер биллинга, dateformat = %a %b %d %H:%M:%S %Y https://cplusplus.com/reference/ctime/strftime/ Вставить ник Quote
Andrei Posted January 23, 2025 Posted January 23, 2025 1 час назад, dereiff сказал: через текстовый парсер Я только никак не пойму - как устанавливается связь между парсером из /usr/local/billing/parsers/ и конфигами из /usr/local/billing/parsers-configs/ Просто имена должны быть одинаковы, например asterisk.conf и asterisk.pl ? В настройках агента можно выбрать только парсер: Для начала пытаюсь разобрать дату. В cdr только дата и время (20241201.cdr) : Sun Dec 01 14:58:51 2024 Сделал файл asterisk.conf pattern = ([A-Za-z]{3})+[[:space:]]+([A-Za-z]{3})+[[:space:]]+([0-9]{2})+[[:space:]]+([0-9]{2})\:([0-9]{2})\:([0-9]{2})+[[:space:]]+([0-9]{4}) datetime = 1 dateformat = %a %b %d %H:%M:%S %Y Пробую: cat 20241201.cdr | ./asterisk.pl Error: cannot parse line Sun Dec 01 14:58:51 2024 В чем ошибка не понятно и как это вообще отлаживать? Вставить ник Quote
pppoetest Posted January 23, 2025 Posted January 23, 2025 Смотреть содержимое asterisk.pl вестимо Вставить ник Quote
Andrei Posted January 23, 2025 Posted January 23, 2025 31 минуту назад, pppoetest сказал: asterisk.pl Там ничего не трогал #!/usr/bin/perl $|++; ## Uncoment the following block if PBX requires authentication. ####### #open (OUT,">&3") #print OUT "Reguired-Login\n" #print OUT "Required-Password\n" ## End of the block ## while(<STDIN>) { if( $_ =~ m/^(\d+);(\d+);(\d{4}-\d{2}-\d{2}T\d\d:\d\d:\d\d); ([^;]*);([^;]*);([^;]*);([^;]*);(\d*);(\d*);$/ ) { if( $2 eq "0" ) { next; } print "direction=$1;duration=$2;timefrom=$3;numfrom=$4;numto=$5;trunk_in=$6; trunk_out=$7;uniqueid=$8;cause=$9;\n"; } else { print STDERR "Error: cannot parse line $_\n"; } } Вставить ник Quote
ixi Posted January 23, 2025 Posted January 23, 2025 31 минуту назад, Andrei сказал: (\d{4}-\d{2}-\d{2}T\d\d:\d\d:\d\d) Тут формат времени жёстко прописан в регулярке 1 час назад, Andrei сказал: Error: cannot parse line Sun Dec 01 14:58:51 2024 В строке файла одна дата, а не стандартный csv? Напишите свой конвертер, все необходимые поля тут видны. Вставить ник Quote
Andrei Posted January 23, 2025 Posted January 23, 2025 13 минут назад, ixi сказал: Тут формат времени жёстко прописан в регулярке т.е. надо перловый скрипт тоже перелопатить под свой формат cdr? 13 минут назад, ixi сказал: В строке файла одна дата, а не стандартный csv? Конечно в строке cdr-ки не одна дата, это я начал отладку с разбора даты. На самом деле строка cdr длинная и там много всего. 13 минут назад, ixi сказал: Напишите свой конвертер, все необходимые поля тут видны. Конвертор чего куда? Конвертировать cdr-ки под эти скрипты из поставки ЛБ - не вариант, т.к. эти же cdr-ки используются и в других системах помимо биллинга. Ну и в целом - куча конверторов в разные форматы мне видится порочной практикой. ИМХО правильней настроить парсер биллинга. 13 минут назад, ixi сказал: поля тут видны Опыта у меня в регулярках почти никакого, поэтому конструкции вида /^(\d+);(\d+);(\d{4}-\d{2}-\d{2}T\d\d:\d\d:\d\d); ([^;]*);([^;]*);([^;]*);([^;]*);(\d*);(\d*);$/ мне не очень понятны. Почитал тут https://www.riwkus.ru/notes/web/content/regulyarnyie-vyirazheniya-standard-posix-uskoryaem-rabotu-s-dokumentami/ но пока ясность не наступила (\d+) - это любое колво цифр? (\d{4}-\d{2}-\d{2}T\d\d:\d\d:\d\d) - это более-менее понятно, дата и время в формате YYYY-MM-DD THH:MM:SS ([^;]*) - это любое кол-во любых символов? Вставить ник Quote
Andrei Posted January 23, 2025 Posted January 23, 2025 Вроде примитивно скорректировал перловый скрипт. Вот такую cdr-ку Sun Dec 01 14:58:51 2024,1733047131,1733047133,2,83517297240,83517297240,83517297240,var,73512103892,----,188.130.171.67,Yate,188.130.171.25,1,188.130.171.67,188.130.171.25,80BFE688-38AE-EF 11-A6FF-AFF972DA84E3@192.168.0.103,7D643027-00186965-59c45f8-00228b@188.130.171.23,16 Вот такой скрипт while(<STDIN>) { if( $_ =~ m/^([^;]*),([^;]*),([^;]*),([^;]*),([^;]*),([^;]*),([^;]*),([^;]*),([^;]*),([^;]*),([^;]*),([^;]*),([^;]*),([^;]*),([^;]*),([^;]*),([^;]*),([^;]*),([^;]*)$/) { if( $2 eq "0" ) { next; } print "duration=$4;timefrom=$1;numfrom=$9;numto=$6;trunk_in=$11; trunk_out=$13;cause=$19;\n"; } else { print STDERR "Error: cannot parse line $_\n"; } } разбирает до: duration=2; timefrom=Sun Dec 01 14:58:51 2024; numfrom=73512103892; numto=83517297240; trunk_in=188.130.171.67; trunk_out=188.130.171.25; cause=16 Вопрос - как это соотносится с astrerisk.conf - в нем надо прописать форматы получивших после разбора полей и их последовательность? И при запуске агент LBphone пишет, что он будет использовать совсем другой парсер: 23.01.2025 17:01:20 INFO 0x7fb112fab700 [lb2] ##################### Run parser ######################## 23.01.2025 17:01:20 INFO 0x7fb112fab700 [lb2] Source: ./cdr 23.01.2025 17:01:20 INFO 0x7fb112fab700 [lb2] Parser: './parsers/text_parser.bin ./parsers-configs/asterisk.conf' 23.01.2025 17:01:20 INFO 0x7fb112fab700 [lb2] Directory for save: '/usr/local/billing/cdr' 23.01.2025 17:01:20 INFO 0x7fb112fab700 [lb2] Phone station ID: 1 23.01.2025 17:01:20 INFO 0x7fb112fab700 [lb2] AgentId: '5' 23.01.2025 17:01:20 INFO 0x7fb112fab700 [lb2] Config: '/etc/billing.conf.LBphone' 23.01.2025 17:01:20 INFO 0x7fb112fab700 [lb2] Log file: '/usr/local/billing/log/lbphone.log' 23.01.2025 17:01:20 INFO 0x7fb112fab700 [lb2] Log level: 'info' 23.01.2025 17:01:20 INFO 0x7fb112fab700 [lb2] ######################################################### И как его переубедить (если это надо конечно) - не понятно. Ну и где смотреть причины, по которым cdr-ка не распарсилась биллингом? lbphone в режиме debug запускал, но в лог ничего про парсинг cdr-ок не пишется. Вставить ник Quote
dereiff Posted January 23, 2025 Posted January 23, 2025 @Andrei вы смотрите разные парсеры. asterisk.conf это конфиг для стандартного текстового парсера, в нем только регулярка по разбору строки и соответствие полей указывается, плюс преобразование даты. asterisk.pl - это целый отдельный парсер, который на stdin получает строки CDR, а в stdout кидает строки для биллинга т.е. asterisk.conf и asterisk.pl не связаны, это два разных способа разобрать информацию из CDR Надо для начала выбрать что из этого вы хотите править. Ну а потом добавить свой измененный конфиг или парсер в биллинг - https://docs.lanbilling.ru/50/agents/lbphone/set_parsers/ Вставить ник Quote
Andrei Posted January 23, 2025 Posted January 23, 2025 21 час назад, dereiff сказал: asterisk.conf и asterisk.pl не связаны, это два разных способа разобрать информацию из CDR Да, это я уже понял. В логе Parser: './parsers/text_parser.bin ./parsers-configs/asterisk.conf' Поскольку у меня тесктовые cdr, то их будет обрабатывать именно парсер text_parser.bin на основании конфига с регулярками из asterisk.conf. asterisk.pl я ковырял зря, он тут не участвует. Пробую этот конфиг править, но пока безуспешно. CDR: Sun Dec 01 14:58:51 2024,1733047131,1733047133,2,83517297240,83517297240,83517297240,var,73512103892,----,188.130.171.67,Yate,188.130.171.25,1,188.130.171.67,188.130.171.25,80BFE688-38AE-EF 11-A6FF-AFF972DA84E3@192.168.0.103,7D643027-00186965-59c45f8-00228b@188.130.171.23,16 Паттерн в конфиге: pattern = (([A-Za-z]{3})+[[:space:]]+([A-Za-z]{3})+[[:space:]]+([0-9]{2})+[[:space:]]+([0-9]{2})\:([0-9]{2})\:([0-9]{2})+[[:space:]]+([0-9]{4})),+ pattern = ([0-9]*) , ([0-9]*) ,([0-9]*), ([0-9]*) , ([0-9]*) , ([0-9]*) , ([^;]*) , ([0-9]*) , ([^;]*) , ([^;]*) , ([^;]*) , ([^;]*) ,+ pattern = ([0-9]*) , ([^;]*) , ([^;]*) , ([^;]*) , ([^;]*) , ([^;]*) datetime = 1 ani = 9 dnis = 6 duration = 4 trunk_in = 11 trunk_out = 13 dateformat = %a %b %d %H:%M:%S %Y Основывался на https://docs.lanbilling.ru/48/agents/lbphone/set_parsers/#text_example При попытке скормить эту cdr биллингу в /usr/local/billing/cdr/arc получаю 3 файла 20241202.cdr_20250123T204514.403834.log - пустой 20241202.cdr_20250123T204514.403834.parsed - пустой (не распарсило?) 20241202.cdr_20250123T204514.403834.raw - тут cdr-ка В статистике звонков тестовой учетки пусто - не распарсило? не смотгло сопоставить номерА с учеткой? не смогла протарифицировать не найдя направление? Из доки все это не понятно. Как провести диагностику? Запуск lbphone в режиме debug ничего не дает. Вставить ник Quote
Andrei Posted January 25, 2025 Posted January 25, 2025 В 23.01.2025 в 18:48, dereiff сказал: парсеры Парсинг cdr-ок победил, но с нелогичным для меня результатом. Начало cdr выглядит так: Sun Dec 01 14:58:51 2024,1733047131,1733047133,2,83517297240,83517297240,83517297240,var,73512103892 ,----,188.130.171.67,Yate, 188.130.171.25 .... (Dec 01 14:58:51 2024 абонент 73512103892 звонил на 83517297240 и длительность разговора 2 сек) Паттерн в конфиге pattern = (([A-Za-z]{3})+[[:space:]]+([A-Za-z]{3})+[[:space:]]+([0-9]{2})+[[:space:]]+([0-9]{2})\:([0-9]{2})\:([0-9]{2})+[[:space:]]+([0-9]{4})),+ pattern = ([0-9]*),([0-9]*),([0-9]*),([0-9]*),([0-9]*),([0-9]*),([^;]*),([0-9]*),([^;]*),([^;]*),([^;]*),([^;]*),+ pattern = ([0-9]*),([^;]*),([^;]*),([^;]*),([^;]*),([^;]*) дата-время - 1е поле, понятно длительность - должна бы быть 4м полем, но по указанному паттерну она парсится в поле номер 11 номер Б - должен бы быть 7м полем, но по указанному паттерну она парсится в поле номер 14 и т.д. Но ладно, распарсилось, уже хорошо. Но звонок не соотнесся ни с один абонентом (хотя телефонная учетка с номером 73512103892 у меня создана) и не протарифицировался, хотя тариф учетке назначен (абонентская плата по нему списывается корректно) и направления и категории в биллинг загружены, в этот тариф добавлены, категория с кодом 83512 в назначенном тарифе есть. В логе ядра: 24.01.2025 22:46:58 WARNING LWP1014 [phonecalc.cpp:899:CalculateCall] Call tel00520241201:2 is not calculated. Cannot find vgroups for numbers, numfrom: 73512103892[188.130.171.67], numto: 83517297240[188.130.171.25] Не понятно - почему, т.к. парсинг отработал вот так (файл parsed): cause=16;direction=1;duration=2;numfrom=73512103892;numto=83517297240;timefrom=2024-12-01T15:58:51;trunk_in=188.130.171.67;trunk_out=188.130.171.25;uniqueid=; Вставить ник Quote
msa Posted July 17, 2025 Posted July 17, 2025 Люди, кто пользуется ланбиллингом, не поделитесь какой-нибудь свежей версией 2.0.50+, желательно для rhel8/9? Надо бы протестировать работу с СОРМ, прежде чем заказывать доработки под себя. Если кому не жалко, в ПМ, в идеале бы все версии за 2024/2025, если там обновления должны быть последовательны Вставить ник Quote
Andrei Posted July 17, 2025 Posted July 17, 2025 3 часа назад, msa сказал: Люди, кто пользуется ланбиллингом, не поделитесь какой-нибудь свежей версией 2.0.50+, желательно для rhel8/9? Надо бы протестировать работу с СОРМ, прежде чем заказывать доработки под себя. Если кому не жалко, в ПМ, в идеале бы все версии за 2024/2025, если там обновления должны быть последовательны А вы ее активировать сможете? 🙂 Вставить ник Quote
msa Posted July 18, 2025 Posted July 18, 2025 Насколько я помню, в лицензии нет ограничений по максимальной версии. А какая-то старая лицензия есть Вставить ник Quote
Andrei Posted July 18, 2025 Posted July 18, 2025 2 часа назад, msa сказал: Насколько я помню, в лицензии нет ограничений по максимальной версии. А какая-то старая лицензия есть При переходе на новую версию генерят новый лицензионный ключ, который надо активировать у разработчиков. Вставить ник Quote
Urs_ak Posted October 15, 2025 Posted October 15, 2025 ЛанБиллинг походу меняет формат работы, на сайте теперь висит "Подписка на обновления": 140 000 / год (и туда не входит поддержка) Вставить ник Quote
Andrei Posted October 15, 2025 Posted October 15, 2025 30 минут назад, Urs_ak сказал: ЛанБиллинг походу меняет формат работы, на сайте теперь висит "Подписка на обновления": 140 000 / год (и туда не входит поддержка) https://t.me/lanbilling/143 Вставить ник Quote
Urs_ak Posted October 15, 2025 Posted October 15, 2025 На сайт ведёт ссылка. Мы кстати не очень довольны, что у них теперь версия только на 6 месяцев, потом они выводят бесячую плашку, что ваша версия устарела А я не хочу обновляться каждые 6 месяцев :E Вставить ник Quote
Andrei Posted October 15, 2025 Posted October 15, 2025 57 минут назад, Urs_ak сказал: "Подписка на обновления": 140 000 / год (и туда не входит поддержка) Преподносится как забота он нас: если не нужна техподдержка, то можно и не покупать. Для нас, как пользователя ЛБ, это существенное ухудшение условий. Я понимаю, что им хочется бутерброд не только с маслом, но и икоркой, но... 😞 7 минут назад, Urs_ak сказал: бесячую плашку Меня тоже бесит, я спрашивал "как отключить", но разработчики отмалчиваются. Вставить ник Quote
No_name Posted October 15, 2025 Posted October 15, 2025 Цитата "Подписка на обновления": 140 000 / год (и туда не входит поддержка) Однако. Т.е. я так понял обнову качай - вопросы не задавай. Придётся тогда пока откладывать обновление 8( Вставить ник Quote
Urs_ak Posted October 15, 2025 Posted October 15, 2025 1 час назад, No_name сказал: Т.е. я так понял обнову качай - вопросы не задавай. Поддержка отдельно продаётся. Теперь пакет ТП минимум 3 месяца. Т.е. теперь если надо в этом году обновиться нормально, это 170-180 тыс. плати Вставить ник Quote
TheUser Posted October 16, 2025 Posted October 16, 2025 17 часов назад, Urs_ak сказал: "Подписка на обновления": 140 000 / год В складчину уже начали покупать? Вставить ник Quote
No_name Posted October 16, 2025 Posted October 16, 2025 1 час назад, TheUser сказал: В складчину уже начали покупать? Ну а чё бы и не 8Е) Вставить ник Quote
Andrei Posted October 16, 2025 Posted October 16, 2025 10 часов назад, TheUser сказал: В складчину уже начали покупать? Обновления покупать в складчину смысла не имеет - ключ активации только один. А вот техподдержку вскладчину - вполне. Если не пускать саппорт на сервера для анализа, а только задавать вопросы в HelpDesk 🙂 Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.