- Комментировать
- 186934 reads
Метки: Asterisk, FreePBX
чтобы настроить прием факса на email в Астериске надо многое сделать:
начать надо с проверки версии установленных в системе пакетов, выглядеть это должно примерно так:
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 в системе:
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/ и читаем как собрать и установить сие чудо,
устанавливается просто, понадобится
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.
-c -o res_fax_spandsp.o res_fax_spandsp.c
4.
res_fax_spandsp.o
5. кладем получившийся модуль res_fax_spandsp.so в каталог модулей астериска -
у меня он /usr/lib/asterisk/modules
6. убеждаемся что
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,n,Goto(fax-rx,receive,1)
контекст для custom dectination
exten => fax,1,NoOp(-------------------Call from ${CALLERID(number)} to ${EXTEN}------------------)
exten => fax,n,Goto(fax-rx,receive,1)
контекст принимающий факс
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:
# Small program to process a tiff file into a PDF and email it.
#
# Distributed under the terms of the GNU General Public License (GPL) Version 2
# Copyright 2005 by Rob Thomas (xrobau@gmail.com)
use MIME::Base64;
use Net::SMTP;
# Default paramaters
my $to = "fax\@asterisk.org";
my $from = "fax\@";
my $subject = "Fax received";
my $ct = "application/x-pdf";
my $file = undef;
my $attachment = undef;
# Care about the hostname.
my $hostname = `/bin/hostname`;
chomp ($hostname);
if ($hostname =~ /localhost/) {
$hostname = "asterisk.org";
}
$from .= $hostname;
# Usage:
my $usage="Usage: --file filename [--attachment filename] [--to email_address]
[--from email_address] [--type content/type] [--subject \"Subject Of Email\"]";
# Parse command line..
while (my $cmd = shift @ARGV) {
chomp $cmd;
# My kingdom for a 'switch'
if ($cmd eq "--to") {
my $tmp = shift @ARGV;
$to = $tmp if (defined $tmp);
} elsif ($cmd eq "--subject") {
my $tmp = shift @ARGV;
if ($tmp =~ /\^(\")|^(\')/) {
# It's a quoted string
my $delim = $+; # $+ is 'last match', which is ' or "
$tmp =~ s/\Q$delim\E//; # Strip out ' or &q