Damit das ganze Vollständig ist zwei Kapitel Fax empfangen und Fax versenden aus dem Buch Asterisk Kompakt (BETA)
Ein Feedback wäre gut um Unklarheiten noch zu verbessern.
Ein Fax mit Asterisk entgegennehmen
Ist der Asterisk mit einer ISDN Karte ausgestattet, so kann man ihn auch dazu bewegen Faxe entgegenzunehmen oder zu versenden. Dazu benötigt Asterisk zwei weitere Anwendungen, app_rxfax und app_txfax, welche sich in der Bibliothek spandsp befinden. Spandsp ist eine Bibliothek für Digital Signal Processing kurz DSP. Mit Hilfe von DSP kann man Bilder in Töne konvertieren und umgekehrt und somit auch Faxe empfangen (Ton zu Bild) oder versenden (Bild zu Ton).
Erhältlich ist spandsp auf folgender Webseite:
http://soft-switch.org/downloads/spandsp/
Dort existieren verschieden Versionen von spandsp. Für die Asterisk Version 1.2 kann das Packet spandsp-0.0.2pre21c verwendet werden. Neben der benötigten Bibliothek spandsp gibt es ein weiteres Verzeichnis asterisk-1.2.x aus welchem die Programme app_rxfax und app_txfax heruntergeladen werden müssen, sowie das dazugehörige Patchfile apps_makefile.patch.
Bevor man mit dem kompilieren beginnen kann muß noch sichergestellt werden dass folgende Packete installiert sind:
libtiff, libtiff-devel
libjpeg, libjpeg-devel
libxml2, libxml2-devel
libstdc++, libstdc++-devel
Das Packet spandsp wird in das Verzeichnis /usr/src entpackt und mit folgenden Befehlen compiliert:
./configure
make
make install
Installieret wird spandsp in folgende Verzeichnisse:
/usr/local/include
/usr/local/lib
/usr/local/share
Die beiden Anwendungen app_rxfax.c und app_txfax.c sowie das Patchfile apps_makefile.patch werden in das Anwendungsverzeichnis der Asteriskquellen. /usr/src/asterisk-version/apps/ kopiert. Anschließend muß noch das Makefile in diesem Verzeichnis mit folgendem Befehl gepatcht werden:
patch < apps_makefile.patch
Zum Schluß werden noch die Asterisk Quellen neu kompiliert, indem man in das Verzeichnis /usr/src/asterisk-version wechselt und die bekannten Befehle ausführt:
make clean
make
make install
Der Befehl make samples sollte diesmal nicht ausgeführt werden, da sonst die Asterisk Konfigurationsdateien im Verzeichnis /etc/asterisk überschrieben werden.
Nach erfolgreicher Installation befinden sich die beiden Programme app_rxfax.so und app_tx_fax.so im Modulverzeichnis /usr/lib/asterisk/modules.
Asterisk soll so konfiguriert werden, dass Faxe auf der internen Rufnummer 52 entgegengenommen werden. Diese sollen dann per E-Mail Anhang als PDF Datei an eine zentrale Adresse fax@domain weitergeleitet werden.
Da die ankommenden Faxe von der Anwendung rxfax in eine tiff Datei geschrieben werden, müssen wir noch das Programm tiff2pdf installieren welches sich in dem Packet tiff befindet und in der Lage ist Bilddateien des Formates TIFF in PDF Dateien umzuwandeln.
Die Konvertierung der Bilddatei in das PDF Format, sowie die Zustellung per E-MAIL an den lokalen MTA (Mail Transport Agent) erfolgt mit Hilfe des bash Scriptes fax2mail. Gegebenfalls muß der MTA für die Weiterleitung der E-Mail an den zuständigen Mailserver des Benutzers der die Mail empfangen soll eingerichtet werden. Im Fall von Postfix geschieht dies in der der Datei /etc/postfix/main.cf mit Hilfe des Eintrages relayhost= mailserver.
Gefunden habe ich das Skript in ähnlicher Form auf der Webseite
http://www.voip-info.org und etwas modifiziert. Die Hauptidee des Skriptes stammt von Scott Laird:
http://scottstuff.net/scott/archives/000152.html.
fax2mail:
Code:
#!/bin/sh#
# $1 ${CALLERIDNUM}
# $2 ${MAILADDRE}
# $3 ${FAXFILE}
#echo Received paramters $1 $2 $3 >>/var/log/faxmail.log
MAILBODY=$3.txtDATETIME=`date +"%A %d %b %Y %H:%M"`
PAGES=$(tiffinfo $3 | tail -21 |grep "Page" | cut -d "-" -f2)
DT=$(tiffinfo $3 | tail -21 |grep "Date" |cut -d "-" -f2)
DTFAX=${DT#*:}
COUNT=${PAGES#*-}
rm -f $MAILBODY
tiff2pdf $3 -o $3.pdf
echo >> $MAILBODY
echo ------------------------------------------------------------- >> $MAILBODY
echo Sie haben ein neues Fax bekommen. >> $MAILBODY
echo >> $MAILBODYecho Sendenummer: $1 >> $MAILBODY
echo Empfangszeit: $DTFAX >> $MAILBODY
echo Anzahl der Seiten: $COUNT >> $MAILBODY
echo >> $MAILBODY
echo Das Fax befindet sich im Anhang als PDF Datei. >> $MAILBODY
echo ------------------------------------------------------------- >> $MAILBODY
echo >> $MAILBODY
echo Thank you for using Open Source Software ! >> $MAILBODY
cat $3.txt | mail -r "Asterisk" -s "FAXEINGANG" -a "$3.pdf" $2
rm -f $MAILBODY
Das Script wird in ein passendes Verzeichnis auf den Asterisk Server kopiert und muß für den Asterisk Nutzer unter dem der Asterisk Server läuft die Rechte ausführen besitzen. In meiner Konfiguration befindet sich das Script im Verzeichnis /var/lib/asterisk/scripts.
Damit Faxe entgegen genommen werden können muß in der capi.conf die Rufnummer 52 für ankommende Rufe aktiviert sein. Der Rufnummernplan wird um ein Macro namens „faxempfang“ und einem Kontext für ankommende Faxe erweitert:
Code:
[macro-faxempfang]
exten => s,1,SetVar(SCRIPTFILE=/var/lib/asterisk/scripts/fax2mail)
exten => s,n,SetVar(FAXFILE=/var/spool/asterisk/fax/${UNIQUEID})
exten => s,n,SetVar(MAILADDR=fax@domain)
[incoming_fax]
exten => 52,1,Wait(3)
exten => 52,n,Macro(faxempfang)
exten => 52,n,rxfax(${FAXFILE})
exten => 52,n,system("${SCRIPTFILE}" "${CALLERIDNUM}" "${MAILADDR}" "${FAXFILE}")
exten => 52,n,Hangup
Im Marco faxempfang werden folgende die Variablen gesetzt:
SCRIPTFILE
Das Script welches das ankommende Fax in eine PDF Datei umwandelt und anschließend die PDF Datei als E-Mailanhang versendet.
FAXFILE
Der Speicherort des ankommenden Faxes. Mit Hilfe der Variablen ${UNIQUEID} wird dafür gesorgt dass jedes ankommende fax einen eindeutigen Dateinamen in Form einer Zahl erhält.
MAILADDR
Die E-Mailadresse an der das FAX gesendet werden soll.
[incoming_fax]
exten => 52,1,Wait(3)
Im Kontext [incomming_fax] wird nun bei einem ankommenden FAX auf der Rufnummer 52 als erstes für 3 Sekunden gewartet.
exten => 52,n,Macro(faxempfang)
Danach wird das Macro Faxempfang aufgerufen.
exten => 52,n,rxfax(${FAXFILE})
Im dritten Schritt nimmt die Anwendung rxfax das Fax entgegen und erstellt eine tif Datei im Verzeichnis /var/spool/asterisk/fax
exten => 52,n,system("${SCRIPTFILE}" "${CALLERIDNUM}" "${MAILADDR}" "${FAXFILE}")
Mit Hilfe des Befehls system wird auf der Linux Shell das Script fax2mail (${SCRIPTFILE}) ausgeführt. Dem Scriptfile werden dabei die Parameter die CallerID des Sendenten (${CALLERIDNUM}), E-Mailadresse des Empfängers "(${MAILADDR) sowie das empfangene Faxdokument (${FAXFILE}) übergeben.
Asterisk ist nun bereit Faxe entgegen zu nehmen.
Ein Fax versenden
Nachdem Asterisk nun Faxe annehmen, und als E-Mail an Benutzer weiterleiteten kann wollen wir nun den entgegengesetzten Weg probieren. Wieder kommt uns ein kleines Linux Script namens email2fax zur Hilfe. Email2fax wurde von Tomasz Chmielewsky geschrieben und bietet die Möglichkeit TIFF und PDF Dokumente per E-Mail als Fax zu versenden.
Dazu wird eine E-Mail mit der zu sendeten Datei als Anhang an den Asterisk Server gesendet und in der Betreffzeile die entprechende Rufnummer angegeben. Das Script wertet diese Informationen aus konvertiert den Anhang und übergibt das ganze an Asterisk, welcher dann ein Fax an die entsprechende Rufnummer mit Hilfe der Anwendung app_txfax.c sendet.
Email2Fax kann auf der Webseite
http://wpkg.org/email2fax/index.php heruntergeladen werden und ist unter der GPL Lizenz veröffentlicht. Für das Versenden kommt wieder die Bibliothek spandsp, sowie die schon besprochene Asterisk Anwendung app_txfax.c zum Einsatz.
Außerdem müssen das Packet munpack installiert sein, welches in der Lage ist MIME Nachrichten zu decodieren. Munpack befindet sich im Packet mpack , welches leider nicht in jeder Distribution enthalten ist. In diesem Fall kann man versuchen die im Packet email2fax mitgelieferten Programme mpack und mupack zu verwenden. Sollte dies fehlschlagen, sucht man sich am besten ein passendes rpm Packet über http:/fr2.rpmfind.net.
Als letztes muß noch sichergestellt werden dass die Packete libtiff sowie Ghostscript installiert sind. Ghostscript sollte dabei in einer Version >= 8 vorliegen.
Nach dem Download von email2fax in das Verzeichnis /usr/src/ wird dieses mit Hilfe von tar entpackt:
# cd usr/src
# tar –xvjf email2fax-version
Anschließend wird die in dem Archiv befindliche ausführbare Datei email2fax in das Verzeichnis /usr/local/bin kopiert:
# cp /usr/src/email2fax-version/ /usr/local/bin
Im Verzeichnis bin des Archivs befinden sich außerdem die beiden Programme mpack und munpack, welche nach /usr/bin/ kopiert werden:
# cp /usr/src/email2fax-version/usr/bin/m* /usr/bin
In dem Script email2fax müssen nun noch ein paar Variablen angepasst werden:
FAXMAIL=Asterisk FAX <
[email protected]>
Nach dem versenden eines Faxes durch Asterisk oder bei Problemen erhält der der Sender eine E-Mail welche als Absender diesen Namen enthält.
CHANNEL="CAPI/contr1"
Über welchen Channel das Fax versendet wird.
LOGFILE=/var/log/asterisk/faxlog
In dieser Datei wird der Fax Versand protokolliert.
TMPDIR=/tmp/email2fax
In diesem Verzeichnis wird die E-Mail entpackt.
MAXAGE=300
Zeit in Minuten wie lange die Dateien in TEMPDIR aufbewahrt werden.
ASTERISKUSER=asterisk
Hier muß der Nutzer angegeben werden unter welchem der Asterisk Dienst läuft.
Bevor wir email2fax in Verbindung mit Asterisk nutzen, sollten wir auf der Linux Shell prüfen ob unsere Installation erfolgreich und alle Einstellungen richtig sind.
Dazu erzeugt man am besten eine E-Mail mit einer PDF- oder TIF-Datei im Anhang und einer gültigen Fax Rufnummer im Betreff, welche als eml Datei abgespeichert wird. Für Windows Benutzer ist es dabei wichtig diese Datei mit dem Zeilenumbruchformat für UNIX zu speichern. Ich hatte das nicht beachtet und lange lange lange… nach dem Fehler gesucht.
Diese Datei wird dann auf den Asterisk Server kopiert und über die Linux Shell durch folgenden Befehl an Asterisk übergeben:
# cat mail.eml | sudo –u asteriskuser email2fax –-debug
Läuft alles glatt, haben Sie nun Ihr erstes Fax über Asterisk versendet. Bei Problemen hilft ein Blick in das Logfile:
# tail –f /var/log/asterisk/faxlog
Als nächstes muß noch der auf dem Asterisk Server laufende MTA (Mail Transfer Agent) eingerichtet werden um die entsprec
henden E-Mails entgegenzunehmen um sie anschließend an das Script email2fax zu übergeben.
Im folgenden Beispiel verwende ich Postfix als MTA. E-Mails die als Fax über Asterisk versendet werden sollen werden an die Adresse [email protected]l geschickt. Um diese an das Scrip tzu übergeben eignet sich beispielsweise der lokale Mailer Procmail.
Damit Procmail von Postfix Beachtung findet muß in der Datei /etc/postfix/main.cf folgender Eintrag vorgenommen werden:
mailbox_comand = /usr/bin/procmail
Möchte man Procmail global verwenden erstellt man im Verzeichnis /etc/ die Datei procmailrc mit entsprechenden Rechten für den Benutzer root:
# touch /etc/procmailrc
# chown root:root /etc/procmailrc
# chmod 644 /etc/procmailrc
In der Datei wird folgende Regel erstellt:
VERBOSE=YES
LOGFILE=/var/log/procmail
:0fw#* ^To: <[email protected]>| /usr/local/bin/email2fax
Dadurch werden E-Mails, welche an [email protected]l adressiert sind, ab sofort an das Script email2fax übergeben, und über Asterisk als Fax versendet.
______________________________________
Auszug aus dem Buch "Asterisk Kompakt"
www.bomots.de
______________________________________