Шрифт:
[incoming]
exten => 123,1,Answer
exten => 123,n,Background(enter-ext-of-person) exten => 123,n,WaitExten
exten => 1,1,Dial(${JOHN},10) exten => 1,n,Playback(vm-nobodyavail) exten => 1,n,Hangup
exten => 2,1,Dial(${JANE},10) exten => 2,n,Playback(vm-nobodyavail) exten => 2,n,Hangup
exten => i,1,Playback(pbx-invalid) exten => i,n,Goto(incoming,123,1)
exten => t,1,Playback(vm-goodbye) exten => t,n,Hangup
[employees]
include => outbound-local include => outbound-long-distance
exten => 101,1,Dial(${JOHN}) exten => john,1,Dial(${JOHN}) exten => 102,1,Dial(${JANE}) exten => jane,1,Dial(${JANE})
[outbound-local]
exten => _9NXXXXXX,1,Dial(${OUTBOUNDTRUNK}/${EXTEN:1}) exten => _9NXXXXXX,n,Congestion exten => _9NXXXXXX,n,Hangup
exten => 911,1,Dial(${OUTBOUNDTRUNK}/911) exten => 9911,1,Dial(${OUTBOUNDTRUNK}/911)
[outbound-long-distance]
exten => _91NXXNXXXXXX,1,Dial(${OUTBOUNDTRUNK}/${EXTEN:1})
exten => _91NXXNXXXXXX,n,Playtones(congestion) exten => _91NXXNXXXXXX,n,Hangup
Эти два выражения include обеспечивают абонентам из контекста [employees] возможность осуществлять исходящие вызовы. Также нужно заметить следующее: в целях безопасности всегда необходимо убедиться в том, что контекст [inbound] (входящие) не допускает возможности исходящих звонков. (Если вдруг это стало бы возможным, люди могли бы дозваниваться в вашу систему, а затем делать исходящие платные звонки за ваш счет!)
Заключение
И вот он готов - базовый, но вполне функциональный диалплан. Это не совсем полный набор возможных свойств, но основные из них были рассмотрены. В следующих главах наш базовый диалплан будет дополнен новыми функциями.
Если какие-то части данного диалплана вызывают у вас вопросы, вероятно, вам следует вернуться немного назад и перечитать раздел или два, прежде чем переходить к следующей главе. Крайне важно понимать все эти основные принципы и их применение, потому что они являются основой для изучения следующих глав.6
Дополнительные концепции диалплана
Чтобы получить список всех направлений, в которых технологии не смогли улучшить качество жизни, пожалуйста, нажмите три.
– Элис Кан
Отлично. Основные принципы диалплана рассмотрены, но многое впереди. Если вы еще не до конца разобрались с предыдущей главой, пожалуйста, вернитесь назад и перечитайте ее. Мы собираемся переходить к более сложным вопросам.
Выражения и работа с переменными
Поскольку мы начинаем погружение в более глубокие аспекты диал- плана, пришло время представить несколько инструментов, которые могут значительно увеличить его мощь. Эти структуры невероятно усложнят логику диалплана, обеспечив ему возможность принимать решения на основании различных задаваемых критериев. Итак, собрались с мыслями - и начнем.
Элементарные выражения
Выражения - это сочетания переменных, операторов и значений, объединяемые для получения результата. Выражение может тестировать значения, изменять строки или выполнять вычисления. Допустим, имеется переменная COUNT. Возьмем два возможных выражения, составленных с использованием этой переменной: «COUNT плюс 1» и «COUNT разделить на 2». Каждое из этих выражений имеет конкретный результат или значение, зависящие от значения данной переменной.
В Asterisk выражения всегда начинаются со знака доллара ($) и открывающей квадратной скобки и заканчиваются закрывающей квадратной скобкой:
$[выражение]
Таким образом, упомянутые выше примеры будут записаны так:
$[${COUNT} + 1] $[${COUNT} / 2]
Когда Asterisk встречает в диалплане выражение, она заменяет его результирующим значением. Важно отметить, что это происходит после подстановки переменных. Чтобы продемонстрировать это, посмотрим на следующий фрагмент кода1:
exten => 321,1,Set(COUNT=3)
exten => 321,n,Set(NEWCOUNT=$[${COUNT} + 1])
exten => 321,n,SayNumber(${NEWCOUNT})
В первом приоритете переменной COUNT присваивается значение 3. Во втором приоритете участвует только одно приложение, Set, но фактически выполняется три действия:
1. Asterisk подставляет в выражении вместо ${COUNT} число 3. Выражение, в сущности, превращается в следующее:
exten => 321,n,Set(NEWCOUNT=$[3 + 1])
2. Asterisk вычисляет выражение, суммируя 1 и 3, и заменяет его вычисленным значением, 4: