Asterisk – HylaFAX – IAXmodem

Опубликовано:

После того как 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
в результате информация о звонке будет заключена между этими метками.

Понравилась статья, расскажи о ней друзьям, нажми кнопку!