В данной небольшой заметке рассмотрим адаптацию предложенного ранее решения по ограничению количества междугородних звонков в Asterisk к Elastix: http://uzlec.ru/ogranichenie-kolichestva-mezhdugorodnix-zvonkov-v-asterisk.html
Создаем файл "/etc/asterisk/ext_outbound-allroutes-custom.conf" следующего содержания:
[outbound-allroutes-custom]
include => outbound-allroutes-custom-limitcall[outbound-allroutes-custom-limitcall]
exten => _.,1,NoOp( ----- Limited Extension Context Activated ----- )
exten => _.,n,Set(limitcall=${DB(ext/${CALLERID(num)}/limit)})
exten => _.,n,NoOp( ----- Call limit set to ${limitcall} in the database ----- )
exten => _.,n,GotoIf($["${limitcall}" = ""]?resetvariable)
exten => _.,n,GotoIf($[${limitcall} > 30]?hang)
exten => _.,n,Set(limitcall=${MATH(${limitcall}+1)})
exten => _.,n(dbwrite),Set(DB(ext/${CALLERID(num)}/limit)=${limitcall})
exten => _.,n,Goto(end)
exten => _.,n(hang),NoOp( ----- Call limit of ${limitcall} has been reached. ------ )
exten => _.,n,agi(googletts.agi,"Превышено ограничение на 30 звонков в сутки.",ru)
exten => _.,n,Goto(congestion,${EXTEN},1)
exten => _.,n(resetvariable),NoOp( ----- Null value has been corrected ----- )
exten => _.,n,Set(limitcall=1)
exten => _.,n,Goto(dbwrite)
exten => _.,n(end),NoOp( ----- Continue dialplan execution ----- )
exten => _.,n,Goto(outbound-allroutes-custom-all,${EXTEN},1)[outbound-allroutes-custom-all]
include => outrt-2
include => outrt-3
include => outrt-4
include => outrt-5
include => outrt-6
exten => foo,1,Noop(bar)
Контекст [outbound-allroutes-custom-all] должен соответствовать [outbound-allroutes] из файла "/etc/asterisk/extensions_additional.conf" за исключением первой строки:
[outbound-allroutes]
include => outbound-allroutes-custom
include => outrt-2
include => outrt-3
include => outrt-4
include => outrt-5
include => outrt-6
exten => foo,1,Noop(bar);--== end of [outbound-allroutes] ==--;
Обратите внимание, что этот контекст генерируется автоматически на основании настроек Elastix в разделе интерфейса Web: PBX -> PBX Configuration -> Outbound Routes. Поэтому каждый раз, внося туда какие-либо изменения, нужно будет их вручную синхронизировать с [outbound-allroutes-custom-all].
Подключаем все вновь созданные контексты, добавив в файл "/etc/asterisk/extensions_custom.conf" строку: "#include ext_outbound-allroutes-custom.conf".
Для обнуления счетчиков раз в сутки создаем файл "/etc/cron.daily/asterisk_limitcall":
#!/bin/sh
/usr/sbin/asterisk -rqx 'database deltree ext' > /dev/null 2>&1