Страницы

среда, 9 октября 2013 г.

Elastix: один транк объединяющий несколько транков для исходящих вызово

Нужен был транк для исходящих вызовов который каждый новый вызов пускал через разные транки. Идея в распределении нагрузки по транкам.

В примере названия сущствующих реальных транков начинается с mp1... и kostr3...



[SuperTrunk]
; Vibor trunk'a po ocheredi dlya ravnomernogo raspredeleniya vizovov
exten => _X.,1,NoOp(super trunk)
exten => _X.,n,GotoIf( $[ "${DB_EXISTS(SUPERTRUNKS/TRUNKSNAME)}" != "0" ]?begindial)
;Poluchenie spiska imen trunkov
exten => _X.,n,MYSQL(Connect connid localhost asteriskuser <password> asterisk)
exten => _X.,n,MYSQL(Query resulid ${connid} select name from trunks where disabled='off' and name like 'mp1%' or name like 'kostr3%')
exten => _X.,n(nextname),MYSQL(Fetch foundResult ${resulid} trunk)
exten => _X.,n,GotoIf($[ "${TRUNKDOUBLE}" = "${trunk}" ]?end)
exten => _X.,n,Set(TRUNKDOUBLE=${trunk})
exten => _X.,n,Set(TRUNKSNAME=${TRUNKSNAME}-${trunk})
exten => _X.,n,GotoIf($[ "${foundResult}" = "1" ]?nextname)
exten => _X.,n(end),MYSQL(Clear ${resulid})
exten => _X.,n,MYSQL(Disconnect ${connid})
exten => _X.,n,Set(DB(SUPERTRUNKS/TRUNKSNAME)=${TRUNKSNAME:1})
;Berem imya pervogo v spiske
exten => _X.,n(begindial),Set(StopTrunk=${CUT(DB(SUPERTRUNKS/TRUNKSNAME),-,1)})
exten => _X.,n(trunkbusy),Set(CurrentTrunk=${CUT(DB(SUPERTRUNKS/TRUNKSNAME),-,1)})
exten => _X.,n,Set(DB(SUPERTRUNKS/TRUNKSNAME)=${CUT(DB(SUPERTRUNKS/TRUNKSNAME),-,2-)}-${CurrentTrunk})
;Proveryaem dostupnost (call-limit=1) and delaem vizov
exten => _X.,n,ChanIsAvail(SIP/${CurrentTrunk},s)
exten => _X.,n,NoOp(STATUS=${AVAILSTATUS})
exten => _X.,n,GotoIf($[ "${AVAILSTATUS}" != "1" ]?trunkbusy)
exten => _X.,n,MYSQL(Connect connid localhost asteriskuser <password> asterisk)
exten => _X.,n,MYSQL(Query resulid ${connid} SELECT trunkid from trunks where name like '${CurrentTrunk}')
exten => _X.,n,MYSQL(Fetch foundResult ${resulid} trunk)
exten => _X.,n,MYSQL(Clear ${resulid})
exten => _X.,n,MYSQL(Disconnect ${connid})
exten => _X.,n,Macro(dialout-trunk,${trunk},${EXTEN},)
exten => _X.,n,Hangup()


Далее нужно создать Custom trunk вида: Local/$OUTNUM$@SuperTrunk/n

Заметка: всё делалось в сжатые сроки и скорее всего требует оптимизации, и не плохо было бы сделать интеграцию с веб-интерфейсом. Но пока это понадобилось только одному клиенту и не имеет актуальности.

Комментариев нет:

Отправить комментарий