Перерыл кучу интернета, дабы добраться до истины, но ни где не нашел достойного и подробного описания с объяснением до момента «взлетела». Попробую исправить это упущение.
И так, у нас есть Ubuntu 14.04.1, Asterisk 12. Требуется настроить его на принятие факсов. Не будем использовать решение от Digium, а будем использовать spandsp в ходящее в поставку Asterisk. Но т.к. мы собирали Asterisk сами, то данный модуль у нас отсутствует. Скачаем его и пересоберем Asterisk по новой.
Скачиваем пакет spandsp
wget http://soft-switch.org/downloads/spandsp/spandsp-0.0.6.tar.gz
Разархивируем его
tar -xzvf spandsp-0.0.6.tar.gz
Для работы нам понадобиться библиотека libtiff , установим ее. Сначала пропишем новый репозиторий и обновим
echo 'deb http://cz.archive.ubuntu.com/ubuntu saucy main universe' >> /etc/apt/sources.list.d/extra.list
apt-get update
Теперь установим библиотеку
apt-get install libtiff4 libtiff4-dev
Библиотека установлена, теперь перейдем не посредственно к установке spandsp. Переходим в каталог с spandsp и собираем его.
cd spandsp-0.0.6
./configure --prefix=/usr/local
make
make install
Далее нужно указать пути библиотек для системы, вносим некоторые изменения
/etc/ld.so.conf.d/spandsp.conf << EOF
/usr/local
/usr/local/lib
EOF
Собираем Asterisk с поддержкой spandsp модуля. Обратимся к статье Установка Asterisk. Для начала выполним очистку
По новой проверим все
Перейдем не посредственно к меню добавления модулей
В разделе Resource Modules необходимо убедится что выбрано два модуля. res_fax и res_fax_spandsp
Сохраняем конфигурацию и пересобираем Asterisk по новой
После запускаем новый Asterisk
Заходим в консоль
И проверяем подключены ли модули
В нормальном случае должно выглядеть так
Registered FAX Technology Modules:
Type : Spandsp
Description : Spandsp FAX Driver
Capabilities : SEND RECEIVE T.38 G.711 GATEWAY
1 registered modules
Проверим еще вот таким образом какие модули у нас загружены
В нормальном случае должно выглядеть так
Module Description Use Count Status
res_fax.so Generic FAX Applications 1 Running
res_fax_spandsp.so Spandsp G.711 and T.38 FAX Technologies 0 Running
2 modules loaded
Если чуда не произошло то пытаемся перезапустить и загрузить данные модули
CLI> module reload res_fax.so
CLI> modeule load res_fax_spandsp.so
Если Asterisk выдал ошибку
Error loading module 'res_fax_psandsp.so' : libspandsp.so.2 cannot open shared object file: No such file or directory
То выходим из консоли Asterisk и вводим следующую команду
ln /usr/local/lib/libspandsp.so.2.0.0 /lib/libspandsp.so.2
Модули подключили, а как же принять факс, и сохранить его в файл на сервере? Для этого отредактируем файл конфигурации диалплана в разделе [incoming_calls]
[incoming_calls]
exten => _X.,1,Verbose(1,Получен звонок с внешней линии 2)
exten => _X.,n,answer()
exten => _X.,n,ReceiveFAX(/home/user/fax/rr.tif,f)
Перезапустим диалплан.
sudo asterisk -rcvv
Asterisk*CLI> dialplan reload
Пробуем отправить факс. Проверяем наличие файла в указанной директории. Идем дальше. Теперь требуется отправить данный файл на email.
Для начала установим пакет говорящий сам за себя sendemail
sudo apt-get install sendemail
Попробуем тестово отправить наше сообщение из консоли по smtp протоколу через какой нибудь сервер. Для этого нужно чтобы уже на этом сервере у нас была заведена учетная запись и пароль. В моем случае я назвал учетку fax
sendemail -f sender@local.host -t dest@example.com -u test -m "test test" -s mail.example.com:25 -o tls=auto -xu fax -xp p@s$w0rd -a "/home/user/fax/rr.tif"
Письмо ушло и мы получили его на той стороне. Теперь попробуем заставить это делать Asterisk
Для этого снова отредактируем фаил конфигурации диалплана. Приведем его к такому виду
[general]
[globals]
[default]
[incoming_calls]
exten => _X.,1,Verbose(1,Получен звонок с внешней линии 2)
exten => _X.,n,Goto(fax-rx,receive,1) ;переводим вызов на "процедуру" принятия факса
[outgoing_calls]
exten => _X.,1,Verbose(Совершается исходящий вызов)
exten => _X.,n,answer()
exten => _X.,n,Dial(SIP/Operator_SIP/${EXTEN})
[phones]
include => outgoing_calls
[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(/home/user/fax/${FAXOPT(headerinfo)}.tif,f)
same => n,System(sendemail -f sender@local.host -t dest@example.com -u test -m "test test" -s mail.example.com:25 -o tls=auto -xu fax -xp p@s$w0rd -a "/home/severin/fax/${FAXOPT(headerinfo)}.tif")
same => n,HangUp()
Сохраняем. Перезапускаем диалплан.
sudo asterisk -rcvv
Asterisk*CLI> dialplan reload
Проверяем работспособность.
Ссылки на статьи которые я использовал:
Ссылка 1
Ссылка 2
Ссылка 3
Ссылка 4