Crmgo Blog

Fax-Einrichtung

Fax-Einrichtung

Einrichtung des Faxempfangs Im Idealfall würde ich sowohl den Empfang als auch den Versand über den integrierten Asterisk-Faxserver durchführen, aber der Versand wirft derzeit noch viele organisatorische Fragen auf (z. B. wie die Nummer angegeben, Formate konvertiert usw. werden sollen). In diesem Beitrag werde ich die Einrichtung des Faxempfangs erläutern. Das Unternehmen Digium…

Fax-Einrichtung

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:

yum install asterisk18-res_fax_digium
Da ich Asterisk manuell kompiliert habe, habe ich das Modul von der offiziellen Website heruntergeladen und die Originalanleitung befolgt:
Hinweise:
In Version 1.8 ist das Modul res_fax bereits enthalten; wir installieren nur res_fax_digium durch Kopieren in das Modulverzeichnis.

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):

[general] maxrate=14400 minrate=2400 statusevents=no modems=v17,v27,v29 ecm=yes

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.

asterisk*CLI> module show like res_fax Module                         Beschreibung                              Anzahl der Verwendungen res_fax.so                     Generische FAX-Anwendungen                 1 res_fax_digium.so              Digium G.711 und T.38 FAX-Technologien ( 0

 

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.

777 - interne Faxnummer
....
; from-fax exten => 777,1,GoTo(fromfax,fax,1)
...
[fromfax] ; Kontext für den Software-Faxserver. exten => fax,1,NoOp(group_rittal_softfax from ${CALLERID(NUM)})

; 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

<?php date_default_timezone_set('Europe/Moscow'); $args=getopt("f:m:p:");// Überprüfen, ob der Parameter "Datei" angegeben ist und die Datei existiert if(!isset($args['f'])) die("use -f to give file name\n"); if(!file_exists($args['f'])) die("file '".$args['f']."' is not exists\n");

// Ü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");

}
?>

Artikel entnommen

Hinweis: Dieser Beitrag kann KI-unterstützt erstellt und anschließend redaktionell geprüft worden sein. Verantwortlich: Dmytro Lomaka, Kaltenkirchen.