Сначала смотрим синтаксис
Synopsis]
Check channel availability
[Description]
ChanIsAvail(Technology/resource[&Technology2/resource2...][,options][,context]):
This application will check to see if any of the specified channels are
available.
Options:
s - Consider the channel unavailable if the channel is in use at all.
t - Simply checks if specified channels exist in the channel list
(implies option s).
n - checks for the logical not of a context (implies there is a context).
Does nothing otherwise.
This application sets the following channel variable upon completion:
AVAILCHAN - the name of the available channel, if one exists
AVAILORIGCHAN - the canonical channel name that was used to create the channel
AVAILSTATUS - the status code for the available channel
Потом понимаем, что сравнивать надо как минимум два канала.
Команда ChanIsAvail возвращает в ${AVAILCHAN} первый доступный канал
- примерчики -
; Проверяем занятость линии 2. Если она занята, используем линию 1.
exten => s,1,ChanIsAvail(Zap/2&Zap/1)
; ${AVAILCHAN} может теперь содержать значение: Zap/2-1
; Нам необходимо отрезать идентификатор сессии.
exten => s,2,Cut(theChannel=AVAILCHAN,,1)
; переменная ${theChannel} должна теперь иметь значение: Zap/2
; Набираем через этот канал номер '12345678'
exten => s,3,Dial(${theChannel}/12345678)
exten => s,4,Hangup
; Если все линии заняты, проигрываем сообщение
exten => s,102,Playback(all-circuits-busy-now)
exten => s,103,Hangup
Разъяснения -
http://asterisk.ru/knowledgebase/Asterisk+cmd+ChanIsAvail
Прверять статус одинокого номера SIP/115 не нужно с помощью ChanIsAvail, это ж не транк. Для него лучше включить qualify=yes