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, = und Wert dürfen keine Leerzeichen stehen.

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()