Тема для обсуждения функционала и объявлений об обновлениях.
12.05.2012
siv237 писал(а):Обновил скрипт, теперь он умеет автоматически отключать модемы с низким балансом.
siv237 писал(а):Обновил скрипт, теперь он умеет автоматически отключать модемы с низким балансом.
Код: Выделить всё
# Список модемов и соответствующих им типов ответов операторов
# о состоянии баланса
# Последовательность заполнения:
# 1. Номер Dongle устройства, 2. Префикс строки разбора, 3. Номер симки
# 4. Имя оператора 5. USSD запрос баланса 6. Минимальный баланс при котором происходит отключение канала
# Внимание, пробелы в полях не допускаются
for opsos in \
" 000103 MTS2 +79140000001 МТС *100# 50" \
" 000101 MTS +79140000002 МТС *100# 100" \
" 000106 MTS +79140000003 МТС *100# 70" \
" 000104 MGF +79240000004 МЕГАФОН *100# 20" \
" 000102 MGF +79240000005 МЕГАФОН *100# 30" \
" 000105 BEE +79620000006 БИЛАЙН *102# 50" \
" 000107 BEE +79090000007 БИЛАЙН *102# 80"
do
num=`echo $opsos | awk '{print $1}'`
oper=`echo $opsos | awk '{print $2}'`
numsim=`echo $opsos | awk '{print $3}'`
fovsim=`echo $opsos | awk '{print $4}'`
ussdzap=`echo $opsos | awk '{print $5}'`
min_bal=`echo $opsos | awk '{print $6}'`
Код: Выделить всё
" dongle1 KS +380981234567 КИЕВСТАР *111#"
" dongle2 MTS +380951234567 МТС *110*10*01#"
" dongle3 UTEL +380911234567 Укртелеком *100#"
" dongle4 LF +380931234567 Лайф *111#"
Код: Выделить всё
######## Варианты парсинга баланса для разных операторов #######################
# Результат разбора должен быть в виде:
# 28.04.2012 08:30:17;52.70;000101
################################################################################
# Оператор КИЕВСТАР
if [ "${oper}" = "KS" ]
then cat $opermsg | grep $num| grep USSD| grep 'Na rahunku'| sed -r 's/(: Na rahunku: | - | grn. )/;/g'| awk -F ";" '{print $1";"$4";"$3}' | tail -n $tn >>/tmp/tmpallbalans
fi
# Оператор МТС
if [ "${oper}" = "MTS" ]
then cat $opermsg | grep $num| grep USSD| grep 'Na osobovomu rakhunku'| sed -r "s/(: Na osobovomu rakhunku | - |: avans |5 hrn.)/;/g"| awk -F ";" '{print $1";"$5";"$3}'| tail -n $tn >>/tmp/tmpallbalans
fi
# Оператор Укртелеком
if [ "${oper}" = "UTEL" ]
then cat $opermsg | grep $num| grep USSD| grep 'Vash balans'| sed 's/,/./g'| sed "s/'//g"|sed -r "s/(: Vash balans:zagalnyi | - |; paketnyi )/;/g"| awk -F ";" '{print $1";"$4";"$3}'| tail -n $tn >>/tmp/tmpallbalans
fi
# Оператор Лайф
if [ "${oper}" = "LF" ]
then cat $opermsg | grep $num| grep USSD| grep ': Balans'| sed 's/,/./g'| sed -r 's/(: Balans | - |hrn. )/;/g'| awk -F ";" '{print $1";"$4";"$3}' | tail -n $tn >>/tmp/tmpallbalans
fi
################################################################################
Код: Выделить всё
[from-gsm]
exten => ussd,1,Verbose(Incoming USSD: ${BASE64_DECODE(${USSD_BASE64})})
exten => ussd,n,System(echo '${STRFTIME(${EPOCH},,%d.%m.%Y %H:%M:%S)} - USSD - ${DONGLENAME}:${BASE64_DECODE(${USSD_BASE64})}' >> /var/www/msg)
exten => ussd,n,Hangup()
Код: Выделить всё
50.01 UAH, dejstvitelen do 02.03.2013. Tarif - Super MTS bez PZS i popolneniy 0-25. * Euro-GOOD'OK 2012: zvoni 700!
Код: Выделить всё
Na rahunku: 58.96 grn. Info pro bonusy na *112# i *119#. Unikal'na BEZKOSHTOVNA muzyka na D-Jingle! Tel. 465
Код: Выделить всё
Vash balans:zagal'nyi 25,53; bonusnyi 0,00; dodatkovyi 0,00 hrn.Nomer diysnyi do 2012-09-22 23:59:59. Perevirka dodatkovykh poslug *121#
Для чистого астериска можно добавить agi скрипт проверяющий баланс и устанавливающий канал в режим занят при исходящем звонке для перехода к следущему свободному. Тогда входящие будут идти независимо от состояния баланса. Но беда в том, что при настройке через FreePBX канал chan_dongle прописан customtran-ком и вписаться в диалплан между вызовом из кустомтранка и драйвером канала уже негде. Нет контекста или я не понял где его искать.Vlad1983 писал(а):отключать исходящие можно через проверку переменной, хранимой в AstDB, которую выставлять на основе данных о балансе.
Код: Выделить всё
asterisk -rx 'database put TRUNKLIMIT gsm0 1200'
asterisk -rx 'database put TRUNKLIMIT gsm1 1210'
Код: Выделить всё
[outbound-allroutes-custom]
...
exten => _7XXXXXXXXXX,1,GoSub(sub-outbound,${EXTEN},gsm)
exten => _7XXXXXXXXXX,n,GoSub(sub-outbound,${EXTEN},sipnetmsk) ;резерв
...
[sub-outbound]
...
exten => _X.,n(gsm),ExecIf($[ ${DB(TRUNKLIMIT/gsm0)} > 3000 ]?Return()) ; на симках одинаковый лимит 3000 минут.
exten => _X.,n,ExecIf($[ ${DB(TRUNKLIMIT/gsm1)} > 3000 ]?Return()) ; распределение нагрузки нормальное поэтому выходим сразу
exten => _X.,n,GotoIf($[ ${DB(TRUNKLIMIT/gsm0)} > ${DB(TRUNKLIMIT/gsm1)} ]?gsm1:gsm0)
exten => _X.,n(gsm0),Macro(record-enable,${AMPUSER},OUT)
exten => _X.,n,Set(CDR(to)=gsm0)
exten => _X.,n,Dial(SIP/gsm/10${EXTEN},60,TX)
exten => _X.,n,StopMixMonitor()
exten => _X.,n,Macro(record-enable,${AMPUSER},OUT)
exten => _X.,n,Set(CDR(to)=gsm1)
exten => _X.,n,Dial(SIP/gsm/11${EXTEN},60,TX)
exten => _X.,n,StopMixMonitor()
exten => _X.,n,Return()
exten => _X.,n(gsm1),Macro(record-enable,${AMPUSER},OUT)
exten => _X.,n,Set(CDR(to)=gsm1)
exten => _X.,n,Dial(SIP/gsm/11${EXTEN},60,TX)
exten => _X.,n,StopMixMonitor()
exten => _X.,n,Macro(record-enable,${AMPUSER},OUT)
exten => _X.,n,Set(CDR(to)=gsm0)
exten => _X.,n,Dial(SIP/gsm/10${EXTEN},60,TX)
exten => _X.,n,StopMixMonitor()
exten => _X.,n,Return()
...
К сожалении проблема с free-pbx в том, что нет возможности встроиться в диалплан на этапе набора номера и соответственно отработать кустом контекст не получится.Vlad1983 писал(а):сведения о затраченых минутах или балансе берите откуда хотите и засовываем в AstDB такделал для шлюзов для обеспечения равномерной нагрузки на симки и отключения при привышении месячного лимита (пример для двухсимок)Код: Выделить всё
asterisk -rx 'database put TRUNKLIMIT gsm0 1200' asterisk -rx 'database put TRUNKLIMIT gsm1 1210'
под модемы точите самиКод: Выделить всё
[outbound-allroutes-custom] ... exten => _7XXXXXXXXXX,1,GoSub(sub-outbound,${EXTEN},gsm) exten => _7XXXXXXXXXX,n,GoSub(sub-outbound,${EXTEN},sipnetmsk) ;резерв ... ...