Asterisk, отправка факса на email

Перерыл кучу интернета, дабы добраться до истины, но ни где не нашел достойного и подробного описания с объяснением до момента «взлетела». Попробую исправить это упущение.
И так, у нас есть 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. Для начала выполним очистку

make distclean

По новой проверим все

./configure

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

make menuselect

В разделе Resource Modules необходимо убедится что выбрано два модуля. res_fax и res_fax_spandsp
Сохраняем конфигурацию и пересобираем Asterisk по новой

make
make install

После запускаем новый Asterisk

service asterisk start

Заходим в консоль

asterisk -rvv

И проверяем подключены ли модули

fax show capabilities

В нормальном случае должно выглядеть так

Registered FAX Technology Modules:

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

1 registered modules

Проверим еще вот таким образом какие модули у нас загружены

module show like fax

В нормальном случае должно выглядеть так

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *