Coverbild des Asterisk Buches von Stefan Wintermeyer

Letzte Woche => Endspurt!

Montag den 29.01.07 geht das Buch in die Produktion. Bis dahin laeuft der Beta-Test noch in vollem Umfang. Bitte melden Sie Fehler! Siehe Beta-Test FAQ.

Erscheinungstermin: 03.03.07. Das Buch wird auf dem Asterisk-Tag.org in Chemnitz vorgestellt und kann dort auch erworben werden. 10 Tage spaeter wird es im Buchhandel sein. Wer nicht in Chemnitz sein kann, sollte das Buch vorbestellen: Amazon oder direkt beim Verlag

Asterisk-Schulungen und Consulting vom Autor dieses Buches finden Sie auf http://www.amooma.de. Naechste Asterisk-Schulung: 12.02. - 13.02.07 (noch 2 Plaetze frei) - Ach ja, ... wir suchen auch noch Asterisk Entwickler! => http://www.amooma.de/jobs/


2.2. Priorität

Eine typische Extension besteht aus mehreren Schritten. Damit Asterisk diese Schritte in der richtigen Reihenfolge ausführen kann, braucht es eine Art Zähler. Das erinnert ein wenig an frühe BASIC-Programme, die auch am Anfang einer jeden Zeile einen solchen Zähler hatten. Dieser Zähler heißt bei Asterisk Priorität. Prioritäten werden der Reihenfolge nach abgearbeitet (es wird immer +1 gezählt). Wenn die nächste logische Priorität (Lücken sind nicht zulässig!) nicht definiert ist bricht Asterisk ab.

2.2.1. Ein hello-world Beispiel

Die folgende Extension wird immer ausgelöst, wenn ein Telefon mit dem Context apfelmus die Nummer 8888 anruft. Asterisk nimmt dann ab, spielt den Sprachbaustein hello-world ab und legt auf.

[apfelmus]
exten => 8888,1,Answer()
exten => 8888,2,Playback(hello-world)
exten => 8888,3,Hangup()

2.2.2. n-Priorität

Seit der Asterisk-Version 1.2.0 ist es möglich, Prioritäten nicht nur streng mit Zahlen, sondern auch mit dem Platzhalter n zu belegen. Der n-Zähler fungiert hierbei als ein automatischer Programmzähler. Jedesmal, wenn die Programmsteuerung auf die n-Priorität stößt, addiert sie 1 zum letzten Wert der Priorität. Dies ist dann hilfreich, falls Sie viele aufeinander folgende Regeln definiert haben und eine weitere Regel einfügen möchten, denn dann müssen Sie nicht mehr die Zähler der nachfolgenden Regeln neu nummerieren. Wenn eine normale Extension wie folgt aussieht:

exten => 1234,1,Answer()
exten => 1234,2,Wait(2)
exten => 1234,3,Play(tt-monkeys)
exten => 1234,4,Wait(2)
exten => 1234,5,Hangup()

kann man die gleiche Extension auch mit der n-Priorität definieren:

exten => 1234,1,Answer()
exten => 1234,n,Wait(2)
exten => 1234,n,Play(tt-monkeys)
exten => 1234,n,Wait(2)
exten => 1234,n,Hangup()

Dies kann nicht nur an der zweiten Priorität, sondern an einer beliebigen Stelle passieren:

exten => 1234,1,Answer()
exten => 1234,2,Wait(2)
exten => 1234,3,Play(tt-monkeys)
exten => 1234,n,Wait(2)
exten => 1234,n,Hangup()

Die meisten Beispiele in diesem Buch verwenden die traditionelle Art (also ohne die n-Priorität), weil es Applikationen (z.B. Dial()) gibt, die eine bestimmte Anzahl von Prioritäten (nämlich 101) hochzählen, falls ein bestimmtes Ereignis eintritt. Dies ist mit der n-Priorität nicht mehr einfach abbildbar.

2.2.3. Prioritäten mit Label

Es gibt aber auch noch die Möglichkeit, für n-Prioritäten Label zu vergeben. Damit sind z.B. solche Konstrukte möglich:

[...]

exten => s,n,GotoIf($[${APFELMUS} = 1]?ja:nein)
exten => s,n(ja),NoOp(Ja)
exten => s,n(nein),NoOp(Nein)

[...]