Использование переменных в диалпланах Астериска.
Введение в переменные
Астериск может использовать глобальные и канальные переменные в аргументах команд. Обратиться к переменной в диалплане (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
TODO
Перевести с http://www.voip-info.org/wiki-Asterisk+variables:
- Application-specific variables
- Macro-specific variables
- Environment Variables
- String Handling Functions
- Substrings
- String Concatenation