Anleitung: Hylafax mit Asterisk

Asterisk

Da Asterisk selber keine ausreichende native Unterstützung von Fax mitbringt, wird der Faxserver Hylafax oft über virtuelle Modems an Asterisk angebunden. Die Kommunikation zwischen den beiden wird durch das virtuelle Modem IAXmodem hergestellt, das sich als IAX-Endgerät an Asterisk anmeldet. Endsprechend sind die folgenden Einträge je Modem in der /etc/asterisk/iax.conf vorzunehmen.

[general]
  bindport=4569
  bindaddr=127.0.0.1
  iaxcompat=yes
  minregexpire = 40
  maxregexpire = 3600
  disallow=all
  allow=alaw
  autokill=yes
  
[iaxmodem0]
  type=friend
  secret=Passwort
  port=4570
  host=dynamic
  context=fax-out
  requirecalltoken=no
  …

Da jedes Modem nur jeweils ein Fax zur Zeit abarbeiten kann, müssen für mehrere simultane Faxe eine entsprechende Anzahl an virtuellen Modems (mit unterschiedlichen Ports) installiert werden. In der /etc/asterisk/extensions.conf werden die Anrufe an die Modems mit den jeweiligen Rufnummern weitergeleitet, um davon abhängig die Faxe zu weiterzuleiten.

[fax-in]
  exten=>_X.,1,NoOp(Fax Kontext entered)
  exten=>_X.,n,Dial(IAX2/iaxmodem0/${EXTEN},15,r)
  exten=>_X.,n,Dial(IAX2/iaxmodem1/${EXTEN},15,r)
  exten=>_X.,n,Congestion()
  exten=>_X.,n,Hangup()

[fax-out]
  exten => _X.,1,Set(CALLERID(num)=XXXXXX)
  exten => _X.,n,SetTransferCapability(3K1AUDIO)
  exten => _X.,n,Dial(WOOMERA/g1/${EXTEN})

IAXmodem

Die entsprechenden Modems werden durch entsprechende Files in /etc/iaxmodem/ konfiguriert. Das File für das erste Modem sollte ttyIAX0 heißen und folgendes beinhalten:

device          /dev/ttyIAX0
owner           uucp:uucp
mode            660
port            4570
refresh         50
server          127.0.0.1
peername        iaxmodem0
secret          Passwort
codec           alaw

Die angegebenen Daten (insb. peername, secret und port) müssen mit denen aus der iax.conf übereinstimmen. Damit iaxmodem (und HylaFAX) ordentlich beim Booten gestartet wird, sollte die /etc/inittab um ein paar Zeilen ergänzt werden.

ia0:23:respawn:/usr/bin/iaxmodem ttyIAX0
ia1:23:respawn:/usr/bin/iaxmodem ttyIAX1
…
hy0:23:respawn:/usr/sbin/faxgetty ttyIAX0
hy1:23:respawn:/usr/sbin/faxgetty ttyIAX1
…
/etc/init.d/hylafax restart

HylaFAX

HylaFAX kann nun die — von iaxmodem bereitgestellten — (virtuellen) seriellen Modems mit dem Namen ttyIAX0 bzw. ttyIAX1 ansprechen.
Empfangene Faxe werden automatisch per E-Mail verschickt, sofern die Variable SENDTO in der Datei /var/spool/hylafax/etc/FaxDispatch entsprechend gesetzt wird. Für eine individuelle Zustellung kann die Variable $CALLID4 verwendet werden, welche die an iaxmodem übermittelte Rufnummer beinhaltet. Damit lässt sich bspw. die zu einer Rufnummer gehörende E-Mail aus einem Text-File emails.txt herauslesen:

LANG=de_DE
DEST_EMAIL=$(/bin/grep $CALLID4 /etc/hylafax/emails.txt | /bin/sed -e 's/^.* \(.*\)$/\1/g')
if [ $DEST_EMAIL == "NIL" ];
then
  SENDTO=defaultFax@IGNORE-THIS.voiscout.de
  FILETYPE=pdf
else
  SENDTO=$DEST_EMAIL
  FILETYPE=pdf
fi

Das File emails.txt beinhaltet die Rufnummern und E-Mails der Personen

82242457 ifax@IGNORE-THIS.voiscout.de
85105679 ifax@IGNORE-THIS.voiscout.com

ISDN-Karte

Wird Asterisk an einem Anlagenanschluss mit unterschiedlich langen Rufnummern betrieben, so werden möglicherweise analog anwählende Faxe nicht empfangen, weil die vollständige Rufnummer nicht erkannt wird. Dieses Problem kann (bei Sangoma-Karten) gelöst werden, indem man (an geeigneter Stelle) in der /etc/wanpipe/smg_bri.conf die Nachwahl von Ziffern aktiviert:
;num_digits=8
in_calls_behaviour=TRANSPARENT_OVERLAP_RCV
in_calls_behaviour=VOICE_ALERT_RQ
In der /etc/asterisk/extensions.conf sollte man dann bei zu kurzen Rufnummern einfach auf die Nachwahl warten. Dies kann beispielsweise wie folgt aussehen:
exten => _XXXXXZ,1,NoOp(Es fehlen 2 Stellen)
exten => _XXXXXZ,n,Wait(25)
exten => _XXXXXZX,1,NoOp(Es fehlt 1 Stelle)
exten => _XXXXXZX,n,Wait(25)
exten => _XXXXXZXX,1,NoOp(Rufnummer komplett)

Sofern die Zuordnung als Fax über die angewählte Nummer erfolgt, sollte die Fax-Erkennung auf der ISDN-Karte ausgeschaltet sein. Diese bewirkt nämlich lediglich, dass bei einem eingehenden Fax zu der Extension fax gesprungen wird, welches aber aufgrund der seperaten Rufnummer unerwünscht ist.