Ограничение входящих вызовов в Elastix (Asterisk)

Asterisk
Ограничить исходящие вызовы через SIP транк легко, для этого есть опция
call-limit=N

Но для входящих вызовов нужно использовать счетчик количества вызовов в диалплане. В случае чистого астериска это выглядит так:
exten => 559558,1,Set(GROUP()=group1)  ; Объединяем вызовы в группу
exten => 559558,n,Set(CALLS1=${GROUP_COUNT(group1)})  ; Считаем сколько вызовов в группе
exten => 559558,n,NoOp(${CALLS1})  ; Выводим в консоль счетчик (хотя строка выше и так должна вывести счетчик)
exten => 559558,n,ExecIf($[ ${CALLS1} > 4 ]?Hangup(34)) ; Если вызовов больше 4, сбрасываем. 34 это код отбоя  
exten => 559558,n,Dial(sip/101/${EXTEN},20)  ;  Отправляем вызов дальше

В случае с Elastix нужно добавить подобные строки в файл extensions_override_elastix.conf. Для этого сначала находим в файле extensions_additional.conf ext-did с нашим номером. В моем случае это [ext-did-0002] и строки
exten => 559558,1,Set(__FROM_DID=${EXTEN})
exten => 559558,n,Gosub(app-blacklist-check,s,1())
exten => 559558,n,Set(CDR(did)=${FROM_DID})
exten => 559558,n,ExecIf($[ "${CALLERID(name)}" = "" ] ?Set(CALLERID(name)=${CALLERID(num)}))
exten => 559558,n,Set(CHANNEL(musicclass)=default)
exten => 559558,n,Set(__MOHCLASS=default)
exten => 559558,n,Set(__CALLINGPRES_SV=${CALLERPRES()})
exten => 559558,n,Set(CALLERPRES()=allowed_not_screened)
exten => 559558,n(dest-ext),Goto(ivr-5,s,1)

В них нужно добавить наш счетчик и сделать, чтобы при применении настроек наш измененный диалплан оставался в том же виде.
Добавим в extensions_override_elastix.conf:
[ext-did-0002]
exten => 559558,1,Set(__FROM_DID=${EXTEN})
exten => 559558,n,Gosub(app-blacklist-check,s,1())
exten => 559558,n,Set(CDR(did)=${FROM_DID})
exten => 559558,n,ExecIf($[ "${CALLERID(name)}" = "" ] ?Set(CALLERID(name)=${CALLERID(num)}))
exten => 559558,n,Set(CHANNEL(musicclass)=default)
exten => 559558,n,Set(__MOHCLASS=default)
exten => 559558,n,Set(__CALLINGPRES_SV=${CALLERPRES()})
exten => 559558,n,Set(CALLERPRES()=allowed_not_screened)
; Call-limit
exten => 559558,n,Set(GROUP()=group1)  ; Объединяем вызовы в группу
exten => 559558,n,Set(CALLS1=${GROUP_COUNT(group1)})  ; Считаем сколько вызовов в группе
exten => 559558,n,NoOp(${CALLS1})  ; Выводим в консоль счетчик (хотя строка выше и так должна вывести счетчик)
exten => 559558,n,ExecIf($[ ${CALLS1} > 4 ]?Hangup(34)) ; Если вызовов больше 4, сбрасываем. 34 это код отбоя 
; Call-limit end
exten => 559558,n(dest-ext),Goto(ivr-5,s,1)

Перегружаем диалплан dialplan reload.

И сразу отвечаю зачем это нужно. Например у вас один оператор sip телефонии отдает несколько номеров через ограниченное количество каналов. По каждому номеру ограничивать каналы он не хочет и когда звонков по одному номеру много, остальные номера просто перестают работать.

0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.