Crmgo Блог

Налаштування факсу

Налаштування факсу

Налаштування факсу (прийом) В ідеалі, я хотів би зробити і прийом, і відправлення через вбудований факс астеріск, але відправлення поки що викликає багато організаційних питань (як вказувати номер, конвертувати формати тощо). Тут я розгляну налаштування прийому факсів. Самою компанією Digium…

Налаштування факсу

Налаштування факсу (прийом)

В ідеалі, я хотів би зробити і прийом, і відправлення через вбудований факс астеріск, але відправлення поки що викликає багато організаційних питань (як вказувати номер, конвертувати формати тощо). Тут я розгляну налаштування прийому факсів.

Самою компанією Digium розроблено і продається програмний факс для астеріск. Його можна завантажити і спробувати в безкоштовному режимі (з обмеженням на одну лінію) або докупити ліній по 40 доларів, що зовсім недорого (порівняно зі звичайними факсами).

Спробуємо налаштувати факс у режим, коли прийнятий факс автоматично надсилається на вибраний нами email.

Встановлення факсу Digium

Спочатку завантажуємо саму програму. Я скористався yum-ом:

yum install asterisk18-res_fax_digium
так, як я збирав астеріск вручну, то модуль завантажував з оф сайту, користувався оригінальною інструкцією:
Замітки:
У версії 1.8 res_fax модуль вже стоїть, ставимо тільки res_fax_digium методом копіювання в папку з модулями.

Далі купуємо ліцензію або отримуємо безкоштовну на одне підключення, запускаємо утиліту /usr/sbin/register і реєструємо наш факс.

Створюємо файл /etc/asterisk/res_fax.conf (я взяв всі параметри з вихідного прикладу):

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

Перезавантажуємо астеріск і перевіряємо, що модуль факсу підвантажився

підвантажити без перезавантаження можна командою 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

 

Налаштування діалплану

У попередній статті я описав «зародок» контексту для факсу. Прийшов час доделать його.

Частину файлу я взяв з документації до факсу, частину доделал сам. Звертаю вашу увагу, що у астеріска повинні бути права на запис у папку, яку ви призначаєте для прийому факсів.

777 - внутрішній номер факсу
....
; from-fax exten => 777,1,GoTo(fromfax,fax,1)
...
fromfax] ; контекст програмного факсу. exten => fax,1,NoOp(group_rittal_softfax from ${CALLERID(NUM)})

; отримаємо ім'я файлу виду fax-[номер факсу].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)

; приймаємо факс у файл
exten => fax,n,ReceiveFax(${FAXFILE})
exten => fax,n,Hangup()

; коли факс поклав трубку, займемося аналізом того,
; чого він наполучал
exten => h,1,NoOp(fax hangup)
; отримаємо статус прийому
exten => h,n,GotoIF($["${FAXOPT(status)}" != "SUCCESS" ]?finish)

; статус прийому - успішний.
; тепер необхідно передати це ім'я файлу скрипту з описом дії
; скрипт приймає такі параметри:
; -f=ім'я файлу -m=дія -p=параметр
; -m=del - видалити файл
; -m=mail -p="адреса" - відправити по email
; -m=print -p="ім'я принтера" - роздрукувати
; на першому етапі ми виконаємо всі три, потім будемо вибирати

; друкуємо
exten => h,n,NoOp(${SHELL(php /var/lib/asterisk/rittal/fax_work.php -f ${FAXOPT(filename)} -m print -p printer1)})
; відправляємо
exten => h,n,NoOp(${SHELL(php /var/lib/asterisk/rittal/fax_work.php -f ${FAXOPT(filename)} -m mail -p user@rittal.ru)})
; видаляємо
exten => h,n,NoOp(${SHELL(php /var/lib/asterisk/rittal/fax_work.php -f ${FAXOPT(filename)} -m del)})
; фінішуємо
exten => h,n(finish),NoOp(finish fax hangup)

 

створюємо файл /var/lib/asterisk/rittal/fax_work.php

<?php date_default_timezone_set('Europe/Moscow'); $args=getopt("f:m:p:");// перевіряємо, що заданий параметр "файл" і файл існує 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");

// перевіряємо, що заданий параметр mode
if(!isset($args['m'])) die("use -m to give mode name\n");

switch ($args['m'])
{
case 'del':
// видалення файлу
unlink($args['f']);
break;
case 'mail':
// відправка емейла
if( (!isset($args['p'])) || ($args['p']=='')) die("use -p to give dest mail\n");

$to=$args['p']; // кому
$subject="Fax received ".date("d.m.Y H:i:s"); // тема
$random_hash = md5(date('r', time()));
// Заголовки
$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':
// друк файлу на принтері
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");

}
?>

стаття взята

Примітка: матеріал міг бути створений за підтримки ШІ з подальшою людською редакцією. Відповідальний за зміст: Dmytro Lomaka, Kaltenkirchen.