Asterisk може використовувати глобальні та канальні змінні в аргументах команд. Звернутися до змінної в діалплані (extensions.conf) можна, використовуючи такий синтаксис:
${foo}
де foo - ім'я змінної. Ім'я змінної може складатися з будь-якої послідовності цифр і літер; і має починатися з літери. Імена змінних, визначених користувачем, не чутливі до регістру літер: ${FOO} і ${Foo} звертаються до однієї змінної; але змінні Asterisk чутливі до регістру: ${EXTEN} працює, а ${exten} - ні.
Є 3 типи змінних: глобальні, канальні та змінні оточення.
Глобальні змінні встановлюються або в розділі [global] файлу extensions.conf, або за допомогою команди Set(GLOBAL(var)=value). Встановлена змінна доступна всім каналам у будь-який момент.
Канальні змінні встановлюються командою Set. Кожен канал отримує свій простір змінних, тому між каналами конфліктів не виникає, і змінна автоматично видаляється після завершення каналу.
Змінні оточення дозволяють отримати доступ з Asterisk до 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.
Попередньо визначені канальні змінні
Asterisk визначає кілька канальних змінних, до яких можна звернутися в діалплані. Назви змінних, визначених Asterisk, чутливі до регістру.
${CONTEXT}: Ім'я поточного контексту
${DATETIME}: Поточна дата і час у форматі: !YYYY-MM-DD_HH:MM:SS
${TIMESTAMP}: Поточна дата і час у форматі: YYYYMMDD-HHMMSS
${EPOCH}: Поточний час UNIX-ової епохи (число секунд з 1 Jan 1970)
${EXTEN}: Поточний телефонний номер (extension)
${INVALID_EXTEN}: Набраний телефонний номер при переадресації на i (invalid) extension
${LANGUAGE}: Поточне значення мови. Дивіться підтримку національних мов в Asterisk
${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