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:
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):
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
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.
; 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
// 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");
}
?>
