AF
Asterisk Forum
обсуждения телефонии, VoIP и IP-PBX
12разделов
5 423тем
34 385сообщений
← К списку тем

FreePBX ограничить длительность исходящих через транк

Asterisk GUI 6 сообщений -
#1

FreePBX ограничить длительность исходящих через транк


Всем Привет!

Есть 3g модем huawei e1550 и через него звоним на мобильные номера. Так дешевле. Оператор, чья симка там вставлена ограничивает количество безплатных минут. 70 минут в день дает. Можно как-то сделать чтобы контролировать не вышли ли мы за пределы отведенного нам безплатного времени? Если это слишком сложно то подойдет и другой вариант: ограничить длительность звонков через этот транк, до 5 минут. Ну то есть чтобы звонок автоматически прерывался через 5 минут, если это был исходящий с этой datacatd если входящий то конечно безлим. Помогите кто чем может)

Стоит FreePBX 2.9 в конфиги лезть пытался но там этот Freepbx так все для меня запутанно пишет что я не разберусь.
#2

Ограничение Dial с опцией L

Лучший вариант - это скрипт, который с переодичностью опрашивает количество минут из CDR базы и выключает модем по достижению ограничения - поиском ищите.
#3

Ограничение Dial с опцией L

Лучший вариант - это скрипт, который с переодичностью опрашивает количество минут из CDR базы и выключает модем по достижению ограничения - поиском ищите.

Про Dial я знаю, куда тот Dial писать я в конфигах не разбираюсь можете сказать куда конкретно?

А скрипт как написать?) ^^
#4

Цитата:
А скрипт как написать?) ^^

Обычно пишут с помощью клавиатуры.
Ваш Капитан.

_________________
Asterisk 1.4.30 @ Ubuntu 9.04 + Cisco MC3810 + NEC NEAX 2000IPS + Polycom IP Phones
#5

А еще у нас платный суппорт Smile
#6

I have written this for myself, it works, please dont ask me for details, I am so busy Smile
In case, if you have a lot of calls, you will need an mysql command line tools to process CDR's from the DB.

extensions.conf
Код:
[check_monthly_limit]
exten => _34XXXXXXXXX,1,Set(monthly_limit_condition=${SHELL(/etc/asterisk/bin/check_monthly_limit ${CALLERID(num)} 250)})
exten => _34XXXXXXXXX,2,NoOp(${CALLERID(num)} is ${monthly_limit_condition})
exten => _34XXXXXXXXX,3,Goto(${monthly_limit_condition})
exten => _34XXXXXXXXX,4(out_of_limit),Playback(silence/4&beep&beep&beep&silence/1&account-balance-is&low&silence/2&account-bala$
exten => _34XXXXXXXXX,5,Busy(8)
exten => _34XXXXXXXXX,6,Hangup

exten => _34XXXXXXXXX,7(within_limit),NoOp(within limit, let's go!)

exten => _34XXXXXXXXX,8,....


cat check_monthly_limit
Код:
#!/bin/sh

# source number
from_number=$1

# limit (in minutes) per A-number per month
monthly_limit=$2


if [ "${from_number}" = "" -o "${monthly_limit}" = "" ]; then
echo
echo "Use this command with argument containing source phone number in e164 format and limit in minutes per month"
echo " to setup: ./check_monthly_limit 1234567890 300"
return 1
fi

# DEBUG!
# source number
# from_number="1234567890"
# limit (in minutes) per A-number per month
# monthly_limit=300

# date in format YYYY-MM
current_month=`date "+%Y-%m-"`

# TOTAL IN FIRST GREP USER
# ",\"Dial\",\"SIP\/gsm2\/"
# CDR!
# grep "\"\",\"${from_number}\"," /var/log/asterisk/cdr-csv/Master.csv | grep "\",\"${current_month}" | sed 's/,60,T//g' | awk -F ',' '{print $2","$3","$8","$9","$10","$13","$14","int(($14+59)/60)*60","$15}' | sed 's/"//g'

# COUNT OF SECONDS WITHOUT ROUNDING
# grep "\"\",\"${from_number}\"," /var/log/asterisk/cdr-csv/Master.csv | grep "\",\"${current_month}" | sed 's/,60,T//g' | awk -F ',' '{print $14}' | awk '{s+=$1} END {print s}'

# COUNT OF SECONDS WITH ROUNDING
# grep "\"\",\"${from_number}\"," /var/log/asterisk/cdr-csv/Master.csv | grep "\",\"${current_month}" | sed 's/,60,T//g' | awk -F ',' '{print int(($14+59)/60)*60}' | awk '{s+=$1} END {print s}'

# COUNT ./stats | sed 's/,60,T//g' | awk -F ',' '{print $14}' | awk '{s+=$1} END {print s}'
# COUNT echo -e "59\n2" | awk '{s+=int(($1+59)/60)*60} END {print s}'
# COOL CDR ./stats | sed 's/,60,T//g' | awk -F ',' '{print $2","$3","$8","$9","$10","$13","$14","int(($14+59)/60)*60","$15}' | sed 's/"//g'

talked_already=`grep "\"\",\"${from_number}\"," /var/log/asterisk/cdr-csv/Master.csv | grep "\",\"${current_month}" | sed 's/,60,T//g' | awk -F ',' '{print $14}' | awk '{s+=$1} END {print s}' | awk '{print int(($1+59)/60)}'`

if [ "${talked_already}" -le "${monthly_limit}" ]; then
# here we allow asterisk to make outgoing call
echo -n "within_limit"
else
# here we send an email message to phone line owner and won't allow call
echo -n "out_of_limit"
fi