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/


10. 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. Welche Applikationen in Ihrer Asterisk-Version vorhanden sind, erfahren Sie, indem Sie im Asterisk-CLI show applications oder show application Applikationsname eingeben.

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. Einige Applikationen älterer Asterisk-Versionen wurden mittlerweile durch Funktionen ersetzt und werden hier nicht mehr erwähnt, da sie nicht mehr verwendet werden sollen.

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 Abschnitt 11, „Funktionen im Dialplan“.

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 „depreceted“. Die neuere Methode ist das Abfragen der gesetzten Channelvariablen.

Um 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, ...)

Abschnitt 10.8, „Answer() - Abheben
Abschnitt 10.12, „Busy() - Besetztzeichen signalisieren
Abschnitt 10.15, „ChanIsAvail() - Prüfen, ob ein Channel verfügbar ist
Abschnitt 10.17, „Congestion() - Stau signalisieren
Abschnitt 10.22, „Dial() - Einen Anruf durchstellen / mit einem Channel verbinden
Abschnitt 10.25, „DISA() - DISA (Direct Inward System Access)
Abschnitt 10.42, „Hangup() - Auflegen
Abschnitt 10.78, „RetryDial() - Dial() mit „Wahlwiederholung
Abschnitt 10.80, „Ringing() - Klingeln signalisieren

Flusskontrolle und Timeouts

Abschnitt 10.29, „EndWhile() - Ende einer While-Schleife
Abschnitt 10.31, „ExecIf() - Bedingtes Ausführen
Abschnitt 10.37, „Gosub() - Zu einer Unterroutine springen
Abschnitt 10.38, „GosubIf() - Bedingtes Gosub()
Abschnitt 10.39, „Goto() - Zu einer Priorität, Extension oder anderem Kontext springen
Abschnitt 10.40, „GotoIf() - Bedingtes Goto()
Abschnitt 10.41, „GotoIfTime() - Bedingtes Gosub() je nach Datum/Uhrzeit
Abschnitt 10.47, „Macro() - Macro aufrufen
Abschnitt 10.71, „Random() - Zufällig im Dial-Plan springen
Abschnitt 10.79, „Return() - Aus einem Gosub() oder GosubIf() zurückkehren
Abschnitt 10.114, „While() - Anfang einer While-Schleife

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

Abschnitt 10.13, „CallingPres() - Anzeige der Caller-ID verändern
Abschnitt 10.45, „LookupBlacklist() - Caller-ID in Blacklist nachschlagen
Abschnitt 10.46, „LookupCIDName() - Caller-ID-Name in Datenbank nachschlagen
Abschnitt 10.68, „PrivacyManager() - Eingabe einer Telefonnummer verlangen (falls ohne Caller-ID)
Abschnitt 10.92, „SetCallerPres() - Caller-ID setzen, unanhängig vom Channel
Abschnitt 10.96, „SoftHangup() - Auflegen verlangen
Abschnitt 10.115, „Zapateller() - Werbeanrufe blockieren

Gesprächsprotokolle (CDRs)

Abschnitt 10.35, „ForkCDR() - Den CDR in zwei getrennte Einträge aufspalten
Abschnitt 10.58, „NoCDR() - CDR für diesen Anruf deaktivieren
Abschnitt 10.77, „ResetCDR() - CDR-Eintrag zurücksetzen
Abschnitt 10.91, „SetAMAFlags() - AMA-Flags setzen

Voicemail

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

Konferenzen

Abschnitt 10.49, „MeetMe() - MeetMe-Konferenz
Abschnitt 10.50, „MeetMeAdmin() - MeetMe-Konferenz verwalten
Abschnitt 10.51, „MeetMeCount() - Anzahl der Teilnehmer einer MeetMe-Konferenz

Variablen verändern

Abschnitt 10.44, „ImportVar() - Variable von einem Channel importieren
Abschnitt 10.72, „Read() - Eine Variable (Ziffern) vom User einlesen
Abschnitt 10.90, „Set() - Eine Channel-Variable setzen

Musik-/Sprachausgabe

Abschnitt 10.10, „Background() - Im Hintergrund eine Sound-Datei spielen
Abschnitt 10.11, „BackgroundDetect() - Background() mit Spracherkennung
Abschnitt 10.18, „ControlPlayback() - Playback() mit Vor-/Zurückspulen und Abbrechen
Abschnitt 10.28, „Echo() - Audio-Eingabe wiedergeben
Abschnitt 10.33, „Festival() - Text mit dem Festival-Synthesizer sprechen
Abschnitt 10.52, „Milliwatt() - Einen konstanten 1000-Hz-Ton mit 0 dbm erzeugen
Abschnitt 10.55, „MP3Player() - MP3-Datei oder -Stream spielen
Abschnitt 10.56, „MusicOnHold() - Wartemusik spielen
Abschnitt 10.66, „Playback() - Eine Sound-Datei spielen
Abschnitt 10.67, „Playtones() - Töne spielen
Abschnitt 10.69, „Progress() - Audio vor dem Abheben spielen
Abschnitt 10.81, „SayAlpha() - Buchstabieren (alphanumerisch)
Abschnitt 10.82, „SayDigits() - Ziffern ansagen
Abschnitt 10.83, „SayNumber() - Nummer ansagen
Abschnitt 10.84, „SayPhonetic() - Buchstabieren (mit sounds/phonetic/Zeichen_p.gsm)
Abschnitt 10.85, „SayUnixTime() - Datum/Uhrzeit ansagen
Abschnitt 10.98, „StopPlaytones() - Playtones() beenden

Aufzeichnen

Abschnitt 10.5, „AgentMonitorOutgoing() - Ausgehende Anrufe eines Agenten aufzeichnen
Abschnitt 10.14, „ChangeMonitor() - Die Datei für Monitor() verändern
Abschnitt 10.16, „ChanSpy() - Ein Gespräch mithören
Abschnitt 10.22, „Dial() - Mit der Option w oder W im Gespräch aufzeichnen
Abschnitt 10.23, „Dictate() - Diktat aufnehmen und wiedergeben
Abschnitt 10.53, „MixMonitor() - Ähnlich Monitor(), aber nur eine Datei
Abschnitt 10.54, „Monitor() - Ein Gespräch mitschneiden
Abschnitt 10.75, „Record() - Eingehendes Audio mitschneiden
Abschnitt 10.97, „StopMonitor() - Monitor() beenden
Abschnitt 10.116, „ZapBarge() - Einen ZAP-Channel belauschen
Abschnitt 10.118, „ZapScan() - Zwecks Mithören durch ZAP-Kanäle schalten

Datenbank-Zugriffe

Abschnitt 10.19, „DBdel() - Einen Datenbankeintrag löschen
Abschnitt 10.20, „DBdeltree() - Einen Datenbank-Zweig löschen

Allgemeines

Abschnitt 10.9, „Authenticate() - Einen User authentifizieren
Abschnitt 10.86, „SendDTMF() - DTMF-Töne senden
Abschnitt 10.87, „SendImage() - Ein Bild senden
Abschnitt 10.88, „SendText() - Einen Text senden
Abschnitt 10.89, „SendURL() - Eine URL senden
Abschnitt 10.100, „Transfer() - Anruf weiterleiten
Abschnitt 10.106, „VMAuthenticate() - User anhand der voicemail.conf authentifizieren
Abschnitt 10.109, „Wait() - Eine bestimmte Zeit warten
Abschnitt 10.110, „WaitExten() - Auf Eingabe einer Extension warten
Abschnitt 10.111, „WaitForRing() - Auf Klingeln warten
Abschnitt 10.113, „WaitMusicOnHold() - Warten mit Musik

Externe Skripte

Abschnitt 10.6, „AGI() - Eine AGI-Anwendung ausführen
Abschnitt 10.21, „DeadAGI() - AGI() auf einem aufgelegten Channel
Abschnitt 10.27, „EAGI() - Siehe AGI()
Abschnitt 10.32, „FastAGI() - AGI() auf einem entfernten Rechner
Abschnitt 10.47, „Macro() - Ein Makro ausführen
Abschnitt 10.59, „NoOp() - Nichts tun. Schreibt Debugging-Informationen
Abschnitt 10.64, „Perl() - res_perl ist wie mod_perl für Apache, aber für Asterisk
Abschnitt 10.65, „PHP() - res_php ist wie mod_php für Apache, aber für Asterisk
Abschnitt 10.72, „Read() - Eine Variable (Ziffern) vom User einlesen
Abschnitt 10.99, „System() - Einen Shell-Befehl ausführen
Abschnitt 10.102, „TrySystem() - Wie System(), gibt aber immer 0 zurück
Abschnitt 10.104, „UserEvent() - Dem Manager-Interface ein Event schicken

SIP

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

ZAP

Abschnitt 10.34, „Flash() - Einen Switchhook-Flash (auch „Link“) auf einem ZAP-Trunk senden
Abschnitt 10.116, „ZapBarge() - Einen ZAP-Channel belauschen
Abschnitt 10.117, „ZapRAS() - RAS (Remote Access Server) auf einem ZAP-ISDN-Channel bereitstellen
Abschnitt 10.118, „ZapScan() - Zwecks Mithören durch ZAP-Kanäle schalten

Warteschlangen, Call-Center

Abschnitt 10.1, „AddQueueMember() - Interface dynamisch in Warteschleife einreihen
Abschnitt 10.3, „AgentCallbackLogin() - Call-Center-Agenten einloggen (mit Rückruf)
Abschnitt 10.4, „AgentLogin() - Call-Center-Agenten einloggen
Abschnitt 10.5, „AgentMonitorOutgoing() - Ausgehende Anrufe eines Agenten aufzeichen (nur mit AgentCallbackLogin())
Abschnitt 10.61, „ParkAndAnnounce() - Anruf parken und ankündigen
Abschnitt 10.62, „ParkedCall() - Einen geparkten Anruf annehmen
Abschnitt 10.63, „PauseQueueMember() - Einen Agenten pausieren
Abschnitt 10.70, „Queue() - Eingehenden Anruf in Warteschleife einreihen
Abschnitt 10.76, „RemoveQueueMember() - Interface aus Warteschleife entfernen
Abschnitt 10.103, „UnpauseQueueMember() - Einen pausierenden Agenten wieder aktivieren

ADSI

Abschnitt 10.2, „ADSIProg() - Ein ADSI-Skript in ein Telefon laden
Abschnitt 10.36, „GetCPEID() - ADSI-CPE-ID abfragen

Verschiedenes

Abschnitt 10.7, „AlarmReceiver() - Einen Contact-ID-Alarm-Empfänger von Ademco emulieren
Abschnitt 10.95, „SMS() - Sendet oder empfängt SMS-Nachrichten