AEL (Legacy)
Asterisk Extension Language
|
AEL ist effektiv tot. Das Modul |
AEL wurde mit Asterisk 1.4 eingeführt und versprach einen
"richtiger-programmiersprachigen" Dialplan: C-artige Blöcke mit
geschweiften Klammern, if/else/while, Label-Sprünge, Makros. In
der Praxis hat sich die klassische extensions.conf durchgesetzt —
auch, weil sich Tooling, Beispiele, Community-Snippets und die
offizielle Dokumentation praktisch ausschließlich an extensions.conf
orientieren.
Ein direkter Vergleich:
|
|
[source] ---- [meine-telefone] exten ⇒ 20,1,Answer() same ⇒ n,Playback(beep) same ⇒ n,Hangup() ---- |
[source] ---- context meine-telefone { 20 ⇒ { Answer(); Playback(beep); Hangup(); } } ---- |
Was Sie wissen sollten, wenn Sie AEL in der Praxis sehen
-
extensions.confundextensions.aelexistieren nebeneinander. Sind beide Dateien vorhanden, gewinnt je nach Ladereihenfolgeextensions.confbeim Contextnamen-Konflikt. Das ist für die Migration nützlich: Man kann Context für Context aus AEL in dieextensions.confumziehen. -
AEL2 (kurz: AEL) ist die einzige Variante. Ein früher AEL1 war nur ein Prototyp.
Für neue Dialpläne und jede Art von Überarbeitung eines
AEL-Altbestands gilt: extensions.conf mit same ⇒ n, Gosub()
statt Macro(), und für alles, was wirklich komplex ist,
ARI.
AEL-Syntax im Überblick
- Zeilenende
-
Befehle werden mit
;abgeschlossen. - Kommentare
-
// einzeiligoder/* mehrzeilig /. Die Semikolon-Kommentare ausextensions.conffunktionieren in AEL *nicht. - Includes
-
includes { other-context; }innerhalb eines Context-Blocks. Alte Pipe-Trenner für Zeit-Includes (09:00-17:00|mon-fri||) sind in AEL weiterhin Pipe-separiert. - Globale Variablen
globals {
KUCHEN = Marmorkuchen;
KLINGELZEIT = 60;
}
- Bedingungen
50 => {
Set(a=test);
if ("${a}" = "test") { SayDigits(123); }
else { SayDigits(456); }
}
- Sprünge
goto anfang; // Label in derselben Extension
goto 10|anfang; // Label in anderer Extension
goto cntxt2|40|vierzig; // Label in anderem Context
jump 10@beispiel; // Extension in anderem Context
- Hints
context intern {
hint(PJSIP/21) 21 => { Dial(PJSIP/21,30); }
}
CLI und Tooling
ael reload-
Lädt
extensions.aelneu ein, ohne Asterisk neu zu starten. dialplan show-
Zeigt den Dialplan, den Asterisk aus
extensions.confundextensions.aelzusammengesetzt hat. Pro Zeile ist angegeben, ob sie auspbx_configoderpbx_aelstammt. aelparse-
Kommandozeilen-Werkzeug, das eine
extensions.aelin dasextensions.conf-Format konvertieren kann. Ideal zur Migration und zum Aufspüren von Syntaxfehlern:# aelparse -q -wschreibt den eingelesenen Dialplan als
extensions.conf.aeldumpins aktuelle Verzeichnis.
extensions.ael oder extensions.conf?
Kurze Antwort: extensions.conf. Die Frage hatte vor zehn Jahren
noch zwei Seiten. Heute nicht mehr. pbx_ael wird nicht aktiv
weiterentwickelt, die Community-Dokumentation und -Beispiele bauen
fast ausschließlich auf extensions.conf auf, und mit same ⇒ n,…
ist die klassische Syntax ebenfalls angenehm lesbar.
Wenn Sie einen Bestand mit extensions.ael pflegen: Es gibt keinen
Zwang, panikartig zu migrieren — pbx_ael läuft in den meisten
aktuellen Asterisk-Versionen nach wie vor. Planen Sie die Umstellung
aber für die nächste größere Umbauphase ein. Mit aelparse können Sie
AEL zu extensions.conf konvertieren und so in einem überschaubaren
Schritt umziehen.