Asterisk Local channel
chan_local - это псевдоканал. Использование этого канала в плане набора позволяет просто перенаправить уже поступивший вызов в другой контекст плана набора. Часто используется при рекурсивном поиске маршрута для поступившего вызова; В данном случае имеется возможность вернуться в исходную точку в плане набора после завершения вызова.
Синтаксис:
Local/extension@context[/n]
Назначение:
Конструкции с использованием Локального канала могут быть использованы для отправки поступившего вызова в любую точку Вашего плана набора.
Предположим, что в вашей системе имеется карта TE410P. И Вы хотите сделать некие действия, при которых Вам понадобиться использовать команду Dial (например, когда вы помещаете файл для автоматического набора в /var/spool/outgoing), но еще хотите использовать в вашем плане набора процедуру поиска маршрута с минимальной стоимостью (least-cost-routes) или другие алгоритмы. То, что нам нужно сделать до набора номера, мы делаем до того, как chan_local создаст связь между двумя портами, один из которых - это E410P, а другой - это место, где используется команда Dial для совершения вызовов. При этом Вы можете полностью контролировать действия в том месте плана набора, где совершаются исходящие вызовы.
Конечно, это можно было сделать, применив некоторые уловки, но с использованием chan_local позволяет сделать этот процесс более понятным.
Драйвер канала «Local» позволяет вам конвертировать любой екстеншен в канал. Это используется в различных ситуациях, включая работу с агентами очереди вызовов и т.д.
Ниже приведены некоторые примеры (в основном при использовании конференций), где может быть использован локальный канал:
- Допустим, что вы хотите сделать WEB интерфейс для билинга использования конференций… Вы можете создать Ваш скрипт, который будет спрашивать вызываемый номер, и использовать «Local/number@context» в качестве канала в Вашем .call файле, где вы определяете конференцию в качестве екстеншена для вызова.
- Предположим, что вы хотите соединить две конференции между собой.
- Предположим, что вы хотите добавить музыку ожидания (MusicOnHold) в конференцию (только вот зачем).
- Вы хотите использовать .call файлы для автоматического набора номера, а так же хотите быть уверенными, что CDR записи и записи в логе будут созданы.
Это так же позволяет нам переходить из контекста в контекст, как при использовании команды Команда Asterisk Gosub; Смотри примеры ниже.
Примеры:
[ inbound ] ; Сюда поступают все входящие вызовы exten => s,1,Answer exten => s,2,Dial(local/200@internals,30,r) exten => s,3,Playback(sorrynoanswer) exten => s,4,Hangup [ internals ] ; сюда наши телефоны попадают по умолчанию exten => 200,1,Dial(sip/blah) exten => 200,102,VoiceMail(${EXTEN}@default) exten => 201,1,Dial(zap/1) exten => 201,102,VoiceMail(${EXTEN}@default) exten => _0.,1,Dial(Zap/g1/${EXTEN:1}) ; исходящие вызовы в виде 0+номер so that let me to call a local (internal) extension, without:
- duplicate the Dial & voicemail statements
- don't letting them to Dial out, since in internal context I have the possibility to dialout.
Если Вы используете chan_local в Ваших call-файлах и Вы хотите передать некоторые переменные канала в Ваш контекст, не забудьте добавить '/n', так как иначе chan_local сам себя 'оптимизирует' и вырежет себя из пути прохождения вызова, и как следствие значения переменных будут потеряны. Например:
Local/00531234567@pbx описывайте как: Local/00531234567@pbx/n
~~socialite~~