Anrufe verarbeiten mit dem asterisk Server / extensions.conf
Eine ausführliche Auflistung aller Befehle findet Ihr unter http://www.das-asterisk-buch.de/.
Hier ist meine Beispiel Konfiguration. CAPI KonfigurationLadet die Datei /etc/asterisk/capi.conf. Passt darin den Wert der MSN an eure Telefonanlagenkonfiguration an. AnrufererkennungWenn der Computer angerufen wird, dann soll er erst mal schauen, wer überhaupt anruft und auf unterschiedliche Anrufer unterschiedlich reagieren.
[capi-in] exten => 5,1,Noop(${CALLERID}) exten => 5,n,GotoIf($[ ${CALLERID} = 1 ]?intern:nichtdie1) exten => 5,n(nichtdie1),GotoIf($[ ${CALLERID} = 2 ]?intern:nichtdie2) exten => 5,n(nichtdie2),GotoIf($[ ${CALLERID} = 3 ]?intern:nichtdie3) exten => 5,n(nichtdie3),GotoIf($[ ${CALLERID} = 3 ]?intern:nichtdie4) exten => 5,n(nichtdie4),GotoIf($[ ${CALLERID} = 001601234567]?handy:extern) [capi-in] ist hier der Kontext eingehender ISDN Anrufe.
Der Name dieses Kontexts muss mit dem in der capi.conf übereinstimmen. AuthentifizierungWenn jemand von extern anruft, soll er sich zuerst authentifizieren. Dazu gibt es den Befehl Authenticate() in asterisk.
exten => 5,n(intern),Noop(intern) exten => 5,n,Goto(sichereAuswahl) exten => 5,n(handy),Noop(Handy) exten => 5,n,Goto(unsichereAuswahl) exten => 5,n(extern),Noop(extern) exten => 5,n,Authenticate(1234) exten => 5,n,Goto(unsichereAuswahl) Die oberen beiden Punkte haben zwar nicht direkt etwas mit der Authentifizierung zu tun, aber ich habe sie dazu genommnen, um zu verdeutlichen, dass die beiden Sprungpunkte (handy) und (extern) nach der Authentifizierung zu einem Menu zusammenlaufen. Menus gestaltenJetzt soll der Anrufer eine Auswahl erhalten, was er machen kann. Diese Auswahl soll Ihm auch vorgelesen werden. Zum vorlesen braucht man eine entsprechende Audio Datei, die ins Verzeichniss /usr/share/asterisk/sounds/ gepackt wird. Um einen Text in eine halbwegs verständliche Ansage zu konvertieren kann man z.B Text to Speech Demo verwenden.
apt-get install sox Nachdem die erzeugte .wav Datei lokal gespeichert ist kann man sie per sox noch ins raw Format wandeln.
sox -V auswahlExtern.wav -r 8000 -c 1 -w /usr/share/asterisk/sounds/auswahlExtern.raw Das Menu verwirklicht man, indem man erstmal das Gesprä mit Answer() aufnimmt, kurz wartet und dem
Anrufer die Audio Datei vorspielt. Die Auswahl wird per DTFM (Tastendruch bei Tonwahl) an den asterisk
übermittelt. Dafür ist Read() zuständig. Die erste Veriable die man dem Read() mitgibt ist
die Variable, in die der übermittelte Wert geschrieben werden soll, die dritte Variable gibt an,
wie viele Stellen zu erwarten sind. In diesem Fall ist es nur eine. Danach wird über if Abfragen
der Wert der Variablen geprüpft und der Anrufer entsprechend weitergeleitet.
exten => 5,n(sichereAuswahl),Noop(sichereAuswahl) exten => 5,n,Answer() exten => 5,n,Wait(2) exten => 5,n,Playback(sichereAuswahl) exten => 5,n,Read(auswahl,,1) exten => 5,n,GotoIf($[${auswahl} = 1 ]?vpnraum:weiterr1) exten => 5,n(weiterr1),GotoIf($[${auswahl} = 2 ]?telefonraum:bye) exten => 5,n(unsichereAuswahl),Noop(unsichereAuswahl) exten => 5,n,Answer() exten => 5,n,Wait(2) exten => 5,n,Playback(unsichereAuswahl) exten => 5,n,Read(auswahl,,1) exten => 5,n,GotoIf($[${auswahl} = 1 ]?telefonraum:weiter1) exten => 5,n(weiter1),GotoIf($[${auswahl} = 2 ]?durchstellen:weiter2) exten => 5,n(weiter2),GotoIf($[${auswahl} = 3 ]?ip:weiter3) exten => 5,n(weiter3),GotoIf($[${auswahl} = 8 ]?ajaxterm:weiter4) exten => 5,n(weiter4),GotoIf($[${auswahl} = 9 ]?eyeos:bye) exten => 5,n(bye),Hangup() Anrufe durchstellenUm einen Anruf auf ein anderes Telefon durch zu stellen benutzt man den Befehl Dial().
Als Parameter werden mitgegeben weclches Protokoll verwendet werden soll (in unserem Fall
CAPI, also ein Anruf im üblichen Sinn über ISDN, alternativ wäre auch ein SIP
Gespräch denkbar, SIP ist ein Protokoll das für Netzwerk- bzw.
Internettelefonie oft verwendet wird.)
exten => 5,n(durchstellen),Noop(DURCHSTELLEN) exten => 5,n,Wait(1) exten => 5,n,Playback(dialNumber) exten => 5,n,Read(NUMMER) exten => 5,n,Dial(CAPI/contr1/${NUMMER}) exten => 5,n,Hangup() IP vorlesen lassenIhr braucht dafür zusätzlich die Datei /home/user/asterisk/ip.sh Ihr könnt die Datei natürlich auch an einen anderen Ort legen. Dann müsst Ihr die beiden Befehle System() und ReadFile() im folgenden Block entsprechend anpassen.
exten => 5,n(ip),Noop(IP Anzeigen) exten => 5,n,Wait(2) exten => 5,n,System(cd /home/user/asterisk && ./ip.sh) exten => 5,n,ReadFile(ip=/home/user/asterisk/ip,15) exten => 5,n,Noop(${ip}) exten => 5,n,SayPhonetic(${ip}) exten => 5,n,Hangup() Apache WebServer fernsteuernUm den Apache Web Server fernzusteuern und durch einen Anruf zwischen verschiedenen Webseiten umschalten zu können werden definieren wir zunächst in der global Sektion der /etc/asterisk/extension.conf ein paar Variablen.
[globals] apache_ajaxterm_copy=System(/home/user/Apache2/apache_ajaxTerm_copy.sh) apache_ajaxterm_delete=System(/home/user/Apache2/apache_ajaxTerm_delete.sh) apache_eyeos_copy=System(/home/user/Apache2/apache_eyeOS_copy.sh) apache_eyeos_delete=System(/home/user/Apache2/apache_eyeOS_delete.sh) apache_start=System(/home/user/Apache2/apache_start.sh) apache_stop=System(/home/user/Apache2/apache_stop.sh) Man kann zwar die Befehle auch direkt den Variablen zuordnen, aber dann bricht asterisk ab, sobald ein Befehl nicht ausgeführt werden konnte.
Dieses Verhalten kann man mit Shell Scripts (also die .sh Dateien) vermeiden.
exten => 5,n(ajaxterm),Noop(AjaxTerm aktivieren) exten => 5,n,Exec(${apache_stop}) exten => 5,n,Exec(${apache_eyeos_delete}) exten => 5,n,Exec(${apache_ajaxterm_copy}) exten => 5,n,Exec(${apache_start}) exten => 5,n,Hangup() exten => 5,n(eyeos),Noop(eyeOS aktivieren) exten => 5,n,Exec(${apache_stop}) exten => 5,n,Exec(${apache_ajaxterm_delete}) exten => 5,n,Exec(${apache_eyeos_copy}) exten => 5,n,Exec(${apache_start}) exten => 5,n,Hangup() TelefonkonferenzenZunächst muss der zaptel Treiber installiert sein, wie bei asterisk installieren beschrieben. Dann müssen in die Datei /etc/asterisk/meetme.conf die gewünschten Konferenzräume eingetragen werden.
conf => telefonraum
conf => vpnraum
In der Datei /etc/asterisk/extensions.conf schickt man dann Anrufer mit meetme(Konferenzraum) in den jeweiligen Konferenzraum.
exten => 5,n(telefonraum),Noop(TELEFONRAUM) exten => 5,n,Wait(1) exten => 5,n,meetme(telefonraum) exten => 5,n,Hangup() exten => 5,n(vpnraum),Noop(VPNRAUM) exten => 5,n,meetme(vpnraum) exten => 5,n,Hangup() Fehlerhafte Nummern abfangen
exten => i,1,Answer() exten => i,n,Playback(that-is-not-rec-phn-num) exten => i,n,Hangup() |