Asterisk + Hylafax (факс сервер)

Это решение отличается от факса по умолчанию во FreePBX, использующего rxfax и txfax. Вместо этого, с помощью HylaFax, вы получите полнофункциональный факс-сервер корпоративного класса. Прием факса на емайл. Отправка факса через емайл. Отправка факса через драйвер виртуального принтера.

  • CentOS 5.X / Centos 6 / Centos 7
  • Asterisk должен быть установлен.
  • IAXmodem требует SPANDSP
  • HylaFax имеет зависимости:
    • libtiff-3.5.5 или выше
    • ghostscript-5.50 или выше
    • ghostscript-fonts-5.50 или выше
    • libtiff-devel
    • zlib-devel

Скачать Hylafax

HylaFAX имеется в EPEL репозитории

Вопросы при FaxSetup:

Should an entry be added for the FaxMaster to /etc/aliases )yes(? yes
Users to receive fax-related mail )root? ( root 
HylaFAX configuration parameters are:
1 Init script starts faxq: yes
2 Init script starts hfaxd yes
3 Start old protocol: no
4 Start paging protocol: no
Are these ok yes? yes

Скачать Iaxmodem

-Прочтите README IAXmodem для установки.

Если Asterisk был скомпилирован с поддержкой факсов, установку SpanDSP можно пропустить.

Используйте команду make clean при компиляции iaxmodem.

В завершении установки, скопируйте бинарник iaxmodem в /usr/local/sbin

Создайте файл /etc/iaxmodem/ttyIAX0

device /dev/ttyIAX0   
owner uucp:uucp
mode 660
port 4570  #уникальный порт для каждого устройства!
refresh 300
server 127.0.0.1 # или реальный IP адрес интерфейса
peername iaxmodem0  # это IAX пир в Asterisk!
secret 12345  # пароль IAX 
cidname Fax1
cidnumber 78123216111
codec alaw

Настройте IAX пир в Asterisk.

iax.conf

[iaxmodem0]
type=friend
username=iaxmodem0
context=from-internal
secret=12345
host=127.0.0.1 ;или dynamic
port=4570
qualify=yes
disallow=all
allow=ulaw;
trunk=no
requirecalltoken=no

Теперь, когда, IAXmodem сконфигурирован, научим Hylafax обращаться к нему. В исходниках IAXmodem есть файл config.ttyIAX. Скопируйте его в /var/spool/hylafax/etc/ изменяя название для каждого модема - config.ttyIAX0, config.ttyIAX1 и т.д.

Чтобы Hylafax начал принимать факсы, надо запустить IAXmodem и ttyIAX устройство. Вручную это можно сделать командами:

/usr/local/sbin/iaxmodem ttyIAX0

faxgetty /dev/ttyIAX0

В случае если появиться сообщение об отсутствии libiax.so.0 и libspandsp.so.1 :

 ln /usr/local/lib/libiax.so.0.0.0  /lib/libiax.so.0
 ln /usr/local/lib/libspandsp.so.1.0.0  /lib/libspandsp.so.1

Авто Старт модемов при запуске системы CentOS 5, 6, 7

Centos 5 SysV

Если все работает, напишите в /etc/inittab

iax1:2345:respawn:/usr/local/sbin/iaxmodem ttyIAX0
iax2:2345:respawn:/usr/local/sbin/iaxmodem ttyIAX1
mo1:2345:respawn:/usr/local/sbin/faxgetty ttyIAX0
mo2:2345:respawn:/usr/local/sbin/faxgetty ttyIAX1

  *Первые две строчки запускают два  IAXmodem-а.
  *Последние две - позволяют получать факсы через эти модемы

Centos6 Upstart

nano /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
nano /etc/init/start-faxgetty.conf
# This service start /dev/ttyIAX

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

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

Centos 7 systemd

Создадим ссылку на скрипт запуска HylaFAX в /etc/init.d

 cd /etc/init.d
 ln /usr/sbin/hylafax hylafax

И включим автостарт HylaFAX при запуске:

 /sbin/chkconfig hylafax on

В директории

/etc/systemd/system/

создадим файл: iaxmodem-ttyIAX0.service

[Unit]
Description=HylaFAX iaxmodem  for ttyIAX0

[Service]
User=root
Group=root
Restart=always
RestartSec=30
ExecStart=/usr/local/sbin/iaxmodem ttyIAX0

[Install]
WantedBy=multi-user.target 

Для проверки запустим сервис:

# systemctl start iaxmodem-ttyIAX0.service

И убедимся что он работает:

# systemctl status iaxmodem-ttyIAX0.service

iaxmodem-ttyIAX0.service - HylaFAX iaxmodem  for ttyIAX0
   Loaded: loaded (/etc/systemd/system/iaxmodem-ttyIAX0.service; disabled)
   Active: active (running) since Вт 2015-11-10 14:23:15 MSK; 8s ago
 Main PID: 20330 (iaxmodem)
   CGroup: /system.slice/iaxmodem-ttyIAX0.service
           └─20330 /usr/local/sbin/iaxmodem ttyIAX0
           
оя 10 16:49:06 asterisk.gw.local systemd[1]: Starting HylaFAX iaxmodem  for ttyIAX0...
ноя 10 16:49:06 asterisk.gw.local systemd[1]: Started HylaFAX iaxmodem  for ttyIAX0.
ноя 10 16:49:07 asterisk.gw.local iaxmodem[649]: [2015-11-10 16:49:07] Modem started

в директории /etc/systemd/system создадим файл: faxgetty-ttyIAX0.service

[Unit]
Description=HylaFAX faxgetty for ttyIAX0

[Service]
User=root
Group=root
Restart=always
RestartSec=30
ExecStart=/usr/sbin/faxgetty /dev/ttyIAX0

[Install]
WantedBy=multi-user.target 

Запустим сервис:

# systemctl start faxgetty-ttyIAX0.service

И проверим статус:

# systemctl status faxgetty-ttyIAX0.service

faxgetty-ttyIAX0.service - HylaFAX faxgetty for ttyIAX0
   Loaded: loaded (/etc/systemd/system/faxgetty-ttyIAX0.service; disabled)
   Active: active (running) since Вт 2015-11-10 14:23:45 MSK; 1s ago
 Main PID: 20359 (faxgetty)
   CGroup: /system.slice/faxgetty-ttyIAX0.service
           └─20359 /usr/sbin/faxgetty /dev/ttyIAX0

ноя 10 14:23:45 asterisk.gw.local systemd[1]: Started HylaFAX faxgetty for ttyIAX0.
ноя 10 14:23:45 asterisk.gw.local FaxGetty[20359]: OPEN /dev/ttyIAX0  HylaFAX (tm) Version 5.5.6
ноя 10 14:23:46 asterisk.gw.local FaxGetty[20359]: MODEM set DTR OFF
ноя 10 14:23:46 asterisk.gw.local FaxGetty[20359]: MODEM set baud rate: 0 baud (flow control unchanged)
ноя 10 14:23:46 asterisk.gw.local FaxGetty[20359]: DELAY 75 ms
ноя 10 14:23:46 asterisk.gw.local FaxGetty[20359]: MODEM set DTR ON
ноя 10 14:23:46 asterisk.gw.local FaxGetty[20359]: DELAY 2600 ms

В завершении включим автозагрузку модема:

# systemctl enable iaxmodem-ttyIAX0.service

# systemctl enable faxgetty-ttyIAX0.service

После перезагрузки проверим старт модемов и HylaFAX

# ps aux | grep fax && ps aux | grep iax

uucp       650  0.0  0.0 177440  3196 ?        Ss   16:49   0:00 /usr/sbin/faxgetty /dev/ttyIAX0
uucp     12661  0.0  0.0 177388  1988 ?        Ss   16:50   0:00 /usr/sbin/faxq
uucp     12670  0.0  0.0  71320  1396 ?        Ss   16:50   0:00 /usr/sbin/hfaxd -i hylafax
uucp       649  0.0  0.0  21060  1232 pts/0    Ss+  16:49   0:00 /usr/local/sbin/iaxmodem ttyIAX0

Входящие Вызовы

Теперь, когда все работает, настройте маршрутизацию DID в Asterisk.

exten => 78123216111,1,Dial(IAX2/iaxmodem0/${EXTEN},10,r)

где ${EXTEN} переменная $CALLID4, получаемая Hylafax в /var/spool/hylafax/etc/FaxDispatch:

SENDTO=root;
FILETYPE=pdf;

case "$CALLID4" in
78123216111)
SENDTO="smirnov@neotek.ru"
;;
esac

или привяжемся к девайсу:

## and/or by device
SENDTO=root;
FILETYPE=pdf;

case "$DEVICE" in
  ttyIAX0) SENDTO=smirnov@neotek.ru;;
esac
распечатаем принятый факс на принтере
case "$DEVICE" in
        ttyIAX0)
                SENDTO=smirnov@neotek.ru   
                PRINTER=HP1200;;
esac

Добавьте в конец файла /var/spool/hylafax/bin/faxrcvd

        # If $PRINTER not empty, then print $FILE with $PRINTER
        if [ -n "$PRINTER" ]; then
            $FAX2PS $FILE | lpr -P$PRINTER
        fi

Отправка факсов

Тестовая отправка факса командой- sendfax -n -d <faxnumber> <file.txt>:

# sendfax -n -d 8123216111 /etc/issue.net

Отправка факса через специфический модем

# sendfax -m -n -h ttyACM0@127.0.0.1 -d 93216111 <file>

<spoiler>

We should see this in the CLI:

 -- Accepting AUTHENTICATED call from 127.0.0.1:
       > requested format = alaw,
       > requested prefs = (),
       > actual format = alaw,
       > host prefs = (alaw),
       > priority = mine
    -- Executing Answer("IAX2/iaxmodem0", "") in new stack
    -- Executing Dial("IAX2/iaxmodem0", "SIP/123456/8123216111") in new
 stack
    -- Called 123456/8123216111
    -- SIP/123456-0818f630 is making progress passing it to IAX2/iaxmode
m-3
    -- SIP/123456-0818f630 answered IAX2/iaxmodem0
    -- parse_srv: SRV mapped to host my-voip-provider.com, port 5060
  == Spawn extension (fax-out, 8123216111, 2) exited non-zero on 'IAX2/i
axmodem0'
    -- Executing Hangup("IAX2/iaxmodem0", "") in new stack
  == Spawn extension (fax-out, h, 1) exited non-zero on 'IAX2/iaxmodem0
'
    -- Hungup 'IAX2/iaxmodem0'

</spoiler> Используйте команду faxstat -s для проверки:

# faxstat -s
HylaFAX scheduler on localhost.localdomain: Running
Modem ttyIAX (177): Running and idle
Modem ttyIAX1 (166): Running and idle

JID  Pri S  Owner Number       Pages Dials     TTS Status
35   127 B   root 177           0:0   0:12         Blocked by concurrent cal

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

Для того чтобы модем работал только на отправку измените в /var/spool/hylafax/config.ttyMODEM:

RingsBeforeAnswer: 0

Для того чтобы модем работал только на прием, добавьте строку :

ModemReadyState: D

Перезапустите faxgetty.

Пример вывода для ModemReadyState: D

HylaFAX scheduler on localhost: Running
Modem ttyACM0 (0): Running and idle (down)
Modem ttyIAX0 (): Running and idle
Modem ttyIAX1 (): Running and idle

Максимальное количество попыток набора hyla.conf

/var/local/lib/fax/hyla.conf

 MaxDials:3
 MaxTries:3

с помощью Winprint Hylafax

Скачайте Winprint Hylafax

Установите Winprint Hylafax на компьютер.

Установите новый принтер:

При выборе порта для принтера - создать новый порт -Winprint Hylafax

Имя порта: по дефолту

Принтер: Apple Laser Writer # рекомендуют

Имя принтера: «Winprint Hylafax»

В свойствах установленного принтера, выбираем вкладку «Порты»

Конфигурируем порт

Чтобы Hylafax разрешил соединение, добавьте IP адрес машины на которой установлен Winprint Hylafax в файл: /var/spool/hylafax/etc/hosts.hfaxd. Поле password можно оставить пустым, Поле user должно быть заполнено.

faxadduser [-c] [-a admin-password] [-f hosts-file] [-h host-name] [-p password] [-u uid] username
192.168.0.[0-9]+$:::
^test@*.*

При выборе печати документа через Apple Laser Write (или что там у Вас будет), появиться диалоговое окно:

введите номер телефона и ОК.

Контекст с голосовым сообщением для отправки факсов

 [from-iaxmodem]
exten => _X.,1,Dial(DAHDI/g1/${EXTEN},,A(primite-fax))

сообщение должно быть в формате alaw или ulaw (в зависимости от кодека используемого IAXmodem)

sox fax.wav -t raw -r 8000 -c 1 -b  -A fax.alaw

Дополнительная информация по теме

/var/local/lib/fax/hyla.conf
/var/local/lib/fax/hfaxd.conf

Fax-to-email во FreePBX

Приложения

  • artikle/fax.txt
  • Последние изменения: 2018/09/12