Konfiguration des Faxempfangs
Idealerweise würde ich sowohl den Empfang als auch den Versand über den integrierten Asterisk-Faxserver abwickeln, doch der Versand wirft derzeit noch viele organisatorische Fragen auf (z. B. wie die Nummerierung erfolgt, Konvertierung von Formaten usw.). In diesem Beitrag werde ich die Konfiguration des Faxempfangs behandeln.
Das Unternehmen Digium hat einen Software-Faxserver für Asterisk entwickelt und vertreibt. Er kann kostenlos heruntergeladen und getestet werden (mit der Einschränkung auf eine Leitung) oder es können zusätzliche Leitungen für jeweils 40 US-Dollar erworben werden, was sehr preiswert ist (im Vergleich zu herkömmlichen Faxgeräten).
Wir versuchen nun, den Faxserver so zu konfigurieren, dass empfangene Faxe automatisch an eine von uns gewählte E-Mail-Adresse gesendet werden.
Installation des Digium-Faxservers
Zuerst laden wir das Programm herunter. Ich habe yum verwendet:
Danach kaufen wir eine Lizenz oder erhalten eine kostenlose für eine Verbindung, starten das Dienstprogramm /usr/sbin/register und registrieren unseren Faxserver.
Erstellen Sie die Datei /etc/asterisk/res_fax.conf (ich habe alle Parameter aus dem Beispiel übernommen):
Asterisk neu starten und prüfen, ob das Faxmodul geladen wurde.
Ohne Neustart kann das Modul mit dem Befehl module load res_fax_digium geladen werden.
Konfiguration des Dialplans
In einem früheren Artikel habe ich den „Keim“ eines Kontexts für Fax beschrieben. Jetzt ist es an der Zeit, ihn fertigzustellen.
Einen Teil der Datei habe ich aus der Faxdokumentation übernommen, den Rest habe ich selbst erstellt. Bitte beachten Sie, dass Asterisk Schreibrechte für den Ordner haben muss, den Sie für den Faxempfang festlegen.
; Dateiname im Format fax-[Faxnummer].tif erstellen
exten => fax,n,Set(GLOBAL(FAXCOUNT)=${IF($["${GLOBAL(FAXCOUNT)}"=""]?0:${GLOBAL(FAXCOUNT)})})
exten => fax,n,Set(GLOBAL(FAXCOUNT)=$[${GLOBAL(FAXCOUNT)} + 1])
exten => fax,n,Set(FAXCOUNT=${GLOBAL(FAXCOUNT)})
exten => fax,n,Set(FAXFILE=/tmp/faxes/fax-${FAXCOUNT}.tif)
; Fax in Datei empfangen
exten => fax,n,ReceiveFax(${FAXFILE})
exten => fax,n,Hangup()
; Nach dem Auflegen des Faxes die Analyse der empfangenen Daten durchführen
; Status des Empfangs prüfen
exten => h,1,NoOp(fax hangup)
exten => h,n,GotoIF($["${FAXOPT(status)}" != "SUCCESS" ]?finish)
; Status des Empfangs - erfolgreich.
; Nun muss dieser Dateiname an das Skript mit der Aktionsbeschreibung übergeben werden
; Das Skript akzeptiert folgende Parameter:
; -f=Dateiname -m=Aktion -p=Parameter
; -m=del - Datei löschen
; -m=mail -p="Adresse" - per E-Mail senden
; -m=print -p="Druckername" - drucken
; Im ersten Schritt führen wir alle drei Aktionen aus, später werden wir auswählen
; Drucken
exten => h,n,NoOp(${SHELL(php /var/lib/asterisk/rittal/fax_work.php -f ${FAXOPT(filename)} -m print -p printer1)})
; Senden
exten => h,n,NoOp(${SHELL(php /var/lib/asterisk/rittal/fax_work.php -f ${FAXOPT(filename)} -m mail -p user@rittal.ru)})
; Löschen
exten => h,n,NoOp(${SHELL(php /var/lib/asterisk/rittal/fax_work.php -f ${FAXOPT(filename)} -m del)})
; Beenden
exten => h,n(finish),NoOp(finish fax hangup)
Erstellen Sie die Datei /var/lib/asterisk/rittal/fax_work.php
// Überprüfen, ob der Parameter mode angegeben ist
if(!isset($args['m'])) die("use -m to give mode name\n");
switch ($args['m'])
{
case 'del':
// Datei löschen
unlink($args['f']);
break;
case 'mail':
// E-Mail senden
if( (!isset($args['p'])) || ($args['p']=='')) die("use -p to give dest mail\n");
$to=$args['p']; // An wen
$subject="Fax received ".date("d.m.Y H:i:s"); // Betreff
$random_hash = md5(date('r', time()));
// Header
$headers = "From: fax@rittal.ru\r\nReply-To: postmaster@rittal.ru";
$headers .= "\r\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\"";
$attachment = chunk_split(base64_encode(file_get_contents($args['f'])));
$body="";
$body .="\r\n".'--PHP-mixed-'.$random_hash;
$body .="\r\n".'Content-Type: multipart/alternative; boundary="PHP-alt-'.$random_hash.'"';
$body .="\r\n";
$body .="\r\n".'--PHP-alt-'.$random_hash;
$body .="\r\n".'Content-Type: text/plain; charset="iso-8859-1"';
$body .="\r\n".'Content-Transfer-Encoding: 7bit';
$body .="\r\n";
$body .="\r\n".'Please, see fax message in attachment';
$body .="\r\n";
$body .="\r\n".'--PHP-alt-'.$random_hash.'--';
$body .="\r\n".'--PHP-mixed-'.$random_hash;
$body .="\r\n".'Content-Type: application/tiff; name="fax.tiff"';
$body .="\r\n".'Content-Transfer-Encoding: base64';
$body .="\r\n".'Content-Disposition: attachment';
$body .="\r\n";
$body .="\r\n".$attachment;
$body .="\r\n".'--PHP-mixed-'.$random_hash.'--';
$body .="\r\n";
mail( $to, $subject, $body, $headers );
break;
case 'print':
// Datei auf dem Drucker drucken
if( (!isset($args['p'])) || ($args['p']=='')) die("use -p to give printer name\n");
exec('tiff2ps "'.$args['f'].'" | lpr -P'.$args['p']);
break;
default:
die("wrong mode!\n");
}
?>
