Asterisk kann globale und kanalbezogene Variablen in den Argumenten von Befehlen verwenden. Der Zugriff auf eine Variable im Dialplan (extensions.conf) erfolgt mit der folgenden Syntax:
${foo}
wobei foo der Name der Variable ist. Der Variablenname kann aus einer beliebigen Folge von Ziffern und Buchstaben bestehen und muss mit einem Buchstaben beginnen. Von Benutzern definierte Variablennamen sind nicht case-sensitiv: ${FOO} und ${Foo} verweisen auf dieselbe Variable; Asterisk-Variablen sind jedoch case-sensitiv: ${EXTEN} funktioniert, ${exten} jedoch nicht.
Es gibt drei Arten von Variablen: globale, kanalbezogene und Umgebungsvariablen.
Globale Variablen werden entweder im Abschnitt [global] der Datei extensions.conf festgelegt oder mit dem Befehl Set(GLOBAL(var)=value). Eine festgelegte Variable ist für alle Kanäle jederzeit verfügbar.
Kanalbezogene Variablen werden mit dem Befehl Set festgelegt. Jeder Kanal verfügt über seinen eigenen Variablenraum, daher gibt es keine Konflikte zwischen Kanälen, und die Variable wird automatisch nach Beendigung des Kanals gelöscht.
Umgebungsvariablen ermöglichen den Zugriff aus Asterisk heraus auf UNIX-Umgebungsvariablen. Die Liste finden Sie weiter unten auf dieser Seite.
Wenn Sie eine kanalbezogene Variable mit demselben Namen wie eine globale Variable deklarieren (denken Sie daran: Benutzernamen sind nicht case-sensitiv), werden Aufrufe dieser Variable den Wert der kanalbezogenen Variable zurückgeben. Beispiel: Sie haben den Kontext [FooTest] mit der einzigen Nummer 100 definiert:
[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})
Beim Anruf der Nummer 100 im Kontext [FooTest] wird auf der Konsole mit detaillierter Ausgabe (verbose) ungefähr Folgendes angezeigt:
[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
Wir haben festgestellt, dass nach dem Aufruf von Set(GLOBAL(FOO=5)) sowohl ${FOO} als auch ${foo} den Wert der globalen Variable zurückgeben, also 5. Nach dem Aufruf von Set(foo=8) wird die globale Variable FOO durch die kanalbezogene Variable foo überschattet; sowohl ${FOO} als auch ${foo} geben den Wert 8 aus. Der Wert der globalen Variable bleibt unverändert bei 5, und andere Kanäle, die auf ${foo} zugreifen, erhalten den Wert 5.
Vordefinierte kanalbezogene Variablen
Asterisk definiert mehrere kanalbezogene Variablen, auf die im Dialplan zugegriffen werden kann. Die von Asterisk definierten Variablennamen sind case-sensitiv.
${CONTEXT}: Name des aktuellen Kontexts
${DATETIME}: Aktuelles Datum und Uhrzeit im Format: !YYYY-MM-DD_HH:MM:SS
${TIMESTAMP}: Aktuelles Datum und Uhrzeit im Format: YYYYMMDD-HHMMSS
${EPOCH}: Aktuelle UNIX-Epochenzeit (Anzahl der Sekunden seit dem 1. Januar 1970)
${EXTEN}: Aktuelle Telefonnummer (Extension)
${INVALID_EXTEN}: Eingewählte Telefonnummer bei Weiterleitung auf die Extension i (invalid)
${LANGUAGE}: Aktueller Sprachwert. Siehe Unterstützung nationaler Sprachen in Asterisk
${PRIORITY}: Aktuelle Priorität
${CALLINGPRES}: PRI Call ID Presentation Variable für eingehende Anrufe (siehe callingpres)
${CALLERID}: Anruferkennung (Name und Nummer)
${CALLERIDNAME}: Anruferkennung: Name
${CALLERIDNUM}: Anruferkennung: Nummer
${CHANNEL}: Name des aktuellen Kanals
${RDNIS}: Die aktuelle umleitende DNIS, Anruferkennung, die den Anruf umgeleitet hat. Siehe RDNIS
${SIPDOMAIN}: SIP-Ziel-Domain eines eingehenden Anrufs (falls zutreffend)
${SIP_CODEC}: Wird verwendet, um den SIP-Codec für einen Anruf festzulegen
${SIPCALLID}: Der SIP-Dialog Call-ID-Header
${SIPUSERAGENT}: Der SIP-User-Agent-Header
${UNIQUEID}: Aktuelle eindeutige SIP-Anruf-ID
${HANGUPCAUSE}: Der letzte Rückgabecode für das Auflegen auf einem Zap-Kanal, der mit einer PRI-Schnittstelle verbunden ist
${DNID}: Dialed Number Identifier
${ACCOUNTCODE}: Kontocode, falls angegeben - siehe Asterisk-Abrechnung