6.3. Besondere Extensions

Da sämtliche Programmierlogik über Extensions programmiert werden muss, benötigen wir noch eine Reihe von besonderen und vom System vorbelegten Extensions.

Die h-Extension

Das h steht bei dieser Standard-Extension für Hangup (Auflegen). Sie wird aufgerufen, sobald ein Gespräch beendet wurde. Dabei muss berücksichtigt werden, dass dann logischerweise der Wert der Variable ${EXTEN} nicht mehr die ursprüngliche Extension, sondern den Wert h enthält.

Beispiel

Soll in der globalen Variable GESPRAECHE immer die Anzahl der aktuell geführten Gespräche gespeichert werden, so muss diese beim Aufbau eines Gesprächs um 1 erhöht und beim Abbau eines Gesprächs (also beim Auflegen) wieder um 1 vermindert werden. Der folgende Dialplan zeigt die Grundidee:
[global]
GESPRAECHE=0

[from-intern]
exten => _X.,1,Set(GESPRAECHE=$[${GESPRAECHE} + 1]|g)
exten => _X.,2,Dial(SIP/${EXTEN})

exten => h,1,Set(GESPRAECHE=$[${GESPRAECHE} - 1]|g)

Die i-Extension

Um einen Context "wasserdicht" zu machen, wird die i-Extension benutzt. Das i steht dabei für invalid (ungültig) und behandelt alle im entsprechenden Context nicht definierten Zielrufnummern. Auch hier wird in der Variable EXTEN natürlich nicht mehr die angewählte Nummer abgebildet. Diese ist mit der Variable INVALID_EXTEN abrufbar.

Beispiel

In der Apfelmus GmbH können aus der Abteilung B nur die Rufnummern 100 bis 199 angerufen werden. Alle anderen Gespräche führen zur Ansage des Bausteines that-is-not-rec-phn-num.[30]
[abteilung-b]
exten => _1XX,1,Dial(${EXTEN})

exten => i,1,NoOp(Undefinierte Nummer ${INVALID_EXTEN} wurde gewaehlt.)
exten => i,2,Answer()
exten => i,3,Playback(that-is-not-rec-phn-num)
exten => i,4,Hangup()

Die o- und die a-Extension

Wurde in der Konfigurationsdatei voicemail.conf der Eintrag operator=yes gesetzt, so kann innerhalb der Voicemailbox durch Drücken der 0 (Null) die o-Extension aufgerufen werden (o steht für Operator).
Durch Drücken der Stern-Taste (*) kommt man hingegen in die a-Extension (abort, Abbruch).

Die t- und die T-Extension

Bei der t- und der T-Extension handelt es sich jeweils um Timeout-Extensions, also Zeitüberschreitungen.

t-Extension

Erfolgt nach einer bestimmten Zeit in einem IVR-Menü keine Eingabe, so wird die t-Extension aufgerufen.
Beispiel:
[hauptmenue]
exten => 10,1,Answer()
exten => 10,n,Background(marryme)             ; "Heiraten? 1 für ja, 2 für nein"

exten => 1,1,Playback(thank-you-cooperation)  ; 1 => "Danke"
exten => 1,n,Hangup()

exten => 2,1,Playback(hangup-try-again)       ; 2 => "Nochmal probieren"
exten => 2,n,Hangup()

exten => t,1,Hangup()                         ; keine Eingabe => auflegen

T-Extension

Die T-Extension wird nach einem Absolute Timeout aufgerufen. Dieser kann mit Set(TIMEOUT(absolute)=<Sekunden>) gesetzt werden.

Warnung

Bitte achten Sie darauf, dass vor und nach dem "=" Zeichen kein Leerzeichen stehen darf.
Der Timeout wird immer dann gestartet, wenn der Zähler neu gesetzt wird (es wird also nicht automatisch vom Anfang des Gesprächs an gezählt). Mit Set(TIMEOUT(absolute)=0) wird dieser Timeout wieder deaktiviert.
Beispiel:
exten => 20,1,Answer()
exten => 20,2,Set(TIMEOUT(absolute)=120)
exten => 20,3,Playback(hello-world)
exten => 20,4,Wait(1)
exten => 20,5,Goto(3)

exten => T,1,Wait(1)
exten => T,2,Playback(thank-you-for-calling)
exten => T,3,Wait(1)
exten => T,4,Hangup()

Die s-Extension

Der erste Parameter einer Regel (Extension) ist immer der Name bzw. die Nummer. Was passiert aber, falls der Anruf auf einer klassischen analogen Leitung eintrifft und Asterisk gar nicht wissen kann, an wen der Anruf gerichtet ist? Dies ist dann der Fall, wenn Sie Asterisk mittels eines analogen Anschlusses an das Festnetz anschließen und die Rufnummerweitergabe aus dem Festnetz an den analogen Teilnehmeranschluss nicht erfolgt. Für dieses und alle anderen Szenarien, in denen der eingehende Anruf ohne eine Zielrufnummer ankommt, gibt es die s-Extension.

Anmerkung

Wenn Sie ein ATA-Device, also einen Analog-zu-VoIP-Adapter benutzen, benötigen Sie dafür keine s-Extension. Die Zielrufnummer müssen Sie hierbei im Adapter (meist über ein Webinterface) konfigurieren.
Beispiel:
exten => s,1,Answer()
exten => s,2,Wait(1)
exten => s,3,Play(carried-away-by-monkeys)
exten => s,4,Wait(1)
exten => s,5,Hangup()


[30] Der Sprachbaustein in der Datei that-is-not-rec-phn-num.gsm enthält den folgenden Text: "That is not a recognized phone number".