Anhang B. Applikationen im Dialplan

Im Folgenden werden die Applikationen beschrieben, die im Dialplan (also in der /etc/asterisk/extensions.conf) verwendet werden können. Beachten Sie bitte, dass nur solche Applikationen in Ihrer Installation verfügbar sind, die in der /etc/asterisk/modules.conf im Abschnitt [modules] durch autoload=yes oder explizites load => app_applikationsname.so geladen wurden. Eine Liste aller in Ihrem Asterisk verfügbaren Applikationen können Sie mit dem CLI Befehl core show applications abrufen. Genaue Informationen zu einer bestimmten Applikation können Sie im CLI mit dem Befehl core application Applikationsname anzeigen.

[Tipp]

Die Befehle core application xyz und core applications existieren erst in der Asterisk Version 1.4. Sollten Sie ein Asterisk 1.2 betreuen, können Sie die gleichen Funktionen mit den Befehlen show application xyz und show applications abrufen. Die alten Befehle funktionen auch noch in der Version 1.4, sind aber deprecated.

Der Begriff „Applikationen“ (oder „Befehle“) darf nicht mit „Funktionen“ verwechselt werden, die ggf. innerhalb eines Befehlsaufrufs stehen. „Applikationen“ (applications) ist vielleicht irreführend, aber der gängige Ausdruck.

[Anmerkung]

Ein Hinweis am Rande: Die Konfigurationsdateien von Asterisk verwenden leider ein recht schwammiges Format (als INI bekannt), für das nie eine offizielle Grammatik veröffentlicht wurde. Der Parser geht auch nicht den üblichen Weg von lexikalischer Analyse, Tokenizing und syntaktischer Analyse. Aus diesem Grund steigt übrigens der Asterisk-Ableger OpenPBX auf die von Mac OS X bekannten, aber auch auf anderen Plattformen verfügbaren „Property Lists“ (.plist) als Format für Konfigurationsdateien um.

Hier sei nur gesagt, dass es aufgrund mangelnder Spezifikation nicht immer klar ist, an welcher Stelle z.B. Leerzeichen erlaubt sind oder wo Anführungszeichen erwartet werden. Meist werden mehrere Schreibweisen erkannt. Im Zweifelsfall hilft nur Ausprobieren, wenn eine Schreibweise in Ihrer Asterisk-Version nicht funktioniert. Sollten Sie Fehler entdecken, wird um Rückmeldung gebeten.

Es ist oft möglich, Parameter auszulassen. Wenn ausgelassene Parameter nicht am Ende stehen, müssen Sie trotzdem ein Komma angeben, um anzuzeigen, dass der Parameter leer ist (also der Default-Wert verwendet wird), z.B. so:

exten => s,1,Dial(IAX2/User:Passwort@beispiel.de/123,,tT)

Im Allgemeinen kann gesagt werden, dass Fehler beim Ausführen einer Applikation durch den Rückgabewert -1 ausgedrückt werden, Erfolg durch 0. Ein Rückgabewert von -1 bedeutet, dass Asterisk den Kanal auflegt und nicht weiter den Dialplan abarbeitet.

[Wichtig]

Bitte beachten Sie, dass, abhängig von der eingesetzten Asterisk-Version die Parameter durch , (Komma) oder | (Pipe) getrennt werden. In diesem Buch wird hauptsächlich das , (Komma) benutzt.

Wer Asterisk schon länger kennt, wird sich vielleicht wundern, warum hier die eine oder andere Applikation nicht aufgeführt ist. Das hat den einfachen Grund, dass bereits in Asterisk 1.2 etliche Applikationen als „deprecated“ (= veraltet, soll nicht mehr verwendet werden) gekennzeichnet sind und in 1.4 nicht mehr existieren. Solche Befehle werden hier nicht mehr beschrieben, Sie finden die entsprechenden Funktionen in Anhang C, Funktionen im Dialplan. Die beigefügten Diffs der internen Hilfetexte sind immer vom neueren 1.4 zum älteren 1.2.

In den Beispielen wird oft die willkürlich gewählte Extension 123 und die Priorität 1 verwendet, was in der Praxis natürlich nicht immer sinnvoll ist.

Viele Applikationen vor Asterisk 1.2 sprangen bei einem Fehler zur Priorität n+101, wenn vorhanden (wobei n die aktuelle Priorität bezeichnet). Dieses alte Verhalten („priority jumping“) lässt sich bei einigen Befehlen durch die Option j (jump) erreichen oder indem man in der extensions.conf im Abschnitt [general] den Parameter priorityjumping=yes setzt. Dieses Verhalten ist aber „deprecated“. Die neuere Methode ist das Abfragen der gesetzten Channelvariablen.

Um eine leichtere Verwendung als Nachschlagewerk zu ermöglichen, sind die Applikationen in alphabetischer Reihenfolge aufgeführt. Da sie sich aber auch sinnvoll gruppieren lassen, finden Sie hier einen entsprechenden Index:

Anruf-Verwaltung (abheben, durchstellen, auflegen, ...)

Answer() - Abheben
Busy() - Besetztzeichen signalisieren
ChanIsAvail() - Prüfen, ob ein Channel verfügbar ist
ChannelRedirect() - Kanal auf eine andere Extension umleiten
Congestion() - Stau signalisieren
Dial() - Einen Anruf durchstellen / mit einem Channel verbinden
DISA() - DISA (Direct Inward System Access)
FollowMe() - „Folge-Mir“-Funktionalität
Hangup() - Auflegen
Page() - Rundruf
Park() - Gespräch parken
Pickup() - Heranholen eines Anrufs
RetryDial() - Dial() mit „Wahlwiederholung
Ringing() - Klingeln signalisieren

Flusskontrolle und Timeouts

ContinueWhile() - Zum Anfang einer While-Schleife springen
EndWhile() - Ende einer While-Schleife
Exec() - Ausführen einer Applikation
ExecIf() - Bedingtes Ausführen einer Applikation
ExecIfTime() - Zeitabhängiges Ausführen einer Applikation
ExitWhile() - Eine While-Schleife abbrechen
Gosub() - Zu einer Unterroutine springen
GosubIf() - Bedingtes Gosub()
Goto() - Zu einer Priorität, Extension oder anderem Context springen
GotoIf() - Bedingtes Goto()
GotoIfTime() - Bedingtes Gosub() je nach Datum/Uhrzeit
Random() - Zufällig im Dial-Plan springen
Return() - Aus einem Gosub() oder GosubIf() zurückkehren
TryExec() - Versuch der Ausführung einer Applikation
While() - Anfang einer While-Schleife

Macros

Macro() - Macro aufrufen
MacroExclusive() - Macro zu einem Zeitpunkt nur einmal aufrufen
MacroExit() - Macro abbrechen
MacroIf() - Ein Macro bedingt ausführen

Anrufer-Kennung (Caller-ID, Name, ...)

CallingPres() - „Caller Presentation“ verändern
LookupBlacklist() - Caller-ID in Blacklist nachschlagen
LookupCIDName() - Caller-ID-Name in Datenbank nachschlagen
PrivacyManager() - Eingabe einer Telefonnummer verlangen falls ohne Caller-ID
SetCallerPres() - Caller-ID setzen, unanhängig vom Channel
SoftHangup() - Auflegen verlangen
Zapateller() - Werbeanrufe blockieren

Gesprächsprotokolle (CDRs)

AppendCDRUserField() - Einen Wert an das CDR-User-Feld anhängen
ForkCDR() - Den CDR in zwei getrennte Einträge aufspalten
NoCDR() - CDR für diesen Anruf deaktivieren
ResetCDR() - CDR-Eintrag zurücksetzen
SetAMAFlags() - AMA-Flags setzen
SetCDRUserField() - CDR-User-Feld setzen

Voicemail

Directory() - Dial-by-Name-Telefonbuch anbieten
MailboxExists() - Prüft, ob Mailbox existiert
VoiceMail() - Anrufbeantworter
VoiceMailMain() - Anrufbeantworter abhören
VMAuthenticate() - User anhand der voicemail.conf authentifizieren

Konferenzen

MeetMe() - MeetMe-Konferenz
MeetMeAdmin() - MeetMe-Konferenz verwalten
MeetMeCount() - Anzahl der Teilnehmer einer MeetMe-Konferenz

Variablen verändern

ImportVar() - Variable von einem Channel importieren
Read() - Eine Variable (Ziffern) vom User einlesen
ReadFile() - Eine Datei in eine Variable einlesen
RealTime() - Variablen aus dem Realtime-System einlesen
RealTimeUpdate() - Variablen im Realtime-System verändern
Set() - Eine Channel-Variable setzen
SetGlobalVar() - Eine globale Variable setzen

Musik-/Sprachausgabe

Background() - Im Hintergrund eine Sound-Datei spielen
BackgroundDetect() - Background() mit Spracherkennung
ControlPlayback() - Playback() mit Vor-/Zurückspulen und Abbrechen
DateTime() - Datum/Uhrzeit ansagen
Echo() - Audio-Eingabe wiedergeben
Festival() - Text mit dem Festival-Synthesizer sprechen
Milliwatt() - Einen konstanten 1000-Hz-Ton mit 0 dbm erzeugen
MP3Player() - MP3-Datei oder -Stream spielen
MusicOnHold() - Wartemusik spielen
NBScat() - NBS-Stream abspielen
Playback() - Eine Sound-Datei spielen
Playtones() - Töne spielen
Progress() - Audio vor dem Abheben spielen
SayAlpha() - Buchstabieren (alphanumerisch)
SayDigits() - Ziffern ansagen
SayNumber() - Nummer ansagen
SayPhonetic() - Buchstabieren
SayUnixTime() - Datum/Uhrzeit ansagen
SetMusicOnHold() - Wartemusik festlegen
StopPlaytones() - Playtones() beenden

Aufzeichnen

AgentMonitorOutgoing() - Ausgehende Anrufe eines Agenten aufzeichnen
ChangeMonitor() - Die Datei für Monitor() verändern
ChanSpy() - Ein Gespräch mithören
Dial() - Mit der Option w oder W im Gespräch aufzeichnen
Dictate() - Diktat aufnehmen und wiedergeben
ExtenSpy() - Ein Gespräch mithören
MixMonitor() - Ähnlich Monitor(), aber nur eine Datei
Monitor() - Ein Gespräch mitschneiden
PauseMonitor() - Mitschneiden pausieren
Record() - Eingehendes Audio mitschneiden
StopMonitor() - Monitor() beenden
UnpauseMonitor() - Pausierung des Mitschnitts aufheben
ZapBarge() - Einen ZAP-Channel belauschen
ZapScan() - Zwecks Mithören durch ZAP-Kanäle schalten

Datenbank-Zugriffe

DBdel() - Einen Datenbankeintrag löschen
DBdeltree() - Einen Datenbank-Zweig löschen

Allgemeines

Authenticate() - Einen User authentifizieren
SendDTMF() - DTMF-Töne senden
SendImage() - Ein Bild senden
SendText() - Einen Text senden
SendURL() - Eine URL senden
Transfer() - Anruf weiterleiten
VMAuthenticate() - User anhand der voicemail.conf authentifizieren
Wait() - Eine bestimmte Zeit warten
WaitExten() - Auf Eingabe einer Extension warten
WaitForRing() - Auf Klingeln warten
WaitForSilence() - Auf Stille warten
WaitMusicOnHold() - Warten mit Musik

Externe Skripte

AGI() - Eine AGI-Anwendung ausführen
DeadAGI() - AGI() auf einem aufgelegten Channel
DumpChan() - Informationen über einen Kanal auf dem CLI ausgeben
EAGI() - Siehe AGI()
ExternalIVR() - Einen externen IVR-Generator ausführen
FastAGI() - AGI() auf einem entfernten Rechner
Log() - Eine Nachricht in einem bestimmten Verbosity-Level loggen
Macro() - Ein Makro ausführen
NoOp() - Nichts tun. Schreibt Debugging-Informationen
Perl() - res_perl ist wie mod_perl für Apache, aber für Asterisk
PHP() - res_php ist wie mod_php für Apache, aber für Asterisk
Read() - Eine Variable (Ziffern) vom User einlesen
System() - Einen Shell-Befehl ausführen
TrySystem() - Wie System(), gibt aber immer 0 zurück
UserEvent() - Dem Manager-Interface ein Event schicken
Verbose() - Eine Nachricht in einem bestimmten Verbosity-Level loggen

SIP

SIPdtmfMode() - DTMF-Modus während SIP-Verbindung ändern
SIPAddHeader() - Einem ausgehenden Anruf einen SIP-Header hinzufügen

ZAP

Flash() - Einen Switchhook-Flash auf einem ZAP-Trunk senden
ZapBarge() - Einen ZAP-Channel belauschen
ZapRAS() - RAS (Remote Access Server) auf einem ZAP-ISDN-Channel bereitstellen
ZapScan() - Zwecks Mithören durch ZAP-Kanäle schalten

Warteschlangen, Call-Center

AddQueueMember() - Interface dynamisch in Warteschleife einreihen
AgentCallbackLogin() - Call-Center-Agenten einloggen (mit Rückruf)
AgentLogin() - Call-Center-Agenten einloggen
AgentMonitorOutgoing() - Ausgehende Anrufe eines Agenten aufzeichen
ParkAndAnnounce() - Anruf parken und ankündigen
ParkedCall() - Einen geparkten Anruf annehmen
PauseQueueMember() - Einen Agenten pausieren
Queue() - Eingehenden Anruf in Warteschleife einreihen
QueueLog() - Beliebigen Eintrag im Queue-Log schreiben
RemoveQueueMember() - Interface aus Warteschleife entfernen
UnpauseQueueMember() - Einen pausierenden Agenten wieder aktivieren

ADSI

ADSIProg() - Ein ADSI-Skript in ein Telefon laden
GetCPEID() - ADSI-CPE-ID abfragen

Verschiedenes

AMD() - Einen Anrufbeantworter erkennen
AlarmReceiver() - Einen Contact-ID-Alarm-Empfänger von Ademco emulieren
IAX2Provision() - Versorgt ein IAXy
Morsecode() - Sendet einen Text als Morsezeichen
SetTransferCapability() - ISDN-Transfer-Capability setzen
SMS() - Sendet oder empfängt SMS-Nachrichten