Crmgo Blog

Podešavanje faksa

Podešavanje faksa

Podešavanje faksa (primanje) U idealnom slučaju, želeo bih da podesim i primanje i slanje putem ugrađenog Asterisk faksa, ali slanje trenutno izaziva mnogo organizacionih pitanja (kako navesti broj, konvertovati formate itd.). Ovde ću razmotriti podešavanje primanja faksova. Sama kompanija Digium…

Podešavanje faksa

Podešavanje faksa (primanje)

U idealnom slučaju, želeo bih da omogućim i primanje i slanje putem ugrađenog Asterisk faksa, ali slanje trenutno izaziva mnogo organizacionih pitanja (kako navesti broj, konvertovati formate itd.). Ovde ću razmotriti podešavanje za primanje faksova.

Kompanija Digium je razvila i prodaje softverski faks za Asterisk. Može se preuzeti i probati u besplatnom režimu (sa ograničenjem na jednu liniju) ili kupiti dodatne linije po 40 dolara, što je veoma povoljno (u poređenju sa običnim faksima).

Pokušajmo da podesimo faks u režim u kojem se primljeni faks automatski šalje na našu izabranu email adresu.

Instalacija Digium faksa

Prvo preuzimamo sam program. Koristio sam yum:

yum install asterisk18-res_fax_digium
pošto sam Asterisk ručno kompajlirao, modul sam preuzeo sa zvaničnog sajta i koristio originalna uputstva:
Napomene:
U verziji 1.8, modul res_fax je već instaliran, instaliramo samo res_fax_digium kopiranjem u fasciklu sa modulima.

Zatim kupujemo licencu ili dobijamo besplatnu za jedno povezivanje, pokrećemo alatku /usr/sbin/register i registrujemo naš faks.

Kreiramo fajl /etc/asterisk/res_fax.conf (uzeo sam sve parametre iz početnog primera):

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

Restartujemo Asterisk i proveravamo da li se modul za faks učitao.

Učitavanje bez restarta može se izvršiti komandom module load res_fax_digium

asterisk*CLI> module show like res_fax Module                         Description                              Use Count res_fax.so                     Generic FAX Applications                 1 res_fax_digium.so              Digium G.711 and T.38 FAX Technologies ( 0

 

Podešavanje dial plana

U prethodnom članku sam opisao „klicu“ konteksta za faks. Vreme je da ga završimo.

Deo fajla sam uzeo iz dokumentacije za faks, a deo sam dopunio sam. Skrećem vašu pažnju da Asterisk mora imati prava za pisanje u fasciklu koju dodelite za primanje faksova.

777 - interni broj faksa
....
; from-fax exten => 777,1,GoTo(fromfax,fax,1)
...
fromfax] ; kontekst softverskog faksa. exten => fax,1,NoOp(group_rittal_softfax from ${CALLERID(NUM)})

; dobićemo ime fajla u formatu fax-[broj faksa].tif
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)

; primamo faks u fajl
exten => fax,n,ReceiveFax(${FAXFILE})
exten => fax,n,Hangup()

; kada faks stavi slušalicu, bavimo se analizom toga,
; šta je primljeno
exten => h,1,NoOp(fax hangup)
; dobijamo status prijema
exten => h,n,GotoIF($["${FAXOPT(status)}" != "SUCCESS" ]?finish)

; status of reception - successful.
; now it is necessary to pass this file name to the script with the action description
; the script accepts the following parameters:
; -f=file name -m=action -p=parameter
; -m=del - delete file
; -m=mail -p="address" - send via email
; -m=print -p="printer name" - print
; at the first stage we will execute all three, then we will choose

; print
exten => h,n,NoOp(${SHELL(php /var/lib/asterisk/rittal/fax_work.php -f ${FAXOPT(filename)} -m print -p printer1)})
; send
exten => h,n,NoOp(${SHELL(php /var/lib/asterisk/rittal/fax_work.php -f ${FAXOPT(filename)} -m mail -p user@rittal.ru)})
; delete
exten => h,n,NoOp(${SHELL(php /var/lib/asterisk/rittal/fax_work.php -f ${FAXOPT(filename)} -m del)})
; finish
exten => h,n(finish),NoOp(finish fax hangup)

 

create file /var/lib/asterisk/rittal/fax_work.php

<?php date_default_timezone_set('Europe/Moscow'); $args=getopt("f:m:p:");// check that the "file" parameter is set and the file exists 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");

// check that the mode parameter is set
if(!isset($args['m'])) die("use -m to give mode name\n");

switch ($args['m'])
{
case 'del':
// delete file
unlink($args['f']);
break;
case 'mail':
// send email
if( (!isset($args['p'])) || ($args['p']=='')) die("use -p to give dest mail\n");

$to=$args['p']; // to whom
$subject="Fax received ".date("d.m.Y H:i:s"); // subject
$random_hash = md5(date('r', time()));
// Headers
$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':
// print file on printer
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");

}
?>

article taken

Napomena: tekst može biti uz pomoć AI uz ljudsku proveru. Odgovoran: Dmytro Lomaka, Kaltenkirchen.