В этой заметке я расскажу как научить asterisk принимать и отправлять факсы с помощью внутренних приложений SendFAX и RecieveFAX. Почему именно эти приложения? Во-первых, они обеспечивают расширенный функционал, а во вторых наиболее стабильную работу.

В данном руководстве будет рассмотрен вариант сборки asterisk с поддержкой модуля spandsp. Для описания установки используется Centos 6.6-i386 и Asterisk 11.7.0

1. Нам понадобится проверенный дистрибутив asterisk с исходными кодами, желательно который уже собирали (что бы не возникло смежных ошибок). Если вам ещё предстоит найти и подготовить исходные тексты asterisk к сборкею.

Итак, скачиваем исходники с сайта

[root@centostest asterisk-11.7.0]# cd /home/user
[root@centostest asterisk-11.7.0 user]# wget http://soft-switch.org/downloads/spandsp/spandsp-0.0.6pre21.tgz

Распаковываем для дальнейшей работы

[root@centostest asterisk-11.7.0 user]# tar -xzvf spandsp-0.0.6pre21.tgz

скорее всего нам понадобятся следующие библиотеки

[root@centostest asterisk-11.7.0 user]# yum install -y libtiff-devel

2. Конфигурируем и собираем модуль

[root@centostest asterisk-11.7.0 user]# cd spandsp-0.0.6
[root@centostest asterisk-11.7.0 spandsp-0.0.6]# ./configure --prefix=/usr/local
[root@centostest asterisk-11.7.0 spandsp-0.0.6]#  make
[root@centostest asterisk-11.7.0 spandsp-0.0.6]#  make install

Для 64-битных систем могут быть нюансы, т.к. там есть две папки с библиотеками lib и lib64, имейте ввиду!

3. Далее нужно указать пути библиотек для системы, вносим некоторые изменения

[root@centostest asterisk-11.7.0 spandsp-0.0.6]# cat > /etc/ld.so.conf.d/spandsp.conf << EOF
/usr/local
/usr/local/lib
EOF

4. Следующим шагом будет сборка asterisk с поддержкой spandsp модуля

[root@centostest asterisk-11.7.0 spandsp-0.0.6]#  cd /home/user/asterisk-11.7.0
[root@centostest asterisk-11.7.0 asterisk-11.7.0]#  make distclean
[root@centostest asterisk-11.7.0 asterisk-11.7.0]# ./configure

запускаем конфигуратор компонентов asterisk

[root@centostest asterisk-11.7.0 asterisk-11.7.0]# make menuselect

в меню Resource Modules необходимо активировать два модуля
[*] res_fax
[*] res_fax_spandsp

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

Нажимаем ESC и выполняем сохранение конфигурации кнопкой S

Выполняем сборку и установку нового asterisk-а, предварительно перед этим выполнив его остановку service asterisk stop

[root@centostest asterisk-11.7.0 asterisk-11.7.0]#  make
[root@centostest asterisk-11.7.0 asterisk-11.7.0]#  make install

5. Запускаем новый Астериск

[root@centostest asterisk-11.7.0 asterisk-11.7.0]#  service asterisk start

заходим консольно

[root@centostest asterisk-11.7.0 asterisk-11.7.0]#  asterisk -rvv

Проверяем, загрузились ли модули

centostest*CLI> fax show capabilities

Нормальным результатом должен быть похожий ответ

Registered FAX Technology Modules:

Type : Spandsp
Description : Spandsp FAX Driver
Capabilities : SEND RECEIVE T.38 G.711 GATEWAY
1 registered modules

Если модули не найдены, попробуйте сначала их загрузить и перегрузить вручную

centostest*CLI> module reload res_fax.so
centostest*CLI> modeule load res_fax_spandsp.so

Электронная почта давно является основным способом обмена документами. Но после того, как я заменил во многих организациях в моем городе старые сименсы и панасы на Asterisk PBX, сталкивался с нежеланием отказываться от факсов(особенно в бюджетных организациях), и понятно — это быстрее и проще для сотрудника, чем возиться со сканером. Так как астер они ставили в основном вследствие расширения штата и с желанием сэкономить, то факсы для новых сотрудников необходимо также виртуализировать. С приемом факса на e-mail проблем возникнуть не должно, с простым и бесплатным способом отправки пришлось поломать голову.

На просторах интернета нашел простой способ отправки факса через веб-интерфейс FreePBX. Несложно настроить, работает на ура. Для активного использования факсов в крупном офисе вряд ли подойдет, но для небольшого офиса с небольшим факсовым трафиком или для новичков в астере или *nix — в самый раз.

Мы имеем виртуальную машина в небольшом офисе с Ubuntu 12.04 на борту. Установлен Asterisk 11 + FreePBX 2.11. Логинимся по ssh на сервер и приступаем.

1. Устанавливаем модуль факса. Также можно использовать модуль spandsp, в нем нет ограничений


Регистрируемся на сайте Digium, идем на  страницу модуля, жмем «Get 1 Free license» оформляем заказ, ждем письмо с кодом.
Отсюда скачиваем утилиту для регистрации нашего модуля, кладем в /tmp, отмечаем выполнение для владельца и запускаем.

cd /tmp
wget http://downloads.digium.com/pub/register/x86-32/register
chmod 500 register
./register


Вы увидите текстовое меню с приглашением для ввода:

Digium Product Registration - Version 3.0.5
Copyright (C) 2004-2007, Digium, Inc.
Use the '-l' option to see license information for software
included in this program.

Please select a category

1 - Digium Products
2 - Cepstral Products

0 - Quit
Your Choice:


Выбираем 1, затем 9, вводите ключ, который пришел на почту, соглашаетесь и заполняете данные.
Сам модуль берем тут, выбираем версию под свой сервер, забираем по ссылке внизу, распаковываем и кладем res_fax_digium.so в ваш ${ASTMODDIR}. Например, у меня

cd /tmp
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
tar -xvf res_fax_digium*
cd res_fax_digium*
cp res_fax_digium.so /usr/lib/asterisk/modules/

 

2. Скачаем нужные нам файлы и распакуем их во временный каталог.

 

cd /tmp && wget http://faxgui-ari-module.googlecode.com/files/faxgui-ari-module.tar.gz && tar xvf faxgui-ari-module.tar.gz

 

3. Копируем все на свои места и устаналиваем права.

 

cp faxgui-ari-module/sendfax.module /var/www/recordings/modules/ # проверьте ваш параметр %AMPROOT%
cp faxgui-ari-module/sendfaxnotify.php /var/lib/asterisk/bin/  # проверьте ваш параметр ${ASTVARLIBDIR}
chown asterisk:asterisk /var/www/recordings/modules/sendfax.module
chown asterisk:asterisk /var/lib/asterisk/bin/sendfaxnotify.php
dos2unix /var/lib/asterisk/bin/sendfaxnotify.php # перекодировка файла, установите пакет dos2unix

 

4. Создаем контекст для исходящих факсов в файле /etc/asterisk/extensions_custom.conf.

[outboundfax]
exten => s,1,Set(FAXOPT(filename)=${FAXFILE})
exten => s,n,Set(FAXOPT(ecm)=yes)
exten => s,n,Set(FAXOPT(headerinfo)=${FAXHEADER})
exten => s,n,Set(FAXOPT(localstationid)=${LOCALID})
exten => s,n,Set(FAXOPT(maxrate)=14400)
exten => s,n,Set(FAXOPT(minrate)=2400)
exten => s,n,SendFAX(${FAXFILE},d)
exten => s,n,System(${ASTVARLIBDIR}/bin/sendfaxnotify.php INIT "${EMAIL}" "${DESTINATION}" "${TIMESTAMP}" "NO_STATUS" "NO_PAGES")
exten => h,1,NoOp(FAXOPT(ecm) : ${FAXOPT(ecm)})
exten => h,n,NoOp(FaxStatus : ${FAXSTATUS})
exten => h,n,NoOp(FaxStatusString : ${FAXSTATUSSTRING})
exten => h,n,NoOp(FaxError : ${FAXERROR})
exten => h,n,NoOp(RemoteStationID : ${REMOTESTATIONID})
exten => h,n,NoOp(FaxPages : ${FAXPAGES})
exten => h,n,NoOp(FaxBitRate : ${FAXBITRATE})
exten => h,n,NoOp(FaxResolution : ${FAXRESOLUTION})
exten => h,n,System(${ASTVARLIBDIR}/bin/sendfaxnotify.php NOTIFY "${EMAIL}" "${DESTINATION}" "${TIMESTAMP}" "${FAXSTATUSSTRING}" "${FAXPAGES}")
; end of outboundfax context

 

5. Перезапуск и проверка.

 

amportal restart


Идем в User Panel нашего сервера, ip_aster/recordings/, входим под любым пользователем, вводим пароль от голосовой почты. Слева появился пункт Send Fax. Проверяем отправку.

Для удобства и скорости обучения пользователей я отметил алгоритм отправки цифрами, так намного понятнее.

Вот и все, надеюсь, мой пост помог кому-либо с настройкой VoIP-сервера.
В будущем планирую регулярно описывать такие небольшие и тонкие моменты с настройкой.

При написании статьи были использованы материалы:

hiousi.tumblr.com/post/2745684940/a-freepbx-ari-module-to-send-fax-from-the-user-portal
trentdev.blogspot.ru/2013/04/send-fax-using-asteriskfreepbx-with.html
www.digium.com/en/products/software/fax-for-asterisk
wiki.freepbx.org/display/ST/Faxing+and+T38

Небольшое дополнение
Сейчас настраивал отправку клиенту по своему мануалу, вспомнил еще несколько моментов.

1. Для поддежки PDF установите пакет ghostscript

aptitude install ghostscript # мой случай

2. Не забудьте про опции в sip.conf, либо в веб-интерфейсе

t38pt_udptl=yes,redundancy,maxdatagram=400
faxdetect=no

3. При проверке посмотрите лицензию в CLI

fax show licenses

Не регистрируйте несколько ключей на 1 ящик, чревато дальнейшей невалидностью