Crmgo Blog

Nastavení faxu

Nastavení faxu

Nastavení faxu (příjem) Ideálně bych chtěl nastavit jak příjem, tak odesílání přes vestavěný fax v Asterisku, ale odesílání zatím vyvolává mnoho organizačních otázek (jak zadat číslo, konvertovat formáty atd.). Zde se podívám na nastavení příjmu faxů. Samotná společnost Digium…

Nastavení faxu

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:

yum install asterisk18-res_fax_digium
protože jsem Asterisk kompiloval ručně, stáhl jsem modul z oficiálního webu a použil původní návod:
Poznámky:
V verzi 1.8 je modul res_fax již součástí, instalujeme pouze res_fax_digium metodou kopírování do složky s moduly.

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

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

Restartujte Asterisk a zkontrolujte, zda se modul faxu načetl.

Načtení bez restartu lze provést příkazem 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

 

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ů.

777 - interní číslo faxu
....
; from-fax exten => 777,1,GoTo(fromfax,fax,1)
...
fromfax] ; kontext softwarového faxu. exten => fax,1,NoOp(group_rittal_softfax from ${CALLERID(NUM)})

; 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

<?php date_default_timezone_set('Europe/Moscow'); $args=getopt("f:m:p:");// kontrolujeme, zda je zadán parametr "file" a soubor existuje 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");

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

}
?>

článek převzat

Poznámka: příspěvek mohl vzniknout s pomocí AI a lidskou redakcí. Odpovědný: Dmytro Lomaka, Kaltenkirchen.