Faxe mit Asterisk empfangen und versenden

19. April 2022

Die Telefon-Software Asterisk lässt sich ganz leicht dazu bringen Faxe zu empfangen, die es als TIF-Dateien ablegt sind. Getestet habe ich das Verfahren mit Asterisk 16.x auf einem Raspberry Pi mit Raspbian als Betriebssystem. Auch das Versenden gelingt, wenn auch mit Einschränkungen.

A. Faxe empfangen: In der Sip.conf muss folgender Eintrag unter [general] erfolgen:

; Auszug aus der sip.conf für den Fax-Empfang
[general]
faxdetect=yes
; t38pt_udptl=yes
; directmedia=no

In der Extensions.conf steht folgendes, damit hier im Beispiel beim Wählen der Nummer 76543 Faxe empfangen können:

; Auszug aus der extensions.conf
;
; +++++++++++++++++++++++++++ FAX ++++++++++++++++++++++++++++++++
; Faxempfang ohne T.38 (nur Audio-Fax-Signale) an die Nummer 76543
; beim Pfad /var/spool/asterisk/fax/ muss /fax angelegt
; werden und Ordnerfreigabe 777 anlegen
; udptl.conf muss bei Asterisk 16.xxx nicht geändert werden.
; damit geht es auch mit meinem alten Minoltafax 160 und über IAX2
exten => 76543,1,Answer()
same => n,Wait(3)
same => n,Set(FAXOPT(ecm)=yes)
same => n,Set(FAXOPT(maxrate)=9600)
same => n,Set(FAXOPT(minrate)=2400)
same => n,Set(FAXFILE=/var/spool/asterisk/fax/${UNIQUEID}.tif)
same => n,ReceiveFAX(${FAXFILE})
same => n,NoOp(STATUS: ${FAXOPT(status)})
same => n,NoOp(RESOLUTION: ${FAXOPT(resolution)})
same => n,NoOp(REMOTSTATIONID: ${FAXOPT(remotestationid)})
same => n,NoOp(RATE: ${FAXOPT(rate)})
same => n,NoOp(PAGES: ${FAXOPT(pages)})
same => n,NoOp(ERROR: ${FAXOPT(error)})
same => n,Hangup()

Die empfangenen Faxe werden im Pfad /var/spool/asterisk/fax/ als TIF-Dateien abgelegt. In meinem Fall musste ich noch den Ordner “fax” von Hand anlegen und alle Berechtigungen für Schreiben, Lesen und so weiter vergeben. Wenn ein Fax aus mehreren Seiten besteht, werden diese in einer einzigen TIF-Datei abgelegt. Die einzelnen Seiten lassen sich mit dem Programm IrfanView aufrufen.

Was im Asterisk-CLI während des Fax-Empfangs zu sehen ist.

Der Empfang der Faxe funktioniert bei mir auch über IAX2. Mit einem 30 Jahre alten Minoltafax 160 funktioniert es ebenso. Das Protokoll T.38 kommt nicht zum Einsatz. Empfangen werden nur die  Audio-Fax-Signale. Ruft man mit einem normalen Telefon die Faxnummer an (hier 76543), dann muss sich das Asterisk-Fax mit dem typischen akustischen Faxsignal melden.

Die udptl.conf für den Fax-Betrieb habe ich nicht verändert und deshalb zur Sicherheit nachfolgend vorgestellt:

;
; UDPTL Configuration (UDPTL is one of the transports for T.38)
;
[general]
;
; UDPTL start and UDPTL end configure start and end addresses
;
udptlstart=4000
udptlend=4999
;
; Whether to enable or disable UDP checksums on UDPTL traffic
;
; udptlchecksums=no
;
; The number of error correction entries in a UDPTL packet
;
udptlfecentries = 3
;
; The span over which parity is calculated for FEC in a UDPTL packet
;
udptlfecspan = 3
;
; Some VoIP providers will only accept an offer with an even-numbered
; UDPTL port. Set this option so that Asterisk will only attempt to use
; even-numbered ports when negotiating T.38. Default is no.
use_even_ports = no

Der Fax-Empfang ist sehr rudimentär, da keine Hinweise über den Empfang von Faxen erfolgt. Wer eine E-Mail-Benachrichtigung haben möchte, kann sich auf https://github.com/michelep/SimpleAsteriskFax anregen lassen.

Besten Dank an Adi, DL1HRC, für seine Unterstützung, Anregungen und Hinweise.

Ein altes Faxgerät dient auch als Scanner. Die Scans legt als Asterisk als TIF-Dateien ab, wenn in meinem Beispiel das Faxgerät die Nummer 76543 anwählt.

B. Faxe versenden: Das Problem ist die Zielnummer irgendwo im Code anzugeben. Bei meiner Lösung muss man von einer Nebenstelle die 76543 vorwählen und dann als Durchwahl die Nummer des Faxe anwählen. Diese Nummer muss eine SIP-Nebenstelle des Asteriskservers sein, auf dem auch der Faxversand eingerichtet ist. Immerhin lassen sich damit Faxgeräte testen.

Fax-Versand im Asterisk-CLI

An der Sip.conf und der Udptl.conf für den Faxversand hat sich nichts geändert. Wir müssen nur die extensions.conf erwetern:

; Auszug extensions.conf für den Fax-Versand
; getestet auf Asterisk 16.xx, Raspberry Pi und Raspbian
; 20. April 2022, SM5ZBS
;
[general]
autofallthrough=no
static=yes
writeprotect=no
;
; Faxversand
[macro-faxversand] ; Faxversand
; das zu versendende Fax muss hier in diesem Pfad als Tif vorliegen:
; /var/spool/asterisk/fax/faxversand.tif
; Ordner muss vollständig freigegeben werden.
exten => s,1,NoOp("Versenden eines Faxes")
same => n,Answer()
same => n,Set(FAXOPT(ecm)=yes)
same => n,Set(FAXOPT(maxrate)=9600)
same => n,Set(FAXOPT(minrate)=2400)
same => n,Set(faxlocation=/var/spool/asterisk/fax) 
same => n,Set(faxfile=faxversand.tif) 
same => n,Set(FAXOPT(headerinfo)=Volker Lange-Janson)
same => n,Set(FAXOPT(localstationid=76543)
same => n,SendFax(${faxlocation}/${faxfile})
same => n,Hangup()
;
[telefone] ; hier stehen die extensions. Der context kann auch anders als lauten.
; Faxversand. 76543 als Vorwahl und dann die Faxnummer des Ziels
; mit einem normalen Telefon wählen
; geht leider nur mit SIP-Accounts des Asterisk-Servers, auf
; dem auch dieses Software-Faxgerät eingerichtet ist.
; Im Telefon hört man ein Freizeichen oder nichts während der Übertragung
exten => _76543X.,1,Dial(SIP/${EXTEN:5},,M(faxversand))
; ,,M(faxversand) ruft das Macro faxversand [macro-faxversand] auf
;

Beispiel: Wenn man von einer belieben SIP-Nebenstelle des Asterisk-Servers die Durchwahl 76543 1099 wählt, dann wird das Die Tif-Datei im Pfad /var/spool/asterisk/fax/faxversand.tif an als Fax an das Faxergät mit der SIP-Nummer 1099. Geschickt. Das reicht wenigstens für das Verschicken von Testfaxen. Schuld an dieser Einschränkung ist die Programmzeile

exten => _76543X.,1,Dial(SIP/${EXTEN:5},,M(faxversand))

für das Verschicken von Faxen zu einem bestimmen SIP-Account. Eine besser Lösung habe ich nicht gefunden.

Bis jetzt ist es mir nur gelungen TIF-Dateien zu versenden, die ich auch mit Asterisk empfangen hatte. Offenbar müssen die TIF-Dateien ganz genau bestimmte Bedingungen einhalten. Das Verfahren taugt also nur um einen Service anzubieten, der ein Fax zu Testzwecken verschickt. Dieser Service funktioniert zudem nur von einem SIP-Account zu einem anderen SIP-Account innerhalb desselben Asterisk-Servers.

Während des  Faxversandes kann im Telefon ein Freizeichen oder nichts zu hören sein, bis die Faxübertragung beendet ist.  Weiter habe ich den Faxversand aus Asterisk nicht mehr verfolgt, da fertige und elegantere Software-Lösungen existieren.

Pragmatische Lösung: Falls jemand tatsächlich ab und zu ein Fax verschicken oder empfangen muss und keine Geld ausgeben möchte, empfehle ich für den Empfang eine Lösung mit einer FritzBox, die die empfangenen Faxe automatisch per E-Mail an den Empfänger per PDF-Datei verschickt. Bei mir kommt die FritzBox 7360 zm Einsatz. Dem virtuellen Fax der FritzBox wird eine Telefonnummer ausschließlich für den Faxbetrieb reserviert.Für das Versenden ist die FritzBox etwas umständlich. Recht bequem geht es mit dem SIP-Provider EinfachVoip (Nexxtmobile). Bei ihm erhält man eine kostenlose Telefonnummer als SIP-Account. EinfachVoip ermöglicht es über sein Webportal PDF-Dateien an ausschließlich deutsche Telefonnummern zu verschicken. Die Gebühren sind sehr günstig.Als weitere Lösung kann das SIP-Software-Fax VentaFax für Windows zum Einsatz kommen. Die Testversion ist voll funktionsfähig. Allerdings enthalten die versendeten Faxe einen Hinweis, dass die Faxe von einer unregistrierten VentaFax-Version verschickt worden sind. Außerdem muss das unregistrierte VentaFax alle paar Monate neu installiert werden.