Использование переменных в диалпланах Астериска

Администратор,

Введение в переменные

asterisk

Астериск может использовать глобальные и канальные переменные в аргументах команд. Обратиться к переменной в диалплане (extensions.conf) можно используя следующий синтакс:

${foo}

где foo - имя переменной. Имя переменной может состоять из любой последовательности цифр и букв; и должна начинаться с буквы. Имена переменных определённых пользователем не чувствительны к регистру букв: ${FOO} и ${Foo} обращатеся к одной переменной; но переменные Астериска чувствительны к регистру: ${EXTEN} работает, а ${exten} - нет.

Есть 3 типа переменных: глобальные, канальные и переменные окружения.

Глобальные переменные устанавливаются либо в разделе [global] файла extensions.conf или с помощью команды Set(GLOBAL(var)=value). Установленная переменная доступна всем каналам в любой момент.
Канальные переменные устанавливаются командой Set. Каждый канал получает своё пространство переменных, по-этому между каналами конфликтов не возникает и переменная автоматически удаляется по завершению канала.
Переменные окружения позволяют получить доступ из Астериска к UNIX-овым переменным окружения. Список - ниже на этой странице.
Если вы объявляете канальную переменную с таким же именем как у глобальной (помните: имена пользовательских переменных не чувствительны к регистру, обращения к этой переменной будут возвращать значение канальной. Например, вы определили контекст [FooTest] с единственным номером 100:
[FooTest]
exten => 100,1,Set(GLOBAL(FOO)=5)
exten => 100,2,NoOp(${FOO})
exten => 100,3,NoOp(${foo})
exten => 100,4,Set(foo=8)
exten => 100,5,NoOp(${FOO})
exten => 100,6,NoOp(${foo})
При звонке на номер 100 в контексте [FooTest], на консоле с подробным выводом будет отображено примерно следующее:
[2008-10-28 08:35:00]     -- Executing [100@comlib-operator:1] Set("SIP/700-b6c28b40", "GLOBAL(FOO)=5") in new stack
[2008-10-28 08:35:00]   == Setting global variable 'FOO' to '5'
[2008-10-28 08:35:00]     -- Executing [100@comlib-operator:2] NoOp("SIP/700-b6c28b40", "5") in new stack
[2008-10-28 08:35:00]     -- Executing [100@comlib-operator:3] NoOp("SIP/700-b6c28b40", "5") in new stack
[2008-10-28 08:35:00]     -- Executing [100@comlib-operator:4] Set("SIP/700-b6c28b40", "foo=8") in new stack
[2008-10-28 08:35:00]     -- Executing [100@comlib-operator:5] NoOp("SIP/700-b6c28b40", "8") in new stack
[2008-10-28 08:35:00]     -- Executing [100@comlib-operator:6] NoOp("SIP/700-b6c28b40", "8") in new stack
Мы обнаружили, что после вызова Set(GLOBAL(FOO=5)), ${FOO} и ${foo} возвращают значение глобальной переменной, выдавая значение 5. После вызова Set(foo=5), глобальная переменная FOO скрыта канальной переменной foo; ${FOO} и ${foo} обе выдают значение 8. Значение глобальной переменной остаётся неизменным, 5, и другие каналы, обращаясь к ${foo} получат значение 5.
Предопределённые канальные переменные
Астериск определяет несколько канальных переменных, к которым можно обратиться к диалплане. Названия переменных, определённые Астериском чувствительны к регистру.

${CONTEXT}: Имя текущего контекста
${DATETIME}: Текущая дата и время в формате: !YYYY-MM-DD_HH:MM:SS
${TIMESTAMP}: Текущая дата и время в формате: YYYYMMDD-HHMMSS
${EPOCH}: Текущее время UNIX-овой эпохи (число секунд с 1 Jan 1970)
${EXTEN}: Текущий телефонный номер (extension)
${INVALID_EXTEN}: Набранный телефонный номер при переадресации на i (invalid) extension
${LANGUAGE}: Текущее значения языка. Смотри поддержку национальных языков в Астериске
${PRIORITY}: Текущий приоритет
${CALLINGPRES}: PRI Call ID Presentation variable for incoming calls (See callingpres)
${CALLERID}: Идентификатор вызывающего (имя и номер)
${CALLERIDNAME}: Идентификатор вызывающего: имя
${CALLERIDNUM}: Идентификатор вызывающего: номер
${CHANNEL}: Имя текущего канала
${RDNIS}: The current redirecting DNIS, Caller ID that redirected the call. See RDNIS
${SIPDOMAIN}: SIP destination domain of an inbound call (if appropriate)
${SIP_CODEC}: Used to set the SIP codec for a call
${SIPCALLID}: The SIP dialog Call-ID: header
${SIPUSERAGENT}: The SIP user agent header
${UNIQUEID}: Current SIP call unique ID
${HANGUPCAUSE}: The last hangup return code on a Zap channel connected to a PRI interface
${DNID}: Dialed Number Identifier
${ACCOUNTCODE}: Account code, if specified - see Asterisk billing