Asterisk - Faxempfang mit XMPP Ausgabe
Faxe mit Asterisk empfangen und über XMPP anzeigen lassen

Warum das Ganze?
Da der Faxempfang in meiner Fritzbox gestört ist, musste ich mir eine Ersatzlösung einfallen lassen.
Da mein Asterisk ja eh schon läuft und auch schon externe Nummern verwaltet, lag es nahe, dort eine Lösung zu implementieren. Und wenn man schon mal dran ist, warum nicht an seine eigenen Wünsche anpassen? Mein Messenger Client läuft eh die ganze Zeit und dort sehe ich eher nach, ob es irgendetwas Neues gibt als in den ganzen eMails, welche mittlerweile einen nicht unerheblichen Teil an SPAM beinhalten.
Herausgekommen ist eine Lösung, welche den Faxempfang über Asterisk ermöglicht und mittels Dialplan das empfangene Fax via XMPP an einen beliebigen (allerdings dann fest eingestellten) XMPP-Empfänger senden kann.
Die Konfiguration der externen Rufnummer spare ich mir an dieser Stelle, ich habe hier im Blog schon verschiedene Beispiele dafür gegeben, z. B. Telekom Konfiguration oder Sipgate Konfiguration.
Der Dialplan (extensions.conf)
exten => +49vvvvnnnnnn,1,NoOp(Faxempfang von ${CALLERID(num)})
same => n,Answer()
same => n,Set(FAXOPT(headerinfo)=Empfangenes Fax)
same => n,Set(FAXFILE=/var/spool/asterisk/fax/fax-${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}-${UNIQUEID}.tif)
same => n,ReceiveFAX(${FAXFILE})
same => n,GotoIf($["${FAXOPT(status)}" = "SUCCESS"]?success:failed)
same => n(success),NoOp(Fax erfolgreich empfangen: ${FAXFILE})
same => n,JabberSend(xmpp-kontext,empfaenger@xmpp-server.de,Asterisk hat ein Fax von ${CALLERID(num)} empfangen unter ${FAXFILE})
same => n,System(/usr/local/bin/fax2pdf-xmpp.sh "${FAXFILE}" "${CALLERID(num)}")
same => n,Hangup()
same => n(failed),NoOp(Faxempfang fehlgeschlagen: ${FAXOPT(error)})
same => n,JabberSend(xmpp-kontext,empfaenger@xmpp-server.de,fehlgeschlagener Faxempfang von ${CALLERID(num)})
same => n,Hangup()
Erklärung: die erste Zeile ist einfach die ankommende Rufnummer als extension (vvvv steht für die Vorwahl,
nnnnnn für die Telefonnummer, auf der Asterisk reagieren soll).
Die nächsten Zeilen legen fest, wo Asterisk das empfangene Fax hinspeichern soll und unter welchem
Namen es wiederzufinden ist. Danach erfolgt mit der Funktion ReceiveFAX der eigentliche Faxempfang.
Je nach Erfolg oder Mißerfolg wird in unterschiedliche Verzweigungen abgebogen. Die beiden JabberSend
Funktionen benachrichtigen den Empfänger mit der Adresse empfaenger@xmpp-server.de über den Erfolg oder
Mißerfolg des (vermeintlichen) Faxempfangs.
Die XMPP/Jabber Konfiguration (/etc/asterisk/xmpp.conf)
Damit der Versand über XMPP funktioniert, muss der o. g. Kontext xmpp-kontext in der Datei
/etc/asterisk/xmpp.conf definiert werden, in etwa so:
[xmpp-kontext]
type=client
serverhost=xmpp-server.org
username=asterisk@xmpp-server.org
secret=StrenggeheimesPasswort
priority=25
port=5222
usetls=yes
usesasl=yes
status=available
statusmessage="Immer da"
timeout=5
Mit diesen Zugangsdaten loggt sich Asterisk bei dem (hier fiktiven) XMPP-Server xmpp-server.org ein. Diese müssen natürlich den realen Bedingungen angepasst werden.
Das Bash-Script (/usr/local/bin/fax2pdf-xmpp.sh)
Im obigen Dialplan wird aus Asterisk das Bash-Script /usr/local/bin/fax2pdf-xmpp.sh mit 2 Parametern aufgerufen.
Der erste Parameter ist der Name der gespeicherten Faxdatei inklusive Pfad, der zweite Parameter beinhaltet die
Rufnummer, von der aus das Fax gesendet wurde. Nachfolgend das eigentliche Bash-Script:
#!/bin/bash
set -euo pipefail
TIFF="$1"
CALLER="${2:-unbekannt}"
# Pfade löschen/erneuern und Endung umbennen
dateiname_ohne_ende="${TIFF##*/}" # "datei.tif"
dateiname_neu="${dateiname_ohne_ende%.tif}.pdf"
PDF="/tmp/${dateiname_neu}"
tiff2pdf -o "$PDF" "$TIFF"
/usr/bin/go-sendxmpp -h $PDF empfaenger@xmpp-server.de && rm -f "$PDF"
# optional: TIFF nach erfolgreichem Versand löschen
# /tmp/ Verzeichnis aufräumen
#rm -f "$TIFF"
exit 0
Damit das Script funktioniert, bedarf es der Installation zweier weiterer Programme:
- go-sendxmpp mittels
apt install go-sendxmppund - tiff2pdf mittels
apt install libtiff-tools
go-sendxmpp sendet das Fax als Anhang (Option -h kurz für http-upload) an den XMPP-Empfänger
empfaenger@xmpp-server.de. Dieser Empfänger sollte sinnvollerweise der Gleiche sein wie im Asterisk Dialplan.
tiff2pdf macht davor die Umwandlung der empfangenen Faxdatei (im TIFF-Format) in das bekannte
PDF-Format
Das Script muss natürlich für den Asterisk-Benutzer (oder global) ausführbar sein, z. B. mithilfe von
chmod +x /usr/local/bin/fax2pdf-xmpp.sh
Schlussbemerkung
Bei mir läuft das Ganze aktuell unter Debian 13 (trixie). Bei anderen Distributionen müssen ggf. die Paketnamen angepasst oder andere Lösungen implementiert werden.
Nach der Installation von go-sendxmpp ist dessen
Konfiguration noch anzupassen.