Wann matcht welches Pattern?

Pattern Matching 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.}

Um heraus zufinden welches welches Pattern matched, wenn die 12345 gewählt wird, können wir dies mit dialplan show 12345@verkauf überprüfen:

*CLI> dialplan show 12345@verkauf
[ Context 'verkauf' created by 'pbx_config' ]
  '12345' =>        1. NoOp(12345})                               [pbx_config]
  '_1234.' =>       1. NoOp{1234.}()                              [pbx_config]
  '_12X.' =>        1. NoOp{12X}()                                [pbx_config]

-= 3 extensions (3 priorities) in 1 context. =-
*CLI> 

Asterisk zeigt alle Treffer, aber priorisiert die Zeile in der 12345,1,NoOP{12345} steht. Die höchste Priorität wird immer ganz oben angezeigt.

Jetzt kontrollieren wir das noch für die Nummer 12346 mit dem Befehle dialplan show 12346@verkauf

*CLI> dialplan show 12346@verkauf
[ Context 'verkauf' created by 'pbx_config' ]
  '_1234.' =>       1. NoOp{1234.}()                              [pbx_config]
  '_12X.' =>        1. NoOp{12X}()                                [pbx_config]

-= 2 extensions (2 priorities) in 1 context. =-
*CLI> 

Auch hier bekommt das Pattern mit dem "besten" Treffer die höchste Priorität.

[Wichtig]Wichtig

Es ist nicht wichtig, in welcher Reihenfolge Patterns im Dialplan geschrieben werden! Es ist nur wichtig wie genau ein Pattern matcht. Je genauer, desto höher wird es priorisiert.

[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.


$Revision:473 $

Beta-Version!

2.0 Entwickler-Version des Asterisk Buches. Die 1.0 stabile Version ist natürlich noch online. Die 2.0er Version enthält viele Neuerungen, ist aber noch nicht 100% fehlerfrei. Im Zweifelsfall bitte auf die 1.0er Version gehen.

Bitte melden Sie Fehler und Feedback zur neuen 2.0er Version per E-Mail an den Autor.

Asterisk-Tag 2008

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

Werbung