Объединение SIP транков в группу

Объединение SIP транков в группу

В данной статье мы кратко расскажем как выполнить балансировку SIP-транков, объединив их в группу
[custom_group]
exten => _X.,1,Set(trunks=trunk1-trunk2-); сюда транк
exten => _X.,2,Set(trunk_count=2); сюда количество
exten => _X.,n(loop),Set(n=${RAND(1,${trunk_count})})
exten => _X.,n,Set(trunk=${CUT(trunks,-,${n})})
exten => _X.,n,Set(trunks=${CUT(trunks,-,1-$[ ${n} - 1 ]&$[ ${n} + 1 ]-)})
exten => _X.,n,Set(trunk_count=$[ ${trunk_count} - 1 ])
; следующие две строчки нужны только  если количесвто звонков на транк =1, иначе удалить
exten => _X.,n,Set(GROUP(trunks_active)=${trunk})
exten => _X.,n,GotoIF($[ ${GROUP_COUNT(${trunk}@trunks_active)} > 1 ]?skip); if already calls on that trunk,skip
exten => _X.,n,Dial(SIP/${trunk}/+${EXTEN},,g)
exten => _X.,n,Noop(status ${DIALSTATUS} time ${ANSWEREDTIME} );show time
exten => _X.,n,GotoIf($[ "${DIALSTATUS}" == "ANSWER" ]?end)
exten => _X.,n,GotoIf($[ "${DIALSTATUS}" == "BUSY" ]?end)
exten => _X.,n,GotoIf($[ ${LEN(${trunks})} <= 1 ]?end)
exten => _X.,n(skip),Goto(loop)
exten => _X.,n(end),Hangup

Диалплан исходящего вызова:

Exten => _X.,1,Dial(Local/${EXTEN}@custom_group/n,,)

Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.