Call Files
Call Files lassen sich am ehesten mit Batch-Dateien vergleichen. Sie
werden ins Verzeichnis /var/spool/asterisk/outgoing/
verschoben und dort dann von Asterisk abgearbeitet.
|
Ein |
Der ganze Mechanismus lässt sich anhand eines Beispiels besser erklären. Nehmen wir an, dass an einer Asterisk-Anlage ein SIP-Telefon mit der Nummer 2000 angemeldet ist. Weiterhin haben wir im Dialplan die folgende Extension eingetragen:
[call-file-test]
exten => 10,1,Answer()
exten => 10,n,Wait(1)
exten => 10,n,Playback(hello-world)
exten => 10,n,Wait(1)
exten => 10,n,Hangup()
Jetzt generieren wir im Verzeichnis /tmp/ die
Datei ein-test.call mit folgendem
Inhalt:
Channel: PJSIP/2000
MaxRetries: 2
RetryTime: 60
WaitTime: 30
Context: call-file-test
Extension: 10
Danach verschieben wir diese Datei mit mv
/tmp/ein-test.call /var/spool/asterisk/outgoing/:
root@molokai:~> mv /tmp/ein-test.call /var/spool/asterisk/outgoing/
Jetzt passiert Folgendes:
-
Asterisk überprüft ständig, ob sich im Verzeichnis
/var/spool/asterisk/outgoing/ein Call File befindet, und arbeitet dieses ab, sobald es da ist. -
Asterisk öffnet eine Verbindung zum Telefon
PJSIP/2000. Wenn das Telefon besetzt sein oder den Anruf nicht annehmen sollte, dann versucht Asterisk das Gleiche noch zweimal (siehe `MaxRetries`). -
Nimmt der Benutzer des Telefons 2000 den Anruf entgegen, dann startet Asterisk im Context `[call-file-test]
die Abarbeitung der Extension `10. Es wird also der Sprachbausteinhello-worldabgespielt.
Parameter
Im Call File können folgende Parameter angegeben werden:
Channel: <channel>-
Der zu benutzende Channel. Dabei gilt die gleiche Syntax wie beim
Dial()-Befehl. Callerid: <callerid>-
Die zu benutzende Caller-ID
WaitTime: <number>-
Die Anzahl an Sekunden, die das System auf die Annahme des Anrufs warten soll. Wird der Wert nicht angegeben, dann ist der Default 45 Sekunden.
MaxRetries: <number>-
Die Anzahl der weiteren Wählversuche (falls besetzt oder nicht erreichbar). Wird dieser Parameter nicht angegeben, ist der Defaultwert 0 (es wird also nur einmal versucht, den Channel aufzubauen).
RetryTime: <number>-
Die Anzahl an Sekunden, die bis zum nächsten Wählversuch gewartet wird. Wird dieser Parameter nicht angegeben, ist der Defaultwert 300 Sekunden.
Account: <account>-
Der Abrechnungscode für Ihr CDR-System
Context: <context>-
Der Ziel-Context
Extension: <exten>-
Die Ziel-Extension, die bei Erfolg aufgerufen wird
Priority: <priority>-
Die Zielpriorität. Wenn sie nicht angegeben ist, dann ist der Default-Wert 1.
Setvar: <var=value>-
Mit `Setvar:` können beliebig viele Channel-Variablen definiert werden.
Archive: <yes|no>-
Normalerweise werden Call Files nach der Abarbeitung direkt gelöscht. Ist `Archive: yes` gesetzt, werden die Call Files aber stattdessen ins Verzeichnis
/var/spool/asterisk/outgoing_done/verschoben. Dabei wird Asterisk noch eine Zeile zum Call File hinzufügen. Diese beschreibt das Ergebnis des Call Files und sieht so aus:Status: <Expired|Completed|Failed>
Call Files in der Zukunft aufrufen
Beim Aufruf eines Call Files vergleicht Asterisk die Zeit der letzten Änderung der Datei mit der aktuellen Uhrzeit. Liegt dieser Eintrag in der Zukunft, wird das Call File noch nicht abgearbeitet. So kann man leicht Call Files zeitgesteuert abarbeiten.
Beispiel Weckruf
Nehmen wir an, ein Hotel möchte über Asterisk ein einfaches Weckrufsystem erstellen. Kunden sollen einen Weckruf über die Servicerufnummer 77 aktivieren können. Nach der 77 soll das genaue Datum und die Weckuhrzeit gewählt werden.
[hotel-intern]
exten => _*77*XXXXXXXXXXXX,1,Answer()
same => n,Set(Jahr=${EXTEN:4:4})
same => n,Set(Monat=${EXTEN:8:2})
same => n,Set(Tag=${EXTEN:10:2})
same => n,Set(Stunden=${EXTEN:12:2})
same => n,Set(Minuten=${EXTEN:14:2})
same => n,NoOp(Weckruf fuer ${CALLERID(num)} um ${Stunden}:${Minuten} am ${Tag}.${Monat}.${Jahr})
same => n,System(echo -e "Channel: PJSIP/${CALLERID(num)}\nContext: Weckruf\nExtension: 23" > /tmp/${UNIQUEID}.call)
same => n,System(touch -t ${Jahr}${Monat}${Tag}${Stunden}${Minuten} /tmp/${UNIQUEID}.call)
same => n,System(mv /tmp/${UNIQUEID}.call /var/spool/asterisk/outgoing/)
same => n,Playback(auth-thankyou)
same => n,SayNumber(${Stunden})
same => n,Playback(digits/oclock)
same => n,SayNumber(${Minuten})
same => n,Hangup()
[Weckruf]
exten => 23,1,Answer()
same => n,Wait(1)
same => n,Playback(hello-world)
same => n,Wait(1)
same => n,Hangup()
|
Die historischen Sprachbausteine |