Перерыл кучу интернета, дабы добраться до истины, но ни где не нашел достойного и подробного описания с объяснением до момента «взлетела». Попробую исправить это упущение.
И так, у нас есть Ubuntu 14.04.1, Asterisk 12. Требуется настроить его на принятие факсов. Не будем использовать решение от Digium, а будем использовать spandsp в ходящее в поставку Asterisk. Но т.к. мы собирали Asterisk сами, то данный модуль у нас отсутствует. Скачаем его и пересоберем Asterisk по новой.
Скачиваем пакет spandsp
Разархивируем его
Для работы нам понадобиться библиотека libtiff , установим ее. Сначала пропишем новый репозиторий и обновим
apt-get update
Теперь установим библиотеку
Библиотека установлена, теперь перейдем не посредственно к установке spandsp. Переходим в каталог с spandsp и собираем его.
./configure --prefix=/usr/local
make
make install
Далее нужно указать пути библиотек для системы, вносим некоторые изменения
/usr/local
/usr/local/lib
EOF
Собираем Asterisk с поддержкой spandsp модуля. Обратимся к статье Установка Asterisk. Для начала выполним очистку
По новой проверим все
Перейдем не посредственно к меню добавления модулей
В разделе Resource Modules необходимо убедится что выбрано два модуля. res_fax и res_fax_spandsp
Сохраняем конфигурацию и пересобираем Asterisk по новой
make install
После запускаем новый Asterisk
Заходим в консоль
И проверяем подключены ли модули
В нормальном случае должно выглядеть так
Type : Spandsp
Description : Spandsp FAX Driver
Capabilities : SEND RECEIVE T.38 G.711 GATEWAY
1 registered modules
Проверим еще вот таким образом какие модули у нас загружены
В нормальном случае должно выглядеть так
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> modeule load res_fax_spandsp.so
Если Asterisk выдал ошибку
То выходим из консоли Asterisk и вводим следующую команду
Модули подключили, а как же принять факс, и сохранить его в файл на сервере? Для этого отредактируем файл конфигурации диалплана в разделе [incoming_calls]
exten => _X.,1,Verbose(1,Получен звонок с внешней линии 2)
exten => _X.,n,answer()
exten => _X.,n,ReceiveFAX(/home/user/fax/rr.tif,f)
Перезапустим диалплан.
Asterisk*CLI> dialplan reload
Пробуем отправить факс. Проверяем наличие файла в указанной директории. Идем дальше. Теперь требуется отправить данный файл на email.
Для начала установим пакет говорящий сам за себя sendemail
Попробуем тестово отправить наше сообщение из консоли по smtp протоколу через какой нибудь сервер. Для этого нужно чтобы уже на этом сервере у нас была заведена учетная запись и пароль. В моем случае я назвал учетку fax
Письмо ушло и мы получили его на той стороне. Теперь попробуем заставить это делать Asterisk
Для этого снова отредактируем фаил конфигурации диалплана. Приведем его к такому виду
[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()
Сохраняем. Перезапускаем диалплан.
Asterisk*CLI> dialplan reload
Проверяем работспособность.
Ссылки на статьи которые я использовал:
Ссылка 1
Ссылка 2
Ссылка 3
Ссылка 4