Страница 2 из 3
Re: Скрипт контроля баланса для chan_dongle
Добавлено: 14 май 2012, 08:45
Vlad1983
С помощью AGI можно навоять, конечно, что угодно, но интерактивности из freepbx оно вряд ли прибавит (хотя можно брать все данные для маршрутизации из БД freepbx, но настройка исходящей там все-таки ущербна и проще под свои нужды гуй написать по нужде).
По мне проще вручную пару строк забить в кастомный контекст чем отлаживать скрипт, тем более необходимости давать права клиенту на настройку сложной маршрутизации пока не было.
Re: Скрипт контроля баланса для chan_dongle
Добавлено: 14 май 2012, 13:01
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
Re: Скрипт контроля баланса для chan_dongle
Добавлено: 14 май 2012, 13:20
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
Re: Скрипт контроля баланса для chan_dongle
Добавлено: 14 май 2012, 15:54
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 ";$"
Re: Скрипт контроля баланса для chan_dongle
Добавлено: 14 май 2012, 16:03
siv237
Удобный сервис для изучения и тестирования регулярных выражений
http://php-include.ru/regulyarnye-vyrazheniya-onlain
Вставляем в строку для регулярных выражений
.+(?= - USSD -)|(- USSD - \w+(?=\:))|([-0-9]+[.,]\d\d)
А в поле для текста вставляем лог сообщений
Ставим галку global остальные убираем
Выбираем режим Match
Задача получить четкое выделение полей содержащих время, имя устройства, размер баланса.
В примере я ищу баланс исходя из условия что он содержит или не содержит знак минуса и обязательно имеет 2 знака после точки или запятой. Но если баланс идет целым числом или содержит меньше знаков после разделителя, то это выражение не найдет результат.
Хочется всётаки найти универсальный способ, ведь для человека нет проблем понять, где в строке написан именно баланс, а где левая рекламно-мусорная инфа.
Re: Скрипт контроля баланса для chan_dongle
Добавлено: 14 май 2012, 16:16
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
За ссылку на тестер регэкспов спасибо - по свободе поиграюсь.
Re: Скрипт контроля баланса для chan_dongle
Добавлено: 14 май 2012, 16:43
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 пишется как баланс

Re: Скрипт контроля баланса для chan_dongle
Добавлено: 14 май 2012, 17:40
Vlad1983
в извратах толк знаете...
оператору ничего не стоит поменять расположение полей в выхлопе.
потом переписывать правила такой длины, остатки моска свернете.
индивидуальные под каждого оператора менее трудозатратен в дальнейшем обслуживании.
Re: Скрипт контроля баланса для chan_dongle
Добавлено: 14 май 2012, 19:14
SolarW
Склоняюсь к мысли
Vlad1983 - если под каждого оператора персональный обработчик то:
- он проще (даже я разобрался

)
- соответственно проще разобраться если что-то перестанет работать
Re: Скрипт контроля баланса для chan_dongle
Добавлено: 14 май 2012, 19:58
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