- База знаний
- Пример файла конфигурации XML для Cisco 8851 phone
- Пример файла конфигурации XML для Cisco 7970 phone
- Пример файла конфигурации XML для Cisco 9971
- Отладка VoIP звонка с Wireshark
- Книги
- Использование поля Diversion в SIP пакете
- Астериск и Н.323
- ISDN release cause codes
- Пример файла конфигурации голосового шлюза Cisco
- Пример конфигурации интерфейса E1 PRI в голосовом шлюзе Cisco
- Аналоговое зло
- Интернациональные телефонные коды стран
- Практикум по интеграции Астериск в комплексе с OpenBSC/Osmocom
- Факс по IP
ChanIsAvail
Назначение
Проверка на доступность каналаОписание
ChanIsAvail (Technology/resource[&Technology2/resource2...][|options])Проверяет есть ли доступные каналы для совершения вызова.
Этой командой будут установлены значения следующих переменных:
${AVAILCHAN} - имя канала доступного для совершения вызова, если такой есть.
${AVAILORIGCHAN} - стандартное имя канала, которое было использовано при его создании
${AVAILSTATUS} - содержит код статуса доступного канала.
Опции (появились, начиная с Asterisk v1.2?):
s - Рассматривает канал как недоступный, если он всегда используется.j - Включает поддержку перехода на команду с приоритетом n+101, если нет доступных каналов.
Некоторые моменты
На данный момент, ChanIsAvail работает только для каналов ZAP, IAX2, mISDN и SIP. Протокол MGCP - не поддерживается.
Если из запрашиваемых каналов нет ни одного доступного для совершения вызова, то будет совершен переход на приоритет n+101 (за исключением случаев, когда приоритета с таким значением не существует. В этом случае кодом возврата команды ChanIsAvail будет значение -1).
Если есть один или более доступных каналов, из запрашиваемых, то следующей командой будет та, что задана с приоритетом n+1, а в переменной канала ${AVAILCHAN} будет возвращено имя доступного канала, а код возврата команды ChanIsAvail будет значение 0.
Каналы проверяются на доступность в том порядке, в каком они перечислены в команде. В переменной ${AVAILCHAN} будет возвращено имя первого доступного канала из списка.
Обратите внимание, что команда ChanIsAvail() возвратит в переменной $AVAILCHAN не только имя канала, но еще и добавит к нему идентификатор сессии канала (channel session ID). Вам необходимо будет отделить этот идентификатор, например, как показано в нижеприведенном примере.
SIP, IAX
Команда ChanIsAvail - это не решение вопроса занят ли вызываемый абонент или нет, ее основная задача сообщить Вам имеется ли возможность совершить вызов заданного екстеншена. А решение о том будет ли Ваш вызов успешным или нет, полностью зависит от клиента, которого Вы вызываете, а он может просто отвергнуть Вашу попытку вызова, однако это совсем не значит, что абонент находится в состоянии "занятости" (busy).Итак: Если Вы хотите использовать команду ChanIsAvail для определения того, что SIP клиент зарегистрирован или известен системе, то это будет работать прекрасно. Если же с ее помощью Вы хотите ограничить число одновременных вызовов абоненту, то с большой вероятностью эта команда Вам не поможет.
Пример
; Проверяем занятость линии 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
Комментарии пользователей
Канал SIP и команда ChanIsAvail (декабрь 2005)
Согласно: bug 4506, команда Chanisavail совсем не предназначена для определения занят ли вызываемый телефон или нет, она только проверяет, имеется ли возможность у asterisk совершить вызов указанного абонента.Попытки использовать ограничение числа вызовов и команды Chanisavail для канала SIP не работают. Количество занятых каналов определяется только для вызываемых абонентов (peer), и когда он получает входящий вызов, на который нет ответа, то количество занятых каналов уменьшается и остается прежним, что, вроде как, ошибочное предположение.
Вместо этого способа, используйте группы.
Ссылки по теме:
Вернуться в Asterisk - documentation of application commands