Besondere Extensions
Da sämtliche Programmierlogik über Extensions läuft, gibt es einige besondere Extensions, die Asterisk von sich aus aufruft.
Die h-Extension
Das h steht für Hangup (Auflegen). Die h-Extension wird
aufgerufen, sobald ein Gespräch beendet wurde. Innerhalb dieser
Extension enthält ${EXTEN} nicht mehr die ursprüngliche Nummer,
sondern den Wert h.
Beispiel
Soll in der globalen Variable GESPRAECHE die Anzahl der aktuell
geführten Gespräche stehen, wird sie beim Aufbau um 1 erhöht und beim
Auflegen um 1 vermindert:
[globals]
GESPRAECHE=0
[from-intern]
exten => _X.,1,Set(GLOBAL(GESPRAECHE)=$[${GESPRAECHE} + 1])
same => n,Dial(PJSIP/${EXTEN})
exten => h,1,Set(GLOBAL(GESPRAECHE)=$[${GESPRAECHE} - 1])
Die i-Extension
Um einen Context "wasserdicht" zu machen, wird die i-Extension
benutzt. Das i steht für invalid und behandelt alle im Context
nicht definierten Zielrufnummern. ${EXTEN} enthält in der
i-Extension nicht mehr die gewählte Nummer — diese finden Sie in
${INVALID_EXTEN}.
Beispiel
In der Apfelmus GmbH können aus Abteilung B nur die Rufnummern 100 bis 199 angerufen werden. Alle anderen Gespräche laufen in eine Ansage:
[abteilung-b]
exten => _1XX,1,Dial(PJSIP/${EXTEN})
exten => i,1,NoOp(Undefinierte Nummer ${INVALID_EXTEN} wurde gewaehlt.)
same => n,Answer()
same => n,Playback(cannot-complete-as-dialed)
same => n,Hangup()
Die o- und die a-Extension
Ist in voicemail.conf der Eintrag operator=yes gesetzt, kann der
Anrufer innerhalb der Voicemailbox mit 0 die o-Extension aufrufen
(o für Operator). Mit * landet er in der a-Extension
(abort).
Die t- und die T-Extension
t und T sind Timeout-Extensions für Zeitüberschreitungen.
t-Extension
Erfolgt nach einer bestimmten Zeit in einem IVR-Menü keine Eingabe,
ruft Asterisk die t-Extension auf:
[hauptmenue]
exten => 10,1,Answer()
same => n,Background(demo-instruct) ; Ansage: "Drücken Sie 1 oder 2"
exten => 1,1,Playback(demo-thanks)
same => n,Hangup()
exten => 2,1,Playback(demo-nogo)
same => n,Hangup()
exten => t,1,Hangup() ; keine Eingabe => auflegen
T-Extension
Die T-Extension wird nach einem Absolute Timeout aufgerufen,
gesetzt mit Set(TIMEOUT(absolute)=<Sekunden>).
|
Zwischen Variable, |
Der Timeout wird jedes Mal neu gestartet, wenn der Zähler neu gesetzt
wird — also nicht automatisch ab Gesprächsbeginn. Mit
Set(TIMEOUT(absolute)=0) wird er deaktiviert.
exten => 20,1,Answer()
same => n,Set(TIMEOUT(absolute)=120)
same => n(loop),Playback(hello-world)
same => n,Wait(1)
same => n,Goto(loop)
exten => T,1,Wait(1)
same => n,Playback(demo-thanks)
same => n,Wait(1)
same => n,Hangup()
Die s-Extension
Der erste Parameter einer Regel ist normalerweise die gewählte
Nummer. Was aber, wenn ein Anruf ankommt, ohne dass Asterisk die
Zielrufnummer kennt? Das ist typisch für manche SIP-Trunks, die bei
eingehenden Anrufen als Zielrufnummer nur s schicken, oder für
Szenarien, in denen kein DID/DDI-Mapping existiert. Für diese Fälle
gibt es die s-Extension (start):
exten => s,1,Answer()
same => n,Wait(1)
same => n,Playback(tt-monkeys)
same => n,Wait(1)
same => n,Hangup()