Нужен был транк для исходящих вызовов который каждый новый вызов пускал через разные транки. Идея в распределении нагрузки по транкам.
В примере названия сущствующих реальных транков начинается с mp1... и kostr3...
В примере названия сущствующих реальных транков начинается с 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
Заметка: всё делалось в сжатые сроки и скорее всего требует оптимизации, и не плохо было бы сделать интеграцию с веб-интерфейсом. Но пока это понадобилось только одному клиенту и не имеет актуальности.
Заметка: всё делалось в сжатые сроки и скорее всего требует оптимизации, и не плохо было бы сделать интеграцию с веб-интерфейсом. Но пока это понадобилось только одному клиенту и не имеет актуальности.
Комментариев нет:
Отправить комментарий