Хотелось, чтобы при звонке на внешний номер во-первых, звонок уходил через рандомную незанятую линию из 10 - это раз. Два - если все линии заняты, об этом бы сообщалось позвонившему и он бы вставал в очередь в ожидании, когда хотя бы одна освободится.
Всё просто. Пока у меня есть такой вот кусок для двух GSM каналов:
Код: Выделить всё
; Звонки на сотовые
[to-gsm]
; Если указана исходящая линия - всё просто
exten => _gsmli.eX-89XX.,1,Dial(SIP/${EXTEN:0:8}/${EXTEN:9},120,T)
; Иначе сложней - проверяем, есть ли свободные линии
exten => _89XX.,1,GotoIf($["${GROUP_COUNT(publick@gsm)}" >= "2"]?noline)
; Вроде как есть свободные...
exten => _89XX.,n,Set(GROUP(gsm)=publick) ; Устанавливаем группу, дабы считать каналы
; Ok, проверяем - не мегафоновский ли номер вызываем?
exten => _89XX.,n,Set(PR=${EXTEN:1:3})
exten => _89XX.,n,GotoIf($[$["${PR}"="921"] | $["${PR}"="931"] | $["${PR}"="921"]]?prefer-megafon)
; Не мегафоновский
exten => _89XX.,n,GotoIf($["${DEVICE_STATE(SIP/gsmline2)}" = "NOT_INUSE"]?tele2:megafon)
; Или всё же мегафоновский...
exten => _89XX.,n(prefer-megafon),GotoIf($["${DEVICE_STATE(SIP/gsmline1)}" = "NOT_INUSE"]?megafon:tele2)
; Соединяемся
exten => _89XX.,n(tele2),Dial(SIP/gsmline2/${EXTEN},120,T)
exten => _89XX.,n(megafon),Dial(SIP/gsmline1/${EXTEN},120,T)
; Если все каналы заняты
exten => _89XX.,n(noline),Set(__CALLED_GSM_NUM=${EXTEN}) ; Запоминаем вызываемый номер
exten => _89XX.,n,Goto(ivr-gsm,no-line,1)
Очередь, очевидно, решает все эти проблемы. И вопрос был в том, как заставить очередь вызывать члена, передавая ему номер (без понятия, какая правильная терминология тут должна использоваться).