Asterisk предоставляет возможность использовать добавочные номера из одного контекста в другом контексте с помощью директивы include (включить). Так можно управлять доступом к различным разделам диалплана. Мы будем применять функциональность включения, чтобы дать возможность пользователям из контекста [employees] делать исходящие звонки. Но сначала давайте рассмотрим синтаксис. Выражение include имеет следующий вид, где контекст - имя удаленного контекста, который требуется включить в текущий: include => контекст
При включении контекстов друг в друга необходимо внимательно продумать порядок их включения. Asterisk сначала будет пытаться найти
соответствие набранному добавочному номеру в текущем контексте. В случае неудачи она будет рассматривать контекст, включенный первым (в том числе все включенные в него контексты), а затем будет переходить от одного контекста к другому в порядке их включения. На данный момент в нашем диалплане есть два контекста для исходящих вызовов, но абоненты из контекста [employees] не могут их использовать. Исправим это, включив оба исходящих контекста в контекст [employees], как показано в примере: [globals] JOHN=Zap/1 JANE=SIP/Jane OUTBOUNDTRUNK=Zap/4
[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 выражения всегда начинаются со знака доллара ($) и открывающей квадратной скобки и заканчиваются закрывающей квадратной скобкой:
Читать дальше