Переменные

глобалные переменные
переменные канала
переменные среды

Переменные, используемые в диалплане Asterisk, способствуют сокращению объёма вводимого текста, делают код более понятным или вводят дополнительную логику.

Переменные, можно рассматривать как контейнер, в котором в данный момент времени может храниться одно значение. Например, мы могли бы создать переменную IVANOV и присвоить ей значение Zap/1. Теперь при написании диалплана можно ссылаться на канал Иванова по имени, а не запоминать, что Иванов использует канал, названный Zap/1.

Существует два способа использования переменной. Чтобы сослаться на имя переменной, просто вводится её имя, например, IVANOV. Если, с другой стороны, требуется сослаться на её значение, то необходимо ввести знак доллара ($), открывающую фигурную скобку ({), имя переменной (IVANOV) и закрывающую фигурную скобку (}). Вот как используется переменная в приложении Dial():

exten => 123, 1, Dial(${IVANOV})

В нашем диалплане 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]:

[globals] IVANOV=Zap/1 [employees] exten => 124, 1, Set(GLOBAL(PETROV)=SIP/Petrov)

Переменные канала

Переменная канала - это переменная, связанная только с конкретным вызовом. В отличии от глобальных переменных, переменные каналов определяются только на время текущего вызова и доступны лишь для каналов, учавствующих в нём.

Для использования в диалплане предопределено множество переменных каналов. Они описаны в файле channelvariables.txt, находящемся в подпапке doc папки исходного кода Asterisk. Переменные каналов задаются с помощью приложения Set():

exten => 125, 1, Set(MAGICNUMBER=42)

Переменнные среды

Переменные среды - это средство организации доступа к переменным среды Linux/Unix из Asterisk. Для их использования служит функция диалплана ENV(). Её синтаксис выглядит следующим образом:

${ENV(var)}

где:

var
переменная среды Linux/Unix, на которую выполняется ссылка

Переменные среды используются в диалпланах не часто, но они доступны на случай необходимости.