Обратимся к локальным номерам. При поступлении на Астериск запроса номера, например, 1202, одного из менеджеров, как можно увидеть из конфигурации файла «sip.conf», Астериск выполняет команду запуска приложения Dial. Данное приложение устанавливает канал связи между звонящим пользователем и его адресатом. В приложении имеются протокол, по которому пойдем передача (в частности по этому протоколу Астериск узнает в каком файле искать пользователя), переменная ${EXTEN} (в эту переменную заносится запрашиваемый номер) и длительность ожидания ответа от адресата. Все это описывается строчкой:
exten => _1XXX,1,Dial(SIP/${EXTEN},20)
Далее идет команда разрыва канала, если разговор не состоялся, или состоялся и прекращен любым из разговаривавших абонентов. Это описывается строчкой:
exten => _1XXX,n,Hangup()
Приложение Hangup() отвечает за разрыв канала связи.
Теперь можно объяснить, почему для удобства пользователи названы соответствующими им номерами телефонов. Чтобы перенаправить вызов необходимо указать в приложении Диал протокол и имя пользователя. Если бы у нас номера телефонов и имена пользователей были различны, то пришлось бы прописывать большее количество информации. Работая только с номерами и переменной, мы умещаем часть диалплана всего в одну строчку кода.
В контексте «incoming-sip» у нас имеются еще пару непонятных строк.
exten => _8932XXXXXXX,1,Dial(Datacard/megafon/${EXTEN},60)=> _8922XXXXXXX,1,Dial(Datacard/megafon/${EXTEN},60)=> _8912XXXXXXX,1,Dial(Datacard/mts/${EXTEN},60)=> _8982XXXXXXX,1,Dial(Datacard/mts/${EXTEN},60)=> _8965XXXXXXX,1,Dial(Datacard/beeline/${EXTEN},60)
Эти команды позволяют пользователям внутренней телефонии звонить на мобильные телефоны различных операторов по протоколу Датакард. Синтаксис такой же, как и в предыдущем случае, только вместо пользователя указывается модем, содержащий сим-карту нужного оператора, чтобы вызов проходил в домашней сети оператора. Предполагается, что на сим-картах стоят тарифы, которые поддерживают бесплатные звонки в домашней сети оператора, и поэтому идет такое жесткое разграничение.
exten => _2XXX,1,Dial(IAX2/office1:pass4office1@office2/${EXTEN},20)
Здесь звонок идет по протоколу IAX2 на другой астериск. Как видно, тут достаточно просто задать такое условие: если первая цифра в добавочном номере двойка, то перенаправлять звонок на другой Астериск. В этом случае второй Астериск принимает звонок и смотрит в файл «iax.conf», какой указан контекст диалплана, согласно которому необходимо обслужить поступивший вызов.
На этом маршрутизация локальных вызовов заканчивается. Хотя здесь поле действий обширно. Можно сделать так, чтобы директору могли звонить только определенные пользователи и так далее. Как это сделать будет рассказано далее.
В заданном диалплане имеется еще один контекст, согласно которому обслуживаются вызовы, поступающие с мобильных телефонов на 3G модем. Это внешние входящие вызовы. Здесь все немного сложнее.
Люди, звонящие в компанию, не знают внутренней нумерации, и в этом им необходимо помочь, то есть перенаправить вызов кому следует. Заставлять заниматься этим отдельного человека, или отнимать рабочее время у уже занятого сотрудника не рентабельно. С этим может легко справиться заранее записанное голосовое меню.
exten => s,1,Answer()
exten => s,n,Background(/home/company2) => s,n,WaitExten()
Эта часть кода отвечает за эту функцию. Сначала необходимо ответить на поступивший вызов. За это отвечает команда Answer(). Затем, следующим шагом, Астериск обрабатывает следующую команду - запускает приложение Background(/home/company2). Именно это приложение проигрывает записанное голосовое меню. Как видно из аргументов приложения (часть кода в скобках), оно проигрывает файл company2, который находится в папке /home/.
Следующая команда это выполнения приложения WaitExten(). Это приложение ожидает от пользователя ввода дополнительного номера. То есть после проигрывания голосового меню или во время проигрывания, адресант вводит дополнительный номер, сказанный ему в меню, чтобы попасть туда, куда он желает. Именно эти цифры ожидает приложение WaitExten().
После получения доп. Номера астериск приступает к следующим командам.
exten => _11XX,1,Dial(SIP/1101&SIP/1102&SIP/1103)=> _11XX,n,Hangup()=> _12XX,1,Dial(SIP/1201&SIP/1202&SIP/1203)=> _12XX,n,Hangup()=> _13XX,1,Dial(SIP/1301&SIP/1302)=> _13XX,n,Hangup()=> _14XX,1,Dial(SIP/1401) => _14XX,n,Hangup()
Эти команды как раз отвечают за маршрутизацию звонков в кабинет, выбранный пользователем. Рассмотрим первые две строчки. При доп. номере 1102, Астериск запускает приложение Диал и устанавливает связь со всеми тремя пользователями, описанными в аргументах данного приложения. Адресант не знает к кому конкретно пройдет вызов (да ему это и не нужно знать), так как вызов идет одновременно на три телефона. Кто первым из пользователей возьмет трубку, с тем и установит канал Астериск, а два других телефона замолкнут.
Проектирование волоконно-оптических линий связи
Волоконно-оптические линии связи (ВОЛС) в настоящее
время занимают заметное место в системах передачи информации как
общегражданского, так и специализирован ...
Утечка речевой информации по волоконно-оптическим линиям
На смену медным проводам постепенно приходят волоконно-оптические линии
связи. Они обеспечивают большую пропускную способность, они долговечнее.
Однако, ...
Программное обеспечение для предварительных испытаний манипулятора грунтозаборного комплекса космического аппарата Фобос-грунт
Важным этапом отработки агрегатов и устройств КА является процесс их
испытаний. Современные испытания немыслимы без автоматизации испытаний, наряду
с исполь ...