Переменные
глобалные переменныепеременные канала
переменные среды
Переменные, используемые в диалплане Asterisk, способствуют сокращению объёма вводимого текста, делают код более понятным или вводят дополнительную логику.
Переменные, можно рассматривать как контейнер, в котором в данный момент времени может храниться одно значение. Например, мы могли бы создать переменную IVANOV и присвоить ей значение Zap/1. Теперь при написании диалплана можно ссылаться на канал Иванова по имени, а не запоминать, что Иванов использует канал, названный Zap/1.
Существует два способа использования переменной. Чтобы сослаться на имя переменной, просто вводится её имя, например, IVANOV. Если, с другой стороны, требуется сослаться на её значение, то необходимо ввести знак доллара ($), открывающую фигурную скобку ({), имя переменной (IVANOV) и закрывающую фигурную скобку (}). Вот как используется переменная в приложении Dial():
В нашем диалплане Asterisk будет автоматически заменять все ссылки ${IVANOV} значением, присвоенным переменной под именем IVANOV.
Обратите внимание, что имена переменных чувствительны к регистру. IVANOV и Ivanov - это разные переменные. Для удобства чтения все имена в примерах будут записываться в верхнем регистре. Также следует помнить, что все переменные, заданные Asterisk, тоже будут записаны прописными буквами. Некоторые переменные, такие как CHANNEL или EXTEN, зарезервированы Asterisk. Не надо пытаться задавать их.
В диалплане используется три типа переменных: глобальные переменные, переменные канала и переменные среды.
Глобальные переменные
Как следует из их названия, глобальные переменные применяются ко всем добавочным номерам во всех контекстах. Глобальные переменные полезны тем, что могут использоваться в любом месте диалплана, повышая читабельность и обслуживаемость кода. Предположим, имеется большой диалплан и несколько сотен ссылок на канал Zap/1. Теперь представим, что необходимо пересмотреть весь диалплан и изменить все эти ссылки на Zap/2. Это был бы, мягко выражаясь, долгий и чреватый ошибками процесс.
Но если бы в начале диалплана была определена переменная со значением Zap/1 и далее использовались лишь ссылки на неё, то потребовалось бы изменить только одну строку.
Глобальные переменные объявляются в контексте [globals] в начале файла extensions.conf. Их можно также задать программно с помощью функции диалплана GLOBAL(). Вот пример использования обоих методов задания переменных в диалплане. В первом варианте глобальной переменной IVANOV присваивается значение Zap/1. Эта переменная задаётся в момент, когда Asterisk выполняет синтаксический разбор диалплана. Второй пример представляет, как можно задать глобальную переменную в процессе исполнения диалплана. В этом случае переменной PETROV присваивается значение SIP/Petrov при выполнении звонка на добавочный номер 124 в контексте [employees]:
Переменные канала
Переменная канала - это переменная, связанная только с конкретным вызовом. В отличии от глобальных переменных, переменные каналов определяются только на время текущего вызова и доступны лишь для каналов, учавствующих в нём.
Для использования в диалплане предопределено множество переменных каналов. Они описаны в файле channelvariables.txt, находящемся в подпапке doc папки исходного кода Asterisk. Переменные каналов задаются с помощью приложения Set():
Переменнные среды
Переменные среды - это средство организации доступа к переменным среды Linux/Unix из Asterisk. Для их использования служит функция диалплана ENV(). Её синтаксис выглядит следующим образом:
где:
- var
- переменная среды Linux/Unix, на которую выполняется ссылка
Переменные среды используются в диалпланах не часто, но они доступны на случай необходимости.