Faxweiche für Asterisk als Software-Lösung

7.12.2021

Mit einer Faxweiche für Asterisk als Software-Lösung lässt sich an einer einzigen Telefonnummer gleichzeitig ein Telefon und ein Fax anschließen. Die mit wenigen Programmzeilen realisierte Faxweiche erkennt die eingehenden Faxsignale und leitet die Telefonverbindung je nach dem entweder zum Telefon- oder zum Faxanschluss weiter.

In den 1990er Jahren hatten Kleinbetriebe und Selbständige oft nur eine einzige Telefonleitung, an der ein Telefax und ein Telefon gleichzeitig betrieben wurde. Die automatische Umschaltung erledigte ein kleines Kästchen, das die  Faxsignale erkannte und den Anruf entweder zum Fax oder zum Telefon weiterleite.

Minolta Minoltafax 160, Baujahr 1991. Die Thermopapierfaxrollen gibt es immer noch zu kaufen. Die schwarze Fritzbox rechts vom Fax dient als ATA. Das Fax ist mit dem analogen Telefonanschluss der FritzBox verbunden.

Das Problem bei mir war, dass mein Asterisk-SIP-Server nur über eine einzige Sipgate-Nummer erreichbar ist. Diese wollte ich gleichzeitig für normale Telefonate und den Faxempfang nutzen. Eine Software-Lösung musste her, die die Funktion einer Faxweiche übernimmt.

Wer einen Asterisk-Server betreibt, kann die Faxweiche mit ein paar Programmzeilen in der extensions.conf realisieren.

In der sip.conf müssen wir vorher unter [general] die Zeile faxdetect=yes einfügen:

; sip.conf
[general]
faxdetect=yes ; diese Zeile einfügen

Beispiel einer Faxweiche in der extensions.conf:

; Getestet mit Asterisk 16.2.1
; FAXWEICHE ZUM TESTEN
; decects if it is an incoming phonecall or fax
exten => 4433,1,NoOP()
exten => 4433,n,Set(FAXOPT(faxdetect)=yes)
exten => 4433,n,Answer()
exten => 4433,n,Wait(4)                       ; 4 seconds to detect fax sound
exten => 4433,n,NoOP(${FAXOPT(faxdetect)})    ; yes=phone, no=fax
exten => 4433,n,GotoIf($[${FAXOPT(faxdetect)} = yes]?phone:fax)
exten => 4433,n(phone),Dial(SIP/1059,60,tT)   ; Phone-Number
exten => 4433,n(fax),Dial(SIP/1077,60,tT)     ; Fax-Number

Erklärung des obigen Programmablaufs: Ruft jemand die 4433 an, stellt das Programm fest, ob Faxsignale zu hören sind. Dazu stehen 4 Sekunden zur Verfügng. Sind die Faxtöne zu hören und erkannt, gibt ${FAXOPT(faxdetect)} ein „no“ zurück. GotoIf leitet  dann den Anruf an die 1077 weiter, an der das Fax angeschlossen ist.  Sind Faxsignale nach 4 Sekunden immer noch nicht zu vernehmen, dann gibt ${FAXOPT(faxdetect)} ein „yes“ zurück und die Faxweiche leitet den Anrufer an die 1059 zurück. Dort ist ein Telefon angeschlossen.

Erkannt wurden Faxsignale eines 30 Jahre alten Minolta Minoltafax 160, des Sip-Softphone-Fax Venta Fax und der Fax-Emulation in einer FritzBox. Außerdem klappte es mit einem Faxmodem aus den USA über das C*Net. Leider klappte es nicht mit einem Fax, das über EinfachVoip gesendet wurde.

Sollte ein Fax nicht erkannt werden, klingelt das Telefon und der Angerufene vernimmt die Faxsignale im Telefonhörer. Der Angerufene kann dann den Ruf an das Fax weiterleiten. Bei meinem Asterisk geht dies für dieses Beispiel mit der Tastatureingabe „*1077“ für die Übergabe des Anrufers an die 1077.

Faxweiche für zwei Faxgeräte: Ich betreibe auf meinem Windows-Notebook das Software-Fax Venta Fax unter der Nummer 1099 und ein mechanisches Fax Minoltafax 166 mit Thermopapier unter der Nummer 1077, das permanent eingeschaltet ist.

; FAXWEICHE FÜR ZWEI FAXANSCHLÜSSE ZUM TESTEN
; decects if it is an incoming phonecall or fax
exten => 4433,1,NoOP()
exten => 4433,n,Set(FAXOPT(faxdetect)=yes)
exten => 4433,n,Set(FAXOPT(ecm)=no) ; Abschaltung der Fehlerkorrektur, die Ärger machen kann.
exten => 4433,n,Answer()
exten => 4433,n,Wait(4)                                        ; 3 seconds to detect fax sound
exten => 4433,n,NoOP(FAXOPT(faxdetect) : ${FAXOPT(faxdetect)}) ; yes=phone, no=fax
exten => 4433,n,NoOP(FAXOPT(ecm) : ${FAXOPT(ecm)})
exten => 4433,n,GotoIf($[${FAXOPT(faxdetect)} = yes]?phone:fax)
exten => 4433,n(phone),Dial(SIP/1059,60,tT)   ; Phone-Number
exten => 4433,n(fax),Dial(SIP/1099,3,tT)      ; 1. Fax Softphone Windows Ventafax
; wenn das Software-Fax 1099 sich nach 3 Sekunden nicht meldet oder besetzt ist,
; erfolft eine Weiterleitung auf den Faxapparat 1077
exten => 4433,n,GotoIf($[${DIALSTATUS} = NOANSWER]?secondfax:faxchan)
exten => 4433,n(faxchan),GotoIf($[${DIALSTATUS} = CHANUNAVAIL]?secondfax:faxcon)
exten => 4433,n(faxcon),GotoIf($[${DIALSTATUS} = CONGESTION]?secondfax:faxbus)
exten => 4433,n(faxbus),GotoIf($[${DIALSTATUS} = BUSY]?secondfax:awdh)
exten => 4433,n(secondfax),Dial(SIP/1077,4,tT)  ; 2. Fax Faxpparat Minoltafax 166
exten => 4433,n(awdh),Hangup()

Wenn mein Notebook eingeschaltet ist und Venta Fax aktiv ist, werden alle Faxe zum Notebook geleitet. Wenn das Notebook nicht eingeschaltet sein sollte, landen die Faxe automatisch auf das Minoltafax 166. Auf diese Weise verpasse ich kein Fax mehr und das alte Faxgerät dient als Notfallreserve.

Venta Fax ist ein SIP-Softphone für Windows, das den Faxbetrieb erlaubt. Venta Fax ist Shareware. Es hat im Beispiel die Nummer 1099.
Das alte Minoltafax 160 ist über die 1077 permanent erreichbar.

Welche Vorteil haben zwei Faxgeräte? Das alte Fax dient auch als Scanner, um PDF-Dateien zu erzeugen. Dazu werden die Faxe vom alten Fax an das Software Venta Fax verschickt. Die mittelmäßige Auflösung reicht mir für die meisten Zwecke. Das alte Fax kann mir auch als Drucker für den Notfall dienen. Redundanz ist immer angenehm.

Sind Faxgeräte noch zeitgemäß? Nein.

Kann man ohne Faxgeräte ein erfülltes Leben führen? Ja.

Auf einem Raspberry Pi lässt sich ein kompletter Telefonserver betreiben, der seinen Teilnehmern über Landesgrenzen hinweg kostenloses Telefonieren von unterwegs oder daheim ermöglicht.
Asterisk-Telefonserver auf einem Raspberry Pi – Installation, Konfiguration, Programmierung, SIP, IAX2, AGI-Skripte, Sicherheit und Tipps zum praktischen Betrieb – 2.11.2022: Diese Seite richtet sich an jene, welche einen Asterisk-Telefon-Server auf einem Raspberry Pi betreiben möchten und später ein kleines Netzwerk aus Asterisk-Servern planen, um ein eigenständiges Telefonnetz aufzubauen. Los geht es mit der Installation von Raspbian und Asterisk auf einem Raspberry Pi und dann nach Lust und Laune immer tiefer in die Programmierung von Asterisk. Die Themen werden laufend erweitert.

Selbstverständlich muss es nicht unbedingt ein Raspberry Pi sein. Andere Linux-Rechner gehen auch. – weiter