Nastavení faxu (příjem)
Ideálně bych chtěl zprovoznit jak příjem, tak odesílání pomocí vestavěného faxu v Asterisku, ale odesílání zatím vyvolává mnoho organizačních otázek (jak uvádět číslo, konvertovat formáty atd.). Zde se zaměřím na nastavení příjmu faxů.
Společnost Digium vyvinula a prodává softwarový fax pro Asterisk. Lze jej stáhnout a vyzkoušet v bezplatném režimu (s omezením na jednu linku) nebo dokoupit linky za 40 dolarů, což je velmi nízká cena (ve srovnání s běžnými faxovými přístroji).
Zkusme nastavit fax do režimu, kdy přijatý fax automaticky odešle na vámi vybranou e-mailovou adresu.
Instalace faxu Digium
Nejprve stáhneme samotný program. Využil jsem příkaz yum:
Dále zakoupíme licenci nebo získáme bezplatnou pro jedno připojení, spustíme utilitu /usr/sbin/register a zaregistrujeme náš fax.
Vytvoříme soubor /etc/asterisk/res_fax.conf (vzal jsem všechny parametry z původního příkladu):
Restartujte Asterisk a zkontrolujte, zda se modul faxu načetl.
Načtení bez restartu lze provést příkazem module load res_fax_digium
Nastavení dialplanu
V předchozím článku jsem popsal „zárodek“ kontextu pro fax. Nyní je čas jej dokončit.
Část souboru jsem převzal z dokumentace k faxu, zbytek jsem upravil sám. Upozorňuji vás, že Asterisk musí mít práva pro zápis do složky, kterou určíte pro příjem faxů.
; získáme název souboru ve tvaru fax-[číslo faxu].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)
; přijmeme fax do souboru
exten => fax,n,ReceiveFax(${FAXFILE})
exten => fax,n,Hangup()
; když faxista položil sluchátko, zabýváme se analýzou toho,
; co přijal
exten => h,1,NoOp(fax hangup)
; získáme stav příjmu
exten => h,n,GotoIF($["${FAXOPT(status)}" != "SUCCESS" ]?finish)
; stav přijetí - úspěšný.
; nyní je třeba předat toto jméno souboru skriptu s popisem akce
; skript přijímá následující parametry:
; -f=jmeno_souboru -m=akce -p=parameter
; -m=del - smazat soubor
; -m=mail -p="adresa" - odeslat e-mailem
; -m=print -p="jméno_tiskárny" - vytisknout
; na prvním kroku provedeme všechny tři, poté budeme vybírat
; tiskneme
exten => h,n,NoOp(${SHELL(php /var/lib/asterisk/rittal/fax_work.php -f ${FAXOPT(filename)} -m print -p printer1)})
; odesíláme
exten => h,n,NoOp(${SHELL(php /var/lib/asterisk/rittal/fax_work.php -f ${FAXOPT(filename)} -m mail -p user@rittal.ru)})
; mažeme
exten => h,n,NoOp(${SHELL(php /var/lib/asterisk/rittal/fax_work.php -f ${FAXOPT(filename)} -m del)})
; dokončujeme
exten => h,n(finish),NoOp(finish fax hangup)
vytvoříme soubor /var/lib/asterisk/rittal/fax_work.php
// kontrolujeme, zda je zadán parametr mode
if(!isset($args['m'])) die("use -m to give mode name\n");
switch ($args['m'])
{
case 'del':
// smazání souboru
unlink($args['f']);
break;
case 'mail':
// odeslání e-mailu
if( (!isset($args['p'])) || ($args['p']=='')) die("use -p to give dest mail\n");
$to=$args['p']; // komu
$subject="Fax received ".date("d.m.Y H:i:s"); // předmět
$random_hash = md5(date('r', time()));
// Hlavičky
$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':
// tisk souboru na tiskárně
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");
}
?>
