
Тема для обсуждения функционала и объявлений об обновлениях.
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) ;резерв ... ...