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 имеется в 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
-Прочтите 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
Имя порта: по дефолту
Принтер: 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