Asterisk 1.8-15 CentOS5 FreePBX настройка факса.

Метки: Asterisk, FreePBX

чтобы настроить прием факса на email в Астериске надо многое сделать:

начать надо с проверки версии установленных в системе пакетов, выглядеть это должно примерно так:

[root]# yum list installed |grep aster
asterisk.i386                              1.8.15-0.cert1.1_centos5    installed
asterisk-addons-core.i386                  1.8.15-0.cert1.1_centos5    installed
asterisk-addons-mysql.i386                 1.8.15-0.cert1.1_centos5    installed
asterisk-core.i386                         1.8.15-0.cert1.1_centos5    installed
asterisk-dahdi.i386                        1.8.15-0.cert1.1_centos5    installed
asterisk-devel.i386                        1.8.15-0.cert1.1_centos5    installed
asterisk-doc.i386                          1.8.15-0.cert1.1_centos5    installed
asterisk-sounds-core-en-gsm.noarch         1.4.21-1_centos5            installed
asterisk-sounds-core-en-ulaw.noarch        1.4.21-1_centos5            installed
asterisk-sounds-extra-en-gsm.noarch        1.4.11-1_centos5            installed
asterisk-sounds-moh-opsound-ulaw.noarch    0.0-4_centos5               installed
asterisk-voicemail.i386                    1.8.15-0.cert1.1_centos5    installed
asterisknow-version.noarch                 2.0.0-4_centos5             installed
[root]# yum list installed |grep tiff
libtiff.i386                               3.8.2-18.el5_8              installed
libtiff-devel.i386                         3.8.2-18.el5_8              installed
[root]#

обязательно asterisk-devel libtiff.

сделать прохождение t38 кодека (t38pt_udptl = yes)
и убрать факсдетект (faxdetect=no) в конфигурации sip.

теперь нужно проверить установлен ли модуль spandsp.so в системе:

*CLI> module show like fax
Module                         Description                              Use Count
res_fax.so                     Generic FAX Applications                 1        
res_fax_spandsp.so             Spandsp G.711 and T.38 FAX Technologies  2        
2 modules loaded

если показывает что Spadsp не загружен, значит скорее всего его нет.
Выйти из этой ситуации можно двумя путями:
1. Пересобрать из исходников Астериск с поддержкой факса (ставится в меню конфигуре).
2. Собрать динамическую библиотеку libspandsp.so из исходников.

остановлюсь на втором варианте, так как его я и реализовывал на своей системе:

1. идем сюда http://soft-switch.org/ и читаем как собрать и установить сие чудо,
устанавливается просто, понадобится

gcc.i386                                   4.1.2-54.el5                installed
libgcc.i386                                4.1.2-54.el5                installed

а дальше все как обычно, проверяем whereis spandsp.so или libspandsp.so.

2. далее надо сделать из библиотеки модуль для астериска, берем res/res_fax_spandsp.c
из подходящих нам исходников, у меня был
res_fax_spandsp.c?revision=370667 и выполняем для него такие операции...
3.

gcc -g -Wall -D_REENTRANT -D_GNU_SOURCE -fPIC -DAST_MODULE=\"res_fax_spandsp\"
   -c -o res_fax_spandsp.o res_fax_spandsp.c

4.

gcc -shared -Xlinker -x /usr/lib/libspandsp.so -o res_fax_spandsp.so  
res_fax_spandsp.o

5. кладем получившийся модуль res_fax_spandsp.so в каталог модулей астериска -
у меня он /usr/lib/asterisk/modules
6. убеждаемся что

[modules]
autoload=yes

7. делаем amportal restart
8. проверяем подключился ли модуль.

далее переходим к dial plan.

1. правим extensions_custom.conf
у меня он выглядит следующим образом брал отсюда
http://asterisk-system.ru/asterisk/nastraivaem-asterisk-1-8-na-priem-i-o...

чтобы изнутри звонить было не на 666, любой можете указать вместо 5000

exten => 5000,1,NoOp(-------------------Call from ${CALLERID(number)} to ${EXTEN}------------------)
exten => 5000,n,Goto(fax-rx,receive,1)

контекст для custom dectination

[fax001]
exten => fax,1,NoOp(-------------------Call from ${CALLERID(number)} to ${EXTEN}------------------)
exten => fax,n,Goto(fax-rx,receive,1)

контекст принимающий факс

[fax-rx]
 exten => receive,1,NoOP(------------------- FAX from ${CALLERID(number)} ------------------)
 exten => receive,n,Answer()
 exten => receive,n,Wait(2)
 exten => receive,n,Set(FILENAME=fax-${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}-${CALLERID(number)})
 exten => receive,n,Set(FAXFILE=/var/spool/asterisk/fax/receive/${FILENAME}.tif)
 exten => receive,n,Set(FAXOPT(headerinfo)=Received by ${CALLERID(number)} ${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M)})
 exten => receive,n,Set(FAXOPT(localstationid)=OFFICE)
 exten => receive,n,Set(FAXOPT(maxrate)=14400)
 exten => receive,n,Set(FAXOPT(minrate)=2400)
 exten => receive,n,NoOp(FAXOPT(ecm) : ${FAXOPT(ecm)})
 exten => receive,n,NoOp(FAXOPT(headerinfo) : ${FAXOPT(headerinfo)})
 exten => receive,n,NoOp(FAXOPT(localstationid) : ${FAXOPT(localstationid)})
 exten => receive,n,NoOp(FAXOPT(maxrate) : ${FAXOPT(maxrate)})
 exten => receive,n,NoOp(FAXOPT(minrate) : ${FAXOPT(minrate)})
 exten => receive,n,NoOp(**** RECEIVING FAX : ${FAXFILE} ****)
 exten => receive,n,ReceiveFAX(${FAXFILE})
 exten => receive,n,Hangup()
 exten => h,1,NoOP(------------------- FAX from ${CALLERID(number)} ------------------)
 exten => h,n,NoOP(------------------- STATUS ${FAXSTATUS} ${FAXERROR} ------------------)
 exten => h,n,system(path-to-/fax-process.pl --to mail@addr --from mail@addr --subject "Fax prineat s ${URIENCODE(${CALLERID(number)})} ${URIENCODE(${CALLERID(name)})}" --attachment ${FILENAME}.pdf --type application/pdf --file ${FAXFILE});

скачать скрипт fax-process.pl: