VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

Скрипт контроля баланса для chan_dongle

Вопросы по использованию и настройке IP телефонов, шлюзов и всего прочего

Модераторы: april22, Zavr2008

Vlad1983
Сообщения: 4251
Зарегистрирован: 09 авг 2011, 11:51

Re: Скрипт контроля баланса для chan_dongle

Сообщение Vlad1983 »

С помощью AGI можно навоять, конечно, что угодно, но интерактивности из freepbx оно вряд ли прибавит (хотя можно брать все данные для маршрутизации из БД freepbx, но настройка исходящей там все-таки ущербна и проще под свои нужды гуй написать по нужде).

По мне проще вручную пару строк забить в кастомный контекст чем отлаживать скрипт, тем более необходимости давать права клиенту на настройку сложной маршрутизации пока не было.
ЛС: @rostel
siv237
Сообщения: 12
Зарегистрирован: 10 май 2012, 10:46

Re: Скрипт контроля баланса для chan_dongle

Сообщение siv237 »

Пытаюсь написать универсальный парсер баланса. Проверьте плиз, кто использует скрипт выполнив эту строчку.
tail -n 50 /var/www/msg | sed 's/^/;/g' | grep -o -P ".+(?= - USSD -)|(- USSD -)|\d+(?=\:)|([-0-9]+[.,]\d+)"| sed 's/$/;/g' | tr "\n" "_" | sed 's/;_;/\n/g' | sed -r 's/(_)//g' | awk -F ";" '{print $1";"$3";"$4}'|grep -v ';$'|sed s/,/./g
Должно получиться что-то вроде

14.05.2012 12:30:11;000105;671.62
14.05.2012 12:30:12;000102;16.72
14.05.2012 12:30:23;000107;420.04
14.05.2012 12:30:30;000103;310.68
14.05.2012 12:48:14;000105;671.62
14.05.2012 12:48:19;000107;420.04
14.05.2012 12:48:23;000103;310.68
Аватара пользователя
SolarW
Сообщения: 1331
Зарегистрирован: 01 сен 2010, 14:21
Откуда: Днепропетровск, Украина

Re: Скрипт контроля баланса для chan_dongle

Сообщение SolarW »

Вход:

Код: Выделить всё

14.05.2012 12:00:16 - USSD - dongle2: Na osobovomu rakhunku 1.12263572: avans 138.75 hrn.
14.05.2012 12:00:21 - USSD - dongle4: Balans 11.87hrn, bonus 0.00hrn. Onovlena Melodiya dnia! Super propozyciya! Nabyrai *123*5050#
14.05.2012 12:00:23 - USSD - dongle1: Na rahunku: 109.92 grn. Info pro bonusy na *112# i *119#. Unikal'na BEZKOSHTOVNA muzyka na D-Jingle! Tel. 465
14.05.2012 12:00:25 - USSD - dongle3: Vash balans:zagal'nyi -0,00; paketnyi 0,00; dodatkovyi 0,00 hrn.Perevirka dodatkovykh poslug *121#
Выхлоп:

Код: Выделить всё

14.05.2012 12:00:16;2;1.12263572
14.05.2012 12:00:21;4;11.87
14.05.2012 12:00:23;1;109.92
14.05.2012 12:00:25;3;-0.00
siv237
Сообщения: 12
Зарегистрирован: 10 май 2012, 10:46

Re: Скрипт контроля баланса для chan_dongle

Сообщение siv237 »

Попробуй так:
tail -n 50 /var/www/msg|sed 's/^/;/g'|grep -o -P ".+(?= - USSD -)|(- USSD - \w+(?=\:))|([-0-9]+[.,]\d\d)"|sed 's/$/;/g'|tr "\n" "_"|sed 's/;_;/\n/g'|sed -r 's/(_|- USSD - )//g'|sed 's/,/./g'|awk -F ";" '{print $1";"$2";"$3}' | grep -v ";$"
siv237
Сообщения: 12
Зарегистрирован: 10 май 2012, 10:46

Re: Скрипт контроля баланса для chan_dongle

Сообщение siv237 »

Удобный сервис для изучения и тестирования регулярных выражений
http://php-include.ru/regulyarnye-vyrazheniya-onlain

Вставляем в строку для регулярных выражений
.+(?= - USSD -)|(- USSD - \w+(?=\:))|([-0-9]+[.,]\d\d)
А в поле для текста вставляем лог сообщений
Ставим галку global остальные убираем
Выбираем режим Match

Задача получить четкое выделение полей содержащих время, имя устройства, размер баланса.

В примере я ищу баланс исходя из условия что он содержит или не содержит знак минуса и обязательно имеет 2 знака после точки или запятой. Но если баланс идет целым числом или содержит меньше знаков после разделителя, то это выражение не найдет результат.
Хочется всётаки найти универсальный способ, ведь для человека нет проблем понять, где в строке написан именно баланс, а где левая рекламно-мусорная инфа.
Аватара пользователя
SolarW
Сообщения: 1331
Зарегистрирован: 01 сен 2010, 14:21
Откуда: Днепропетровск, Украина

Re: Скрипт контроля баланса для chan_dongle

Сообщение SolarW »

Этот вариант симпатичнее

Код: Выделить всё

14.05.2012 15:00:08;dongle1;105.45
14.05.2012 15:00:12;dongle4;11.87
14.05.2012 15:00:16;dongle2;1.12
14.05.2012 15:00:29;dongle3;-0.00
За ссылку на тестер регэкспов спасибо - по свободе поиграюсь.
siv237
Сообщения: 12
Зарегистрирован: 10 май 2012, 10:46

Re: Скрипт контроля баланса для chan_dongle

Сообщение siv237 »

siv237 писал(а):Хочется всётаки найти универсальный способ, ведь для человека нет проблем понять, где в строке написан именно баланс, а где левая рекламно-мусорная инфа.
cat /var/www/msg|grep 000101|grep USSD|sed 's/^/;/g'|grep -o -P ".+(?= - USSD -)|(- USSD - \w+(?=\:))|([-0-9]+([.,]\d+)?)"|sed 's/$/;/g'|tr "\n" "_"|sed 's/;_;/\n/g'|sed -r 's/(_|- USSD - )//g'|sed 's/,/./g'|awk -F ";" '{print $1";"$2";"$3}' | grep -P -v "(;$|^;)" | tail -n 10

Вроде ищет все как надо и минусовые и целые балансы и без ограничения на длинну, но вот когда попадается вот такая коза от провайдера
12.05.2012 10:00:13 - USSD - 000101: Balans:212,71r Khity vmesto gudkov-1mes.besplatno:*728*99#
12.05.2012 10:30:12 - USSD - 000101: Nastroika servisa do 19:00 ch, vremya Vladivostoka. Prinosim svoi izvineniya, MTS
12.05.2012 11:00:16 - USSD - 000101: Nastroika servisa do 19:00 ch, vremya Vladivostoka. Prinosim svoi izvineniya, MTS
12.05.2012 11:14:36 - USSD - 000101: Balans:212,71r Khity vmesto gudkov-1mes.besplatno:*728*99#
то 19 пишется как баланс :(
Vlad1983
Сообщения: 4251
Зарегистрирован: 09 авг 2011, 11:51

Re: Скрипт контроля баланса для chan_dongle

Сообщение Vlad1983 »

в извратах толк знаете...
оператору ничего не стоит поменять расположение полей в выхлопе.
потом переписывать правила такой длины, остатки моска свернете.
индивидуальные под каждого оператора менее трудозатратен в дальнейшем обслуживании.
ЛС: @rostel
Аватара пользователя
SolarW
Сообщения: 1331
Зарегистрирован: 01 сен 2010, 14:21
Откуда: Днепропетровск, Украина

Re: Скрипт контроля баланса для chan_dongle

Сообщение SolarW »

Склоняюсь к мысли Vlad1983 - если под каждого оператора персональный обработчик то:
- он проще (даже я разобрался :-) )
- соответственно проще разобраться если что-то перестанет работать
siv237
Сообщения: 12
Зарегистрирован: 10 май 2012, 10:46

Re: Скрипт контроля баланса для chan_dongle

Сообщение siv237 »

Ну это не замена прямого обработчика, а скорее дополнение. Например может сократить время на запуск системы, людям слабо знакомым с sed grep regexp...
Просто выбираем для какого модема какой метод использовать.
Добавил в скрипт:

# Универсальный парсер. Использовать только в тестовых целях.
if [ "${oper}" = "UNV" ]
then cat $opermsg|grep $num|grep USSD|sed 's/^/;/g'|grep -o -P ".+(?= - USSD -)|(- USSD - \w+(?=\:))|([-0-9]+([.,]\d+)?)"|sed 's/$/;/g'|tr "\n" "_"|sed 's/;_;/\n/g'|sed -r 's/(_|- USSD - )//g'|sed 's/,/./g'|awk -F ";" '{print $1";"$3";"$2}' | grep -P -v "(;$|^;)" | tail -n $tn >>tmpallbalans
fi
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH