Ну вот мы и добрались до сердца Asterisk! Dialplan - это движок Asterisk, где происходит вся магия Asterisk. Он находится в файле extension.conf. И здесь настраивается что набирать, как набирать и кому набирать.
Мы уже зарегистрировали два софтфона, а теперь давайте наладим между ними связь.
Dialplan это скриптовый язык программирования Asterisk. А значит у него есть свой синтаксис, как и у любого другого языка. Рассмотрим его. Итак, сторона A набирает сторону B.
exten - оператор набора Asterisk. 99% программистов Asterisk используют только его. Потому что в большинстве случаев этого достаточно.
Что набираем - по сути, это набор клавиш на телефоне
Номер действия - приоритет наших действия, которые будут происходить с вызовом. Чаще всего вам достаточно будет только 1-го приоритета.
Dial - оператор вызова. Ставится перед скобками.
Что вызывается - это устройство, которое будет вызываться. Его берут из файла sip.conf в папке asterisk
Таймаут - время в секундах, которое будет совершаться вызов, пока сторона B не возьмет трубку, или сторона A не устанет ждать и не повесит свою трубку. В данном пример таймаут стоит 20 секунд, а значит, если соединения не произошло, то через 20 секунд вызов просто оборвется. Если значение оставить пустым, вызов будет продолжаться 136 лет!
Приоритет вызова в Asterisk
Если нужно помимо просто звонка направить вызов дальше по истечению таймаута, применятся последовательность приоритетов.
exten => 1001,1,Dial()
exten => 1001,2,делаем что-то
exten => 1001,3,делаем что-то ещё
exten => 1001,4,сделаем ещё одну вещь
exten => 1001,5,Hangup()
Hangup() - оператор завершения вызова Asterisk. Можно упросить эту запись:
exten => 1001,1,Dial()
same => n,делаем что-то
same => n,делаем что-то ещё
same => n,сделаем ещё одну вещь
same => n,Hangup()
same - это по сути "тоже самое", то есть строка, которая относится к первой строке, как продолжение приоритетов.
n - порядковый номер приоритета. Берется из номера строки, следующей после основной или ниже.
Это удобная запись в Asterisk, так как она экономит время. А еще можно вставить новую строку в любое место и не переписывать наши приоритеты.
Какие еще бывают операторы вызова в dialplan кроме Dial и Hangup?
Dial – вызов
Wait – ожидание
Answer – ответ (был вместо Dial, но сейчас почти не используется)
Playback – проиграть звуковой файл
Voicemail – голосовая почта
Background – голосовое меню IVR
Goto – переход по цифре в IVR
Directory – вызов каталога
Hangup – закончить вызов
А теперь задание для вас. Опишите последовательность следующего вызова:
exten => 1001,1,Dial(SIP/1001,15)
same => n,Playback(vm-nobody)
same => n,Hangup()
Догадались? Правильно! Вызывается номер 1001. Если абонент в течение 15 секунд не взял трубку, вызов направляется на звуковой файл (извините, не могу ответить), а потом прерывается.
Чаще всего бывает так, что у вас в офисе большинство или даже все абоненты Asterisk не нуждаются в особых настройках и работают по одному шаблону. Давайте создадим этот шаблон:
exten => _10XX,1,Dial(SIP/${EXTEN},20)
Нижнее подчеркивание - крайне важная деталь шаблона dialplan. Именно она говорит, что далее будет шаблон.
X - маска, любые цифры от 0 до 9.
${EXTEN} - это место назначения вызова, соответствующее набору. То есть, то что набираем, туда и отправляем.
Контекст в dialplan Asterisk
Наш dialplan делится на контексты. Для исходящих вызовов контекст один, для входящих другой, для особых - третий, и так далее. Синтаксис контекста такой:
[general]
[from-internal]
Заключен в квадратные скобки и берется из файла sip.conf, мы о нем говорили, когда задавали настройки абонента. Вот тут:
Контекст [general] задается всегда и самым первым.
Итак, давайте позвоним в сам Asterisk! Заинтриговал?
[general]
[from-internal]
exten => 999, 1,playback(hello-world)
При наборе 999 (тут может поставить любое число) мы услышим первые слова нашего Asterisk: "Привет Мир!"
Ну а теперь пришло время наладить связь между нашими абонентами. Добавим туда еще 2 строки:
[general]
[from-internal]
exten => 999, 1,playback(hello-world)
exten => 1001,1,Dial(SIP/1001,20)
exten => 1002,1,Dial(SIP/1002,20)
или так:
[general]
[from-internal]
exten => 999, 1,playback(hello-world)
exten => _10XX,1,Dial(SIP/${EXTEN},20)
Смело звоните и смотрите в ваш CLI-интерфейс:
Лицезрите свой Первый Вызов!
Получилось? Поздравляю! Вы приобщились к когорте избранных! Можно и отпраздновать! )
Не получилось? Пройдитесь по настройкам. Ведь это язык программирования. Где-то не закрыта скобка, где-то кириллица вместо латиницы, где-то не хватает или лишняя запятая. И у вас обязательно получится. У меня же получилось:
В следующим уроке мы подключим транк - городскую линию с номером!
Если хотите разбираться в Asterisk профессионально, добро пожаловать на наш курс обучения Aserisk в Академии АТС. Описание курса.
Друзья, ставьте лайки и подписывайтесь на канал! И помните, специалисты со знанием АТС получают на 40% больше своих коллег!
Обучение Asterisk. Как выбрать курс.