So, hier ist nach all den seltsamen Irrungen meinerseits die versprochene Lösung für die Frage:
Wie kann ich mit einer Eicon Diva Server ISDN-Karte und chan_capi Faxe empfangen und als TIFF-Datei per Mail weiterleiten?
Ich hoffe, dass hier jetzt keine Fehler mehr drin sind... bei mir läuft es jedenfalls seit rund 24 Stunden fehlerfrei.
Schritt1:
In der extensions.conf legt man einen extra Context an, der für alle Faxnummern bzw. -durchwahlen verwendet werden soll. Dieser Context wird nicht mit Include in den Default-Context eingebunden. Das verhindert, dass die h-extension dieses Contexts für alle Gespräche verwendet wird:
Code:
[handlefax]
exten => s,1,Set(FAXFILE=/var/spool/asterisk/fax/${UNIQUEID})
exten => s,2,capicommand(receivefax|${FAXFILE})
exten => s,3,Hangup()
exten => h,1,System(/var/lib/asterisk/scripts/fax2mail.sh "${FAXFILE}" "${FAXID}
" "${FAXPAGES}" "${FAXRATE}" "${MAILEMPF}")
Schritt 2:
Ebenfalls in der extensions.conf (bei mir landen die ankommenden ISDN-Gespräche im Context [from-capi]) werden die Faxnummern bzw. -durchwahlen so eingerichtet, dass sie den neuen Context [handlefax] verwenden. Zuvor wird die Mailadresse des Fax-Empfängers an eine Channel-Variable übergeben, die dann in [handlefax] ausgewertet wird:
Code:
[from-capi]
exten => 1234567,1,Set([email protected])
exten => 1234567,n,Goto(handlefax,s,1)
exten => 1234567,n,Hangup()
exten => 1234568,1,Set([email protected])
exten => 1234568,n,Goto(handlefax,s,1)
exten => 1234568,n,Hangup()
Unter der Nummer 1234567 eingehende Faxe sollen also an die Mailadresse ich @ domain.xyz weitergeleitet werden, die Faxnummer 1234568 bedient die Mailadresse du @ domain.xyz.
Schritt3:
Jetzt liegt das empfangene Fax als SFF-Datei im Verzeichnis /var/spool/asterisk/fax. Von dort soll es nun in eine TIFF-Datei umgewandelt werden und anschließend per Mail an den entsprechenden Empfänger verschickt werden.
Das hierzu verwendete Script mail2fax.sh [EDIT: Schreibfehler - es muss natürlich fax2mail.sh heißen] stammt im Wesentlichen hier aus dem Forum und wurde von mir nur etwas angepasst. Es befindet sich bei mir im Verzeichnis /var/lib/asterisk/scripts und sieht so aus:
Code:
#!/bin/bash
#
# *******************************************************************
# $1 FAXFILE (Name der SFF-Datei)
# $2 FAXID (Absenderkennung)
# $3 FAXPAGES (Seitenzahl)
# $4 FAXRATE (Geschwindigkeit)
# $5 MAILADRESSE (Zieladresse Mail)
# *******************************************************************
# *************************************
# Datum und Uhrzeit formatieren
# *************************************
heute=$(date +"%d.%m.%Y %H:%M:%S")
# *************************************
# Eintrag in Log schreiben
# *************************************
echo $heute $1 von $2 mit $3 Seiten fuer $5 empfangen >> /var/log/fax2mail.log
# *************************************
# Umwandeln von SFF in Multipage-TIFF
# *************************************
sfftobmp -tx $1 $1
# *************************************
# PDF ist auch denkbar
# *************************************
# sff2misc -p $1 $1.ps
# ps2pdf -sPAPERSIZE=a4 $1.ps $1.pdf
# *************************************
# Dateiname fuer Mailbody erstellen
# *************************************
MAILBODY=$1.txt
# *************************************
# Mailbody erzeugen
# *************************************
echo >> $MAILBODY
echo "Empfangen: ........ " $heute >> $MAILBODY
echo "Absender: ......... " $2 >> $MAILBODY
echo "Anzahl Seiten: .... " $3 >> $MAILBODY
echo "Geschwindigkeit: .. " $4 >> $MAILBODY
echo >> $MAILBODY
echo "Das Faxdokument finden Sie im Dateianhang als TIFF-Datei." >> $MAILBODY
echo "Alle Seiten befinden sich innerhalb dieser einer Datei..." >> $MAILBODY
echo >> $MAILBODY
echo "Ihr Asterisk" >> $MAILBODY
# *************************************
# Mail mit Dateianhang versenden
# *************************************
cat $MAILBODY | nail -r "asterisk" -s "Fax von $2" -a "$1.tif" $5
# *************************************
# Dateien loeschen
# *************************************
rm $MAILBODY
rm $1.tif
rm $1
# *************************************
# Eintrag in Log schreiben
# *************************************
echo $heute $1.tif an $5 verschickt >> /var/log/fax2mail.log
Im Script wird sfftobmp verwendet, das vermutlich nachinstalliert werden muss. Trotz seines Namens kann es SFF-Dateien (das ist das Dateiformat, das von capiCommand(receivefax) verwendet wird) auch in Multipage-TIFFS umwandeln.
Wenn der Mailversand auf dem Asterisk-Server korrekt eingerichtet wurde, landet nach dem Empfang eines Faxes eine Mail im Posteingang, die als Dateianhang die TIFF-Datei enthält.
[EDIT]: Zum Versand verwende ich hier ausdrücklich "nail" und nicht "mail", weil (zumindest die bei mir laufende Version von) "mail" keine Option zum Versand von Dateianhängen kennt. Mein SuSE 10.0 hat jedoch einen Link von "mail" auf "nail" gesetzt, so dass "mail" im Script trotzdem funktionieren würde. Wo das nicht der Fall ist, muss eben "nail" gegebenenfalls noch nachinstalliert werden.
Fertig!
Was ich noch nicht geschafft habe:
1. Vor der FAXID sind oft Leerzeichen, so dass eine Betreffzeile auch mal so aussehen kann:
Hat jemand eine Idee, wie ich alle Leerzeichen aus der FAXID rausbekommen kann? Oder: Nur noch das Pluszeichen und Zahlen in der FAXID belassen. Bin leider kein guter Bash-Programmierer...
2. Wäre es nicht doch klüger, das Script über deadAGI aufzurufen? Mir ist der Unterschied zwischen System() und deadAGI noch nicht klar.
Nun ja, es funktioniert!
Danke an alle, die mir hier geholfen haben! Einen besonderen Dank natürlich an Armin für die Unterstützung und nicht zuletzt für chan_capi!!!
Ralph