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

Skip to end of metadata
Go to start of metadata

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

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

Астериск может использовать глобальные и канальные переменные в аргументах команд. Обратиться к переменной в диалплане (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
Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.