# ps -ax | grep iaxmodem
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
1721 pts/0 Ss+ 0:00 /usr/bin/iaxmodem ttyIAX0
1731 pts/1 Ss+ 0:00 /usr/bin/iaxmodem ttyIAX1
1866 pts/2 S+ 0:00 grep iaxmodem

 

# ps -ax | grep faxgetty
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
1859 ? Ss 0:00 /usr/sbin/faxgetty ttyIAX0
1860 ? Ss 0:00 /usr/sbin/faxgetty ttyIAX1
1862 pts/2 S+ 0:00 grep faxgetty

После того как Skype стал частью Microsoft, остался только один надёжный способ общения
— ФАКС
Для работы с факсами (fax to email) через Asterisk я использую связку HylaFAX – IAXmodem.
Asterisk и FreePBX уже установленны, осталось установить только IAXmodem и HylaFAX

 

yum install libtiff-devel
yum groupinstall "Development tools"

 

Качаем IAXmodem и HylaFAX

 

cd ./src wget http://sourceforge.net/projects/iaxmodem/files/iaxmodem/iaxmodem-1.2.0/iaxmodem-1.2.0.tar.gz/download
wget ftp://ftp.hylafax.org/binary/linux/redhat/6.0.6/hylafax-server-6.0.6-1rhel6.x86_64.rpm
wget ftp://ftp.hylafax.org/binary/linux/redhat/6.0.6/hylafax-client-6.0.6-1rhel6.x86_64.rpm rpm -ivh hylafax-server-6.0.6-1rhel6.x86_64.rpm hylafax-client-6.0.6-1rhel6.x86_64.rpm
tar zxvf iaxmodem-1.2.0.tar.gz

 

Устанавливаем IAXmodem

cd iaxmodem-1.2.0
# cd iaxmodem-1.2.0
# cd lib/libiax2
# ./configure --prefix=/usr
# make
# make install
# cd ../../lib/spandsp
# ./configure  --prefix=/usr
# make
# make install
# cd ../../
# ./build
# cp iaxmodem /usr/bin/
# cp /usr/lib/libiax.*  /usr/lib/
mkdir /etc/iaxmodem
nano /etc/iaxmodem/ttyIAX0
device /dev/ttyIAX0
owner uucp:uucp
mode 660
port 4570
refresh 300
server 172.0.0.1
peername 2400
secret gfhjkm
cidname FAX
cidnumber 2400
codec alaw
mkdir/var/log/iaxmodem
touch /var/log/iaxmodem/iaxmodem0
touch /var/log/iaxmodem/iaxmodem1
создаем два файла
 первый
cat /etc/init/start-iaxmodem.conf
# This service start /dev/ttyIAX

start on stopped rc RUNLEVEL=[2345]
stop on starting runlevel [016]

respawn
exec /usr/local/sbin/iaxmodem ttyIAX0

второй
cat /etc/init/start-faxgetty.conf
# This service start /dev/ttyIAX

start on stopped rc RUNLEVEL=[2345]
stop on starting runlevel [016]

respawn
exec /usr/sbin/faxgetty /dev/ttyIAX0

переинициализируемся в init 3 и проверяем
ps ax | grep IAX
1641 pts/2    Ss+    0:03 /usr/local/sbin/iaxmodem ttyIAX0
5278 ?        Ss     0:00 /usr/sbin/faxgetty /dev/ttyIAX0
mcedit /etc/init/start-iaxmodems.conf
# This service starts the configured number of gettys.
start on stopped rc RUNLEVEL=[2345]

task
script
    for ttyIAX in /etc/iaxmodem/* ; do
        start iaxmodem TTY=`basename $ttyIAX`
    done
end script
mcedit /etc/init/iaxmodems.conf
# This service maintains an iaxmodem on the sepcified device.
stop on runlevel [016]
respawn
instance $TTY
exec /usr/sbin/iaxmodem $TTY
mcedit /etc/init/start-faxgettys.conf
# This service starts the configured number of faxgettys.
start on started iaxmodem
# this will run once per triggering iaxmodem instance
instance $INSTANCE

task
script
    # give it time to at least create the device
    /bin/sleep 1s
    start faxgetty TTY=$INSTANCE
end script
mcedit /etc/init/faxgetty.conf

 

# This service maintains a faxgetty on the sepcified device.
# only stop when the stopping iaxmodem is this TTY
stop on stopping iaxmodem INSTANCE=$TTY

respawn
instance $TTY
exec /usr/sbin/faxgetty $TTY

Проверяем настроенные устройства

# ps ax | grep iaxmodem
1721 pts/0 Ss+ 0:00 /usr/bin/iaxmodem ttyIAX0
1731 pts/1 Ss+ 0:00 /usr/bin/iaxmodem ttyIAX1
1866 pts/2 S+ 0:00 grep iaxmodem

# ps ax | grep faxgetty

1859 ? Ss 0:00 /usr/sbin/faxgetty ttyIAX0
1860 ? Ss 0:00 /usr/sbin/faxgetty ttyIAX1
1862 pts/2 S+ 0:00 grep faxgetty

Создаем IAX пир 2400 через FreePBX (/etc/asterisk/iax_additional.conf)

[2400]
deny=0.0.0.0/0.0.0.0
secret=gfhjkm
transfer=yes
context=from-internal
host=dynamic
type=friend
port=4570
qualify=yes
dial=IAX2/2400
mailbox=2400@device
permit=127.0.0.1/24
requirecalltoken=no
callerid=iaxmodem <2400>
setvar=REALCALLERIDNUM=2400

Для проверки в консоли астериска можно посмотреть состояние пира:
asterisk-pbx*CLI> iax2 show peers

Если все нормально переходим к установки HylaFAX.

faxsetup
echo /usr/local/sbin/faxgetty -D ttyIAX >> /etc/rc.d/rc.local
nano /var/spool/hylafax/etc/FaxDispatch
FILETYPE=pdf;
SENDTO=mail@address;

Теперь нужно сгенерировать конфиги командой faxsetup, это интерактивная утилита, на все заданные вопросы отвечаем значениями по умолчанию, кроме места где будет спрашиваться устройство модема, тут нужно указать ttyIAX0. На последний стадии hylafax попробует соединится с модемом, если результат теста ОК , то можно двигаться дальше. А дальше мы настроим уведомление о получении факса и отправку факса на заданный почтовый адрес. Для этого нам нужно перейти в директорию с конфигами hylafax /etc/hylafax и создать там файл FaxDispatch. Как его наполнить детально описано тут. Не забываем выставить владельца на файл uccp:uccp. Проверить отправку факса можно командой : sendfax -n -T 2 -N -d [номер куда отсылать факс] [путь к файлу]

Для того что бы HylaFAX находил IAXmodem нужно скопировать конфиг config.ttyIAX из исходников iaxmodem в /var/spool/hylafax/etc/

cp /usr/src/iaxmodem-1.2.0/config.ttyIAX /var/spool/hylafax/etc/

Запускаем iaxmodem и faxgetty или перегружаем систему

service iaxmodem start faxgetty ttyIAX

Всё готово, можно повесить входящий маршрут во FreePBX на пир 2400 и получать факсы на почтовый@адрес.

Для отправки факсов нужно добавить факсюзера

faxadduser -p gfhjkm -u 1000 fax

в /var/spool/hylafax/etc/hosts.hfaxd
Добавляться юзер fax c паролем gfhjkm. Так же этот этот юзер может просматривать тифы факсов по ссылке на ftp в письме от HylaFAX, если в конфиге /var/spool/hylafax/etc/config.ttyIAX изменить права на файл полученного факса

RecvFileMode: 0644

И установить принтер HylaFAX http://www.hylafax.org/content/Desktop_Client_Software
fax
Если нужен ещё один модем то просто создаем ещё один файл конфигурации в /etc/iaxmodem, например ttyIAX1, отличающийся только значениями:

device          /dev/ttyIAX1
port            4571
peername        1001

и пир 1001 во FreePBX и запускаем ещё один демон faxgetty

echo /usr/local/sbin/faxgetty -D ttyIAX1 >> /etc/rc.d/rc.local

Так же нужен ещё один конфиг IAXmodem для HylaFAX

cp /usr/src/iaxmodem-1.2.0/config.ttyIAX /var/spool/hylafax/etc/config.ttyIAX1

В /var/spool/hylafax/etc/FaxDispatch можно распределить на какие адреса будут отправляться факсы с каждого модема:

FILETYPE=pdf;
case "$DEVICE" in
    ttyIAX)
        SENDTO=admin@adminunix.ru.ru
    ;;
    ttyIAX1)
        SENDTO=admin@adminunix.ru.ru
    ;;
esac

full => notice,warning,error,debug,verbose

2) зайти в консоль asterisk -r и сказать:
core set debug 4
core set verbose 4
sip set debug on

3) после это выйти из консоли и совершить тестовый звонок. После этого посмотреть лог звонка в файле /var/log/asterisk/full (у меня в центосе так).

Маленькая ремарка для начинающих админов (типа меня). Чтобы удобнее было отследить звонок в логе надо перед звонком и после него из консоли линукса сказать
#echo «@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@» >> /var/log/asterisk/full
в результате информация о звонке будет заключена между этими метками.

После того как Skype стал частью Microsoft, остался только один надёжный способ общения
— ФАКС
Для работы с факсами (fax to email) через Asterisk я использую связку HylaFAX — IAXmodem.
Asterisk и FreePBX уже установленны, осталось установить только IAXmodem и HylaFAX

yum install libtiff-devel

Качаем IAXmodem и HylaFAX

cd /usr/src
get http://downloads.sourceforge.net/project/iaxmodem/iaxmodem/iaxmodem-1.2.0/iaxmodem-1.2.0.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fiaxmodem%2Ffiles%2F&amp;ts=1326970034&amp;use_mirror=ignum
get ftp://ftp.hylafax.org/source/hylafax-6.0.5.tar.gz
tar zxvf iaxmodem-1.2.0.tar.gz
tar zxvf hylafax-6.0.5.tar.gz


Устанавливаем IAXmodem

cd iaxmodem-1.2.0
./configure
make
cp iaxmodem /usr/local/sbin/
mkdir /etc/iaxmodem
nano /etc/iaxmodem/ttyIAX
device /dev/ttyIAX
owner uucp:uucp
mode 660
port 4570
refresh 300
server 10.10.10.10
peername 1000
secret gfhjkm
cidname FAX
cidnumber 77777777777
codec alaw
mkdir /var/log/iaxmodem
cp iaxmodem.init.fedora /etc/init.d/iaxmodem
chmod +x /etc/init.d/iaxmodem
chkconfig iaxmodem on

Устанавливаем HylaFAX

cd /usr/src/hylafax-6.0.5
./configure
make
make install
faxsetup
echo /usr/local/sbin/faxgetty -D ttyIAX >> /etc/rc.d/rc.local
nano /var/spool/hylafax/etc/FaxDispatch
FILETYPE=pdf;
SENDTO=mail@address;

Создаем IAX пир 1000 через FreePBX

secret gfhjkm
port 4570
requirecalltoken No

Для того что бы HylaFAX находил IAXmodem нужно скопировать конфиг config.ttyIAX из исходников iaxmodem в /var/spool/hylafax/etc/

cp /usr/src/iaxmodem-1.2.0/config.ttyIAX /var/spool/hylafax/etc/

Запускаем iaxmodem и faxgetty или перегружаем систему

service iaxmodem start
faxgetty ttyIAX

Всё готово, можно повесить входящий маршрут во FreePBX на пир 1000 и получать факсы на почтовый@адрес.

Для отправки факсов нужно добавить факсюзера

faxadduser -p gfhjkm -u 1000 fax

в /var/spool/hylafax/etc/hosts.hfaxd
Добавляться юзер fax c паролем gfhjkm. Так же этот этот юзер может просматривать тифы факсов по ссылке на ftp в письме от HylaFAX, если в конфиге /var/spool/hylafax/etc/config.ttyIAX изменить права на файл полученного факса

RecvFileMode: 0644

И установить принтер HylaFAX http://www.hylafax.org/content/Desktop_Client_Software
fax
Если нужен ещё один модем то просто создаем ещё один файл конфигурации в /etc/iaxmodem, например ttyIAX1, отличающийся отлько значениями:

device          /dev/ttyIAX1
port            4571
peername        1001

и пир 1001 во FreePBX и запускаем ещё один демон faxgetty

echo /usr/local/sbin/faxgetty -D ttyIAX1 >> /etc/rc.d/rc.local

Так же нужен ещё один конфиг IAXmodem для HylaFAX

cp /usr/src/iaxmodem-1.2.0/config.ttyIAX /var/spool/hylafax/etc/config.ttyIAX1

В /var/spool/hylafax/etc/FaxDispatch можно распределить на какие адреса будут отправляться факсы с каждого модема:

FILETYPE=pdf;
case "$DEVICE" in
    ttyIAX)
        SENDTO=kad@kadmin.ru
    ;;
    ttyIAX1)
        SENDTO=min@kadmin.ru
    ;;
esac

fax
Рано или поздно возникает задача организовать факс-сервер в компании. Столкнулся с подобной задачей около года назад.
Что мы имеем

  • Сервер с asterisk;
  • железо для факс-сервера: P4 1.7, mem 256M, hd 40GB. Установлена ОС Centos.

Приступаем

Так как есть сервер с asterisk, то разумно воспользоваться протоколом iax2, поэтому будем делать связку: iaxmodem + hylafax + avantfax
Для начала добавим несколько репозиториев:
— atomic.repo-

wget -q -O - http://www.atomicorp.com/installers/atomic | sh

на всякий случай добавляем сюда исключение для php 5.3 в секцию [atomic]

vim /etc/yum.repos.d/atomic.repo
exclude = php*5.3*

— RPMForge.repo-

wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.i386.rpm
rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
rpm -K rpmforge-release-0.5.2-2.el5.rf.i386.rpm
rpm -i rpmforge-release-0.5.2-2.el5.rf.i386.rpm

Установим следующие пакеты:

yum -y install gcc gcc-c++ libtiff libtiff-devel hylafax mysql-server httpd mysql-devel php-cli phpmyadmin php

Cкачиваем avantfax и iaxmodem:

wget http://it-technics.narod.ru/fax/avantfax-3.3.3.tgz
wget http://it-technics.narod.ru/fax/iaxmodem-1.2.0.tar.gz

Установка iaxmodem
Распаковываем архив iaxmodem-1.2.tar.gz, переходим в директорию и выполняем команды для компоновки и компиляции:

tar xzvf iaxmodem-1.2.0.tar.gz
cd iaxmodem-1.2.0/
./configure
make

Копируем, полученный в результате компиляции файл iaxmodem:

cp iaxmodem /usr/bin/

Создаем папку iaxmodem:

mkdir /etc/iaxmodem

Создаем файл ttyIAX0:

touch /etc/iaxmodem/ttyIAX0

Редактируем конфигурационный файл ttyIAX0:

vim /etc/iaxmodem/ttyIAX0

Добавляем туда следующее содержимое:

device /dev/ttyIAX0
owner uucp:uucp
mode 660
port 4570
refresh 50
server 192.168.0.20
<< — наш сервер с asterisk
peername 5020
secret 5020
prec alaw

Следующим шагом будет создание iaxpeer на сервере asterisk.
Подключаемся на сервер asterisk, редактируем конфигурационный файл iax.conf:

vim /etc/asterisk/iax.conf

и добавляем нашего пира, у меня получился следующий конфиг:

[general]
bindport = 4569
bindaddr =0.0.0.0
calltokenoptional = 192.168.0.28/255.255.255.255
maxcallnumbers = 16382
maxregexpire=10000
[5020]
port=4570
type=friend
username=5020
context=fax2out
secret=5020
host=dynamic
qualify=yes
disallow=all
allow=alaw
trunk=no
requirecalltoken=no

Необходимо применить конфигурацию iax2, подключаемся к cli asterisk:

asterisk -r
*CLI> iax2 reload
== Parsing '/etc/asterisk/iax.conf': == Found
== Parsing '/etc/asterisk/users.conf': == Found

выходим из cli и подключаемся обратно на наш факс-сервер.

Редактируем файл inittab для загрузки нашего модема:

vim /etc/inittab

вносим следующее в конец файла:

iax1:2345:respawn:/usr/bin/iaxmodem ttyIAX0 > /dev/null
vmo1:2345:respawn:/usr/sbin/faxgetty ttyIAX0

так же создадим папку для логов iaxmodem:

mkdir /var/log/iaxmodem
touch /var/log/iaxmodem/iaxmodem

Hylafax

Проверим устновился ли hylafax:

yum list | grep hylafax

Добавим hylafax в загрузку при старте системы:

chkconfig hylafax on

Сконфигурируем и запуcтим hylafax:

faxsetup

Отвечаем на все вопросы, но когда спросит добавить ли модем говорим, что нет.

Запускаем наш модем:

/usr/bin/iaxmodem /dev/ttyIAX0 &
/usr/sbin/faxgetty /dev/ttyIAX0 &

После запуска можно посмотреть регистрацию пира на asterisk, есл ивсе нормально сконфигурированно регистрация будет.

Добавляем наш модем:

faxaddmodem

при этом нас попросят указать устройство, указываем ttyIAX0, отвечаем на все вопросы и модем будет успешно добавлен.

MySQL

При установке Avantfax, будет создана бд avantfax в mysql со следующими таблицами:
±-------------------+
| Tables_in_avantfax |
±-------------------+
| AddressBook |
| AddressBookEmail |
| AddressBookFAX |
| BarpreRoute |
| CoverPages |
| DIDRoute |
| DistroList |
| DynConf |
| FaxArchive |
| FaxCategory |
| Modems |
| SysLog |
| UserAccount |
| UserPasswords |
±-------------------+

То есть пользователи, модемы, пароли etc. будут хранится в бд. Нам mysql может понадобиться для сохранения конфигурации(к примеру для переноса на другой сервер), если встроенной утилиты avantfax будет недостаточно, либо для бэкапа. Для бэкапа из командной строки, необходимо будет выполнить команду:

mysqldump -uroot -ppass --databases avantfax > avant_backup.sql

Так же для переноса или бэкапа необходимо скопировать папку /var/spool/hylafax.

Запускаем службу mysqld:

/etc/init.d/mysqld start

выполняем команду mysql_secure_installation для первоначального конфигурирования и установки безопасности (устанавливаем пароль для root, запрещаем root подключаться удаленно etc):

mysql_secure_installation

и добавляем mysql в загрузку при старте системы:

chkconfig mysqld on

Если вы привыкли больше рабоать в графическом интерфейсе с бд, то целесообразно воспользоваться phpmyadmin, для этого отредактируйте файл config.inc.php:

vim /usr/share/phpmyadmin/config.inc.php

меняем параметр аутентификации:

$cfg['Servers'][$i]['auth_type'] = 'cookie';

на

$cfg['Servers'][$i]['auth_type'] = 'http';

Редактируем конфигурационный файл phpmyadmin для apache:

vim /etc/httpd/conf.d/phpmyadmin.conf

и вносим в allow ip адрес с которого будем подключаться:

<Directory "/usr/share/phpmyadmin">
Order Deny,Allow
Deny from all
Allow from 127.0.0.1 192.168.0.88
</Directory>
Alias /phpmyadmin /usr/share/phpmyadmin
Alias /phpMyAdmin /usr/share/phpmyadmin
Alias /mysqladmin /usr/share/phpmyadmin

сохраняем и выходим из конфига.
запускаем apache:

/etc/init.d/httpd start

добавляем apache в загрузку при старте системы

chkconfig httpd on

открываем браузер и набираем

http://ip_address/phpmyadmin/

вводим логин и пароль root.

Avantfax

Расспаковываем архив avantfax-3.3.3.tgz:

tar xzvf avantfax-3.3.3.tgz
cd avantfax-3.3.3

Так как у нас ос Centos будем использовать скрипт rh-install.sh.

Необходимо внести данные относительно бд в файл rh-prefs.txt:

vim rh-prefs.txt
ROOTMYSQLPWD=pass <<--- указываем пароль к бд

сохраняем и выходим.

Запускаем исполняемый файл rh-install.sh:

./rh-install.sh

Скрипт проверит наличие необходимых пакетов(поставит библиотеки и пакеты если их нет) и установит Avantfax.
После успешной установки нам скажут Installation complete и сообщат как можно подключиться:

Log into the Administrative interface at: http://ip_address/admin/
Username: admin
Password: password

Пароль при входе в web-интерфейс необходимо будет сменить!

Для того, чтобы определенная группа (отдел) могла видеть только те факсы, которые были отправлены ими и те, которые адресованны им, необходимо выполнить некоторые действия.
Необходимо создать категорию факсов.
Переходим в Меню -> Категории факсов создаем новую категорию, к примеру Бухгалтерия.
organizuem-faks-server-po-iax2
Далее заходим в Меню -> Параметры модемов и присваем ранее созданную категорию для модема, так же указываем псевдоним модема.
organizuem-faks-server-po-iax2
Создаем нового пользователя, к примеру Buhgalter.
Переходим в Меню -> Новый пользователь.
organizuem-faks-server-po-iax2
Указываем какой модем будет доступен пользователю, какую категорию факсов можно будет просматривать, так же можно будет задать язык интерфеса и контактную информацию.
Созданный нами пользователь сможет зайти по адресу

http://ip_address

Каждый пользователь сможет отправлять факсы, прикрепляя файлы следующих форматов:
PostScript (.ps), PDF (.pdf), TIFF (.tif), Text (.txt).

Итак связка настроена, для того чтобы заработали входящие факсы необходимо в диалплане(/etc/asterisk/extensions.conf) asterisk прописать правила для звонка на наш факс-сервер
если это внутренняя нумерация (допустим), то достаточно в контексте внутренних номеров прописать следующее:

exten => 5020,1,Dial(IAX2/5020,120,r)
exten => 5020,2,Hangup

Если это голосовое меню (IVR), то на определенный тональный сигнал, к примеру 0, повесить следующее:

exten => 0,1,Dial(IAX2/5020,120,r)
exten => 0,2,Hangup

Чтобы разрешить отправлять факсы с web-интерфейса, необходимо указать в конфигурационном файле /etc/asterisk/iax.conf контекст который будет использоваться для исходящих вызовов, у меня в конфиге это контекст fax2out. На контекст fax2out так же следует создать правила для маршрутов в диалплане (/etc/asterisk/extensions.conf), и включить в контекст default:

[default]

include => fax2out

[fax2out]

exten => _9ZX.,1,Dial (SIP/${EXTEN:1}@sip_prov)
exten => _9ZX.,2,Hangup

Появилась необходимость настроить прием и отправку факсов на asterisk. По техническому заданию прием и отправка факсов должны происходить с участием операторов и возможностью предварительного разговора.
В интернете нашел примеры реализации, но в них как правило:
1) была автоматическая отправка факсов на определенный номер без предварительного разговора с оператором;
2) использовались различные связки iaxmodem либо t38modem + hylafax, в которых на мой взгляд особой надобности в данном случае нет. Asterisk умеет работать с факсами через SpanDSP (должен быть собран с поддержкой SpanDSP).

В итоге все свелось к следующему:
1) любой оператор компании должен иметь функционал для приема и отправки факсов со своего рабочего места, пользуясь ПК и телефоном;
2) для приема факса необходимо перевести вызов на номер 5555. Система должна преобразовать полученный документ из tiff в pdf, выложить в общую папку FAX и продублировать на почтовый ящик секретаря.
3) при отправке факса должна быть возможность отправки любого электронного документа или документа на бумажном носителе (через сканер). Оператор вначале должен иметь возможность сообщить, кому и что за документ передает, потом так же, как и при приеме, перевести на определенный номер, соответствующий данному документу.

Asterisk установлен на сборке gentoo.

Чтобы избежать участия пользователя в переводе документа в формат tiff, было решено использовать сетевой виртуальный принтер cups-pdf.

Устанавливаем:

emerge -va cups-pdf

Чтобы выложить принтер и папку для полученных факсов в сеть используем пакет samba

emerge -va samba 

У меня он уже установлен net-fs/samba-3.6.12

Также необходим пакет cups и собственно samba должна быть собрана с поддержкой этого пакета. Установим наш виртуальный принтер через веб интерфейс сервиса cups, назовем его fax.

Расшариваем принтер, добавив следующие строчки в /etc/samba/smb.conf

[global]
    printing = cups
    printcap name = /etc/printcap
[fax]
    comment = Факс
    public = yes
    printable = yes
    writable = yes
    create mode = 0666

На операторских компьютерах установлена Windows 7. Сетевой принтер устанавливается, как обычно только запросит драйвер, я выбрал HP LaserJet 2300 Series PS (должен подойти любой PostScript драйвер)

При печати на данный принтер сам документ должен попадать на принтер в пригодном формате, а пользователь должен получить четырехзначный номер при переводе, на который произойдет передача этого документа.

Для начала посмотрим настройки этого виртуального принтера nano /etc/cups/cups-pdf.conf
И изменим следующие настройки:

Out /var/spool/cups-pdf        # папка куда сохраняются документы
AnonDirName /var/spool/cups-pdf
Spool /var/spool/cups-pdf
TitlePref 1     # нужно для представлении имени файла
UserUMask 0000  # маска для создаваемых файлов
PostProcessing /opt/pdf_to_tiff # скрипт запускаемый после создания pdf файла
DecodeHexStrings 1  # нужно для представлении имени файла

Скрипт /opt/pdf_to_tiff считывает текущее значение ext_num (четырехзначный номер факса) прибавляет единичку и переносит pdf файл в папку /usr/dumps под именем ext_num.
Далее преобразует файл в формат tiff и отправляет пользователю, который отправил документ письмо с четырехзначным номером на почту.

Cups-pdf будет запускать /opt/pdf_to_tiff с двумя параметрами:
имя файла — $ARGV[0]
имя пользователя — $ARGV[1]
В организации домен (samba-3.6) и почтовые ящики (корпоративная почта на postfix) соответствуют именам пользователей (кое-где пришлось добавить пару почтовых алиасов).

Сам скрипт:

srv d # cat /opt/pdf_to_tiff 
#!/usr/bin/perl -w
use strict;
use File::Copy;

# Устанавливаем путь по умолчанию
$ENV{PATH} = '/bin:/usr/bin:/sbin:/usr/sbin';

# Отладка
my $debug=0;

# Делаем корень текущим каталогом
chdir '/';

my $ext=" ";
my $num=0;
open(ext_num,"/opt/ext_num");
    $ext=<ext_num>;
    $num=int($ext);
close(ext_num);
if ($num > 499) {
    $num=1;
} else {
    $num=$num+1;
}
open(ext_num,">/opt/ext_num");
    print ext_num "$numn";
close(ext_num);
$num=$num+5000;
move("$ARGV[0]","/usr/dumps/$num.pdf");
system("/usr/bin/gs -dSAFER -dBATCH -dQUIET -sDEVICE=tiffg3 -sPAPERSIZE=a4 -r204x196 -dNOPAUSE -sOutputFile=/usr/dumps/$num.tiff /usr/dumps/$num.pdf");
chmod(0644,"/usr/dumps/$num.tiff");
system("/usr/bin/sendEmail -f asterisk_fax@name.ru -t $ARGV[1]@name.ru -u FAX -o message-charset=utf-8 -m Номер для перевода на факс:$num -s localhost");

Проверяем работу, отправив на печать какой либо документ (возможно придется создать и поправить права на доступ к папке /usr/dumps/)
Далее настраиваем Asterisk на прием и отправку факсов:
Главное отключить faxdetect:

/etc/asterisk/sip.conf
[general]
    faxdetect=no
    ;faxdetect=yes
    t38pt_udptl=no
    ;t38pt_udptl=yes
/etc/asterisk/extensions.conf
[internal]
exten => 5555,1,NoOp(-------------------Call from ${CALLERID(number)} to ${EXTEN}------------------)
 same => n,Goto(fax-rx,receive,1)

exten => _5[0-4]XX,1,NoOp(-------------------Call from ${CALLERID(number)} to ${EXTEN}------------------)
 same => n,Set(FAXFILENAME=${EXTEN})
 same => n,Goto(fax-tx,send,1)

[fax-rx]
exten => receive,1,NoOP(------------------- FAX from ${CALLERID(number)} ------------------)
 same => n,Answer()
 same => n,Set(DT=${TIMESTAMP}-${CALLERIDNUM}-${UNIQUEID})
 same => n,Set(FAXOPT(headerinfo)=Received by ${CALLERID(number)} ${STRFTIME(${EPOCH},,%Y-%m-%d %H-%M)})
 same => n,Set(FAXOPT(localstationid)=Name)
 same => n,Set(FAXOPT(maxrate)=14400)
 same => n,Set(FAXOPT(minrate)=2400)
 same => n,NoOp(FAXOPT(ecm) : ${FAXOPT(ecm)})
 same => n,NoOp(FAXOPT(headerinfo) : ${FAXOPT(headerinfo)})
 same => n,NoOp(FAXOPT(localstationid) : ${FAXOPT(localstationid)})
 same => n,NoOp(FAXOPT(maxrate) : ${FAXOPT(maxrate)})
 same => n,NoOp(FAXOPT(minrate) : ${FAXOPT(minrate)})
 same => n,NoOp(**** RECEIVING FAX : ${DT} ****)
 same => n,ReceiveFax(/var/spool/asterisk/fax/${FAXOPT(headerinfo)}.tif)
 same => n,System(/usr/bin/tiff2pdf "/var/spool/asterisk/fax/${FAXOPT(headerinfo)}.tif" -o "/var/spool/asterisk/fax/${FAXOPT(headerinfo)}.pdf")
 same => n,System(/bin/cp "/var/spool/asterisk/fax/${FAXOPT(headerinfo)}.pdf" /mnt/public/samba/public/FAX )
 same => n,System(/usr/bin/sendEmail -f asterisk_fax@name.ru -t office@name.ru -u FAX -o message-charset=utf-8 -m Смотри вложение -s localhost -a "/var/spool/asterisk/fax/${FAXOPT(headerinfo)}.pdf")
 same => n,HangUp()
[fax-tx]
exten => send,1,NoOp(------------------- FAX from ${CALLERID(number)} ------------------)
 same => n,Wait(1)
 same => n,Set(DT=${TIMESTAMP}-${CALLERIDNUM}-${UNIQUEID})
 same => n,Set(FAXOPT(headerinfo)=Received by ${CALLERID(number)} ${STRFTIME(${EPOCH},,%Y-%m-%d %H-%M)})
 same => n,Set(FAXOPT(localstationid)=Name)
 same => n,Set(FAXOPT(maxrate)=14400)
 same => n,Set(FAXOPT(minrate)=2400)
 same => n,NoOp(FAXOPT(headerinfo) : ${FAXOPT(headerinfo)})
 same => n,NoOp(FAXOPT(localstationid) : ${FAXOPT(localstationid)})
 same => n,NoOp(FAXOPT(maxrate) : ${FAXOPT(maxrate)})
 same => n,NoOp(FAXOPT(minrate) : ${FAXOPT(minrate)})
 same => n,NoOp(**** RECEIVING FAX : ${DT} ****)
 same => n,SendFAX(/usr/dumps/${FAXFILENAME}.tiff,d)
 same => n,NoOp(${FAXSTATUS})
 same => n,NoOp(number is ${CALLERID(number)})
 same => n,System(/usr/bin/sendEmail -f asterisk_fax@name.ru -t office@name.ru -u 'Fax message Sent' -o message-charset=utf-8 -m 'Номер:${CALLERID(number)}nStatus:${FAXSTATUS}' -s localhost -l /var/log/fax.log)
 same => n,HangUp()



Вот и все. В итоге не нужен дополнительный софт и проще обучить операторов работе с факсами.

Итак, в это статье я  расскажу как заставить asterisk работать с факсами с бинарным модулем от Digium — res_fax_asterisk. Данный модуль для одной линии компания Digium предлагает бесплатно. Если планируете использовать более одной линии для отправки факсов, то придется покупать лицензии. В редких случаях понадобиться более одной линии, но если её будет мало — то потратив всего несколько десятков долларов можно без проблем докупить! Ещё оговорюсь — факсы по VoIP — это зло, избегайте их по возможности. Многие адаптеры SIP->FXS по разному обрабатывают поток данных, во многих прошивках есть баги, стационарные факсовые аппараты тоже работают по-разному.

 

Итак, вся процедура делится на несколько шагов, первый из них — регистрация на сайте digium и виртуальное приобретение ключика для одной линии.

Делается это по ссылке  Fax For Asterisk . Процесс регистрации на сайте я описывать не буду, однако имейте ввиду — получить бесплатную лицензию для одной учетной записи можно только один раз.

После успешной регистрации и «покупки» модуля придёт письмо с подтверждением и серийным номером. Он скоро понадобится.

Ну а теперь приступим непосредственно к установки. Итак, открывает консоль!

1. По умолчанию, будем считать, что работаем в домашнем каталоге пользователя user  (/home/user)

[root@ippbx /]# cd /home/user

Скачиваем необходимые инструменты
утилита register — необходима для регистрации модуля

[root@ippbx user]# wget http://downloads.digium.com/pub/register/x86-32/register

или для 64-битных систем

[root@ippbx user]# wget http://downloads.digium.com/pub/register/x86-64/register

Далее нам понадобится приложения для тестирования и определения лучшего модуля, который подходит системе и CPU
качаем для 32-битной или 64-битной системы соответственно

[root@ippbx user]# wget http://downloads.digium.com/pub/telephony/fax/benchfax/x86-32/benchfax-1.0.8-x86_32

или

[root@ippbx user]# wget http://downloads.digium.com/pub/telephony/fax/benchfax/x86-64/benchfax-1.0.8-x86_64

Далее сделаем полученные файлы исполняемыми

[root@ippbx user]# chmod 500 register
[root@ippbx user]# chmod 500 benchfax-1.0.x86*

Приступаем к регистрированию ключика запустив

[root@ippbx user]# ./register

Программа начнет задавать некоторые вопросы,  правильные ответы на них следующие

1 — Digium product
9 — Free Fax for Asterisk

Далее программа попросит ввести полученный ключик через электронную почту, а так же ещё раз заполнить данные владельца этого ключа.  Если честно, вводить другие данные отличные от регистрационных на сайте Diguim я не пробовал.
После этого установщик спросит подтверждение и создаст необходимые файлы для работы системы. Сам ключ будет находиться в папке /var/lib/asterisk/licences

Итак, мы получили и зарегистрировали ключ — приступим к выбору и установке самого модуля
Для начала, запустим программу benchfax — он проведет тестирование и подскажет какой модуль использовать

[root@ippbx user]# ./benchfax-1.0.8-x86_(архитектура)

Нужный модуль лежит тут

http://downloads.digium.com/pub/telephony/fax/res_fax_digium/ (версия asterisk) / (архитектура) / (модуль)

Для конкретного примера рассмотрим установку модуля generic для 64-битной архитектуры

[root@ippbx user]# wget http://downloads.digium.com/pub/telephony/fax/res_fax_digium/asterisk-11.0/x86-64/res_fax_digium-11.0_1.3.1-generic_64.tar.gz
[root@ippbx user]# tar -xzvf res_fax_digium-11.0_1.3.1-generic_64.tar.gz
[root@ippbx user]# cp res_fax_digium-11.0_1.3.1-generic_64/res_fax_digium.so /usr/lib/asterisk/modules/
[root@ippbx user]# cp res_fax_digium-11.0_1.3.1-generic_64/res_fax_digium.conf /etc/asterisk/
[root@ippbx user]# chown asterisk:asterisk /usr/lib/asterisk/modules/res_fax_digium.so
[root@ippbx user]# chown asterisk:asterisk /etc/asterisk/res_fax_digium.conf

Подключаем и проверяем модуль

Если asterisk запущен, перегружаем его любым удобным способом, например core restart now, или если есть вызовы то core restart when convienient
проверяем работу модуля

[root@ippbx user]# asterisk -rvvv

ippbx*CLI&gt; fax show capabilities

Registered FAX Technology Modules:

Type : DIGIUM
Description : Digium FAX Driver
Capabilities : SEND RECEIVE T.38 G.711 MULTI-DOC
1 registered modules

Если модуль не загрузился, проверьте что модуль app_fax не загружен, и при наличии его — выгрузите

ippbx*CLI&gt;module unload app_fax.so

В дальнейшем, добавьте в файл /etc/asterisk/modules.conf следующий параметр

noload => app_fax.so