Wann matcht welches Pattern?

Pattern Matchin in Asterisk ist bei großen Dialplänen eine trickreiche Angelegenheit. Asterisk geht nämlich nicht wie allgemein angenommen wird plump von oben nach unten den Dialplan durch. Nein, es priorisiert innerhalb der Patterns!

Je exakter ein Pattern matcht, desto höher ist die Wahrscheinlichkeit das es matcht. Asterisk geht allerdings - bevor es eine Entscheidung trifft - den ganzen Context durch. Es könnte ja sein, das ein anderes Pattern noch besser matcht.

Beispiel:

[verkauf]
exten => _12X.,1,NoOp{12X}
exten => 12345,1,NoOp(12345}
exten => _1234.,1,NoOp{1234.}

Wenn in diesem Beispiel die 12345 gewählt wird, dann wird die zweite Zeile ausgeführt, denn sie stellt den optimalen Treffer da. Wenn die 12346 gewählt wird, dann trifft die letzte Zeile, denn sie matcht besser als die erste.

[Warnung]Warnung

Es gibt eine Sonderregel für das Pattern _.

"_." matcht immer und hat auch immer die höchste Priorität. Es ist also egal, was Sie sonst noch in diesem Context für Regeln haben! Es wird immer nur die Regel mit dem Pattern "_." ausgeführt. Man sollte also lieber ein "_X." nehmen, ausser man ist sich absolut sicher und weiss was das Pattern "_." bewirkt.

Auch wenn die Reihenfolge von Pattern nicht immer ganz trival ist, gibt es eine einfache Debugging Möglichkeit. Mit show dialplan 12345@verkauf lässt sich der Dialplan für die gewählte Nummer 12345 im Context verkauf auflisten. So kann man für spezielle Nummern überprüfen, ob auch die dafür vorgesehene Regel matcht.


Version 1.2, November 2002

Neue Version verfügbar

Sie betrachten gerade die alte Version des Buches (Version 1.0). Wir empfehlen Ihnen für Asterisk 1.4 und 1.6 die neue Version des Buches.

Asterisk-Tag 2008

Lernen Sie Mark Spencer (den Erfinder von Asterisk) kennen! Viele Vorträge, Case-Studies und Workshops rund um das Thema VoIP. Asterisk-Tag.org

Das gedruckte Buch