Servidor de Fax com Dahdi Hylafax SNEP Debian Squeeze


>> Salve galera!!!

Pelas estradas da vida precisei configurar um Servidor de Fax, e resolvi compartilhar com vocês todo o processo. Acredito que com esse conteúdo, ira complementar muitos outros how-to's; E qualquer dúvida estamos aí.



Nesse caso, vou mostrar pra vocês a instalação do dahdi, algumas dicas do asterisk, e do SNEP que é uma ótima ferramenta de administração na área de Telefonia VoIP, etc.



--------------------------------------------------------------------------------------
Descrição:            Servidor Fax
Sistema    Op.:     Debian + SNEP
Serv Fax:             Hylafax 2:6.0.5-4.1 + iaxmodem 1.2.0~dfsg-1
Placa:                   FXO (wcfxo+ 1057:5608 Wildcard X100P)
Drivers da placa:  DAHDI Version: 2.6.1
---------------------------------------------------------------------------------------



Agradeço aos meus amigos: Jean, Vila, Daian, Vincent, Luan pela ajuda.



Referencias para leitura, esclarecimentos e duvidas:
https://www.google.com.br/
https://wiki.asterisk.org/wiki/display/AST/Building+and+Installing+DAHDI
http://www.sneplivre.com.br/pt-br/forum/6-asterisk/3240-dahdi-versao-snep-138
http://www.dacod.com.br/?p=66
http://www.dacod.com.br/?p=51
http://wiki.openvox.cn/index.php/OpenVox_D110P_Asterisk_1.8_Dahdi_en
http://www.sneplivre.com.br/en/forum/7-interface-web-do-snep/2261-como-receber-e-enviar-fax-utilizando-o-snep
Download do Snep:  http://www.sneplivre.com.br/pt-br/downloads
hyla: http://www.hylafax.org/site2/download.html












Instalação do Dahdi


*Com o tempo, descobri que vc tem q instalar primeiro o dahdi, para que quando for instalar o asterisk (compilar), tenha a opção do chan_dahdi no menuselect.


Você pode instalar ele pelo APT:


# apt-get install dahdi-linux dahdi dahdi-source

ou pode compilar(recomendado):

Sempre que for compilar, deve-se ter alguns programas instalados. Esses devem resolver as dependencias:
apt-get -y install bison openssl libssl-dev libusb-dev fxload libasound2-dev libc6-dev libnewt-dev libncurses5-dev zlib1g-dev gcc g++ make doxygen module-assistant build-essential



Compilando:


* Descompacte os arquivos

sneppbx:/usr/src# wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-current.tar.gz


wget http://downloads.asterisk.org/pub/telephony/libpri/releases/libpri-1.4.11.4.tar.gz
# tar -xvf libpri-1.4.4.tar.gz 
# tar -xvf dahdi-linux-complete-current.tar.gz



* Compilando o libpri


compilar a LibPRI
A LibPRI é dependência para o dahdi.
LibPRI é feito da seguinte forma:
#wget http://downloads.asterisk.org/pub/telephony/libpri/releases/libpri-1.4.11.4.tar.gz

#cd libpri-1.4.11.4
#make
#make install
#cd ..




# cd /usr/src
# apt-get install linux-headers-`uname -r`
# ln -s /usr/src/linux-headers-`uname -r` /usr/src/linux




* Compilando dahdi

# cd /usr/src/dahdi-linux-complete-2.6.0+2.6.0/
# make 
# make install
# make config





* Dahdi Tools

#wget http://downloads.asterisk.org/pub/telephony/dahdi-tools/releases/dahdi-tools-2.4.0.tar.gz
#tar -zxvf dahdi-tools-2.4.0.tar.gz
#.configure
# make
# make install
# make config


Pronto!


Verificando os modulos:


sneppbx:~# lsmod |grep dahd
dahdi_echocan_mg2       3825  2 
dahdi                 174824  8 dahdi_echocan_mg2,wcfxo
crc_ccitt               1039  1 dahdi










Compilando o asterisk

Nesse caso, baixei e compilei o asterisk versão:

http://downloads.asterisk.org/pub/telephony/asterisk/releases/
asterisk-1.4.33.1

Atenção a algumas coisas:

apt-get install build-essential  (para poder compilar)

* Selecionar em "Channel Drivers" a opção "chan_dahdi"  conforme IMG1
Após isso continue com a compilação...
--> mas lembre-se que apos ter concluído a instalação do asterisk, não instale o Samples', pois ira substituir as configurações do Snep conforme IMG2.


sneppbx:/usr/src# tar zxvf asterisk-1.4.33.1.tar.gz

sneppbx:/usr/src# cd asterisk-1.4.33.1


# ./configure

Apos o configure, com o make menuselect, selecione o dahdi:
# make menuselect
# make 


 +--------- Asterisk Build Complete ---------+
 + Asterisk has successfully been built, and
 + can be installed by running:            
 +                                        
 +               make install              
 +-------------------------------------------+

Apos a tela acima, execute :

sneppbx:/usr/src/asterisk-1.4.33.1# make install







                                          IMG1





IMG 2:




Apos compilar (instalar) os asterisk, inicie ele e veja alguns status:


sneppbx*CLI> unload chan_dahdi.so



sneppbx*CLI> load chan_dahdi.so
== Registered application 'DAHDISendKeypadFacility'
  == Registered application 'ZapSendKeypadFacility'
[Oct 27 22:58:53] ERROR[23006]: chan_dahdi.c:12241 setup_dahdi: Unable to load chan_dahdi.conf
  == Registered channel type 'DAHDI' (DAHDI Telephony Driver w/PRI)
  == Manager registered action DAHDITransfer
  == Manager registered action DAHDIHangup
  == Manager registered action ZapHangup
 (------ comprimindo saida -----)
  == Manager registered action DAHDIDNDoff
  == Manager registered action ZapDNDoff
  == Manager registered action DAHDIRestart
  == Manager registered action ZapRestart
 Loaded chan_dahdi.so => (DAHDI Telephony w/PRI)


sneppbx*CLI> dahdi show status 
Description                              Alarms     IRQ        bpviol     CRC4      
Wildcard X100P Board 1                   RED        0          0          0         
Wildcard X100P Board 2                   RED        0          0          0   





Configurando o Dahdi
Apos ter instalado o Dahdi, vamos a configuração.

Tem alguns comandos que vão nos ajudar bastante.




1º # dahdi_genconf - vai gerar o system.conf conforme seu hardware

 

2º # dahdi_cfg    -  Para mostrar como estão as configurações do modulo

sneppbx:~# dahdi_cfg -vvv
DAHDI Tools Version - 2.6.1
DAHDI Version: 2.6.1
Echo Canceller(s): HWEC, MG2
Configuration
======================
Channel map:
Channel 01: FXS Kewlstart (Default) (Echo Canceler: mg2) (Slaves: 01)
Channel 02: FXS Kewlstart (Default) (Echo Canceler: mg2) (Slaves: 02)
2 channels to configure.
Setting echocan for channel 1 to mg2
Setting echocan for channel 2 to mg2


3º # dahdi_hardware   - Mostra o hardware da placa reconhecida pelo dahdi

sneppbx:~# dahdi_hardware
pci:0000:00:08.0     wcfxo+       1057:5608 Wildcard X100P
pci:0000:00:0a.0     wcfxo+       1057:5608 Wildcard X100P





4 # dahdi_test 

sneppbx:~# dahdi_test 
Opened pseudo dahdi interface, measuring accuracy...
99.988% 99.982% 99.987% 99.987% 99.987% 99.988% 99.986% 99.987%
^C
--- Results after 9 passes ---
Best: 99.988% -- Worst: 99.982% -- Average: 99.986590%
Cummulative Accuracy (not per pass): 99.987

* Não esqueça de dar o ctrl +c, que nem eu fiquei uma meia hora com esse comando executando.  hahahaha

5 # dahdi_scan

sneppbx:~# dahdi_scan 
[1]
active=yes
alarms=RED
description=Wildcard X100P Board 1
name=WCFXO/0
manufacturer=Digium
devicetype=Wildcard X100P
type=analog
port=1,FXO
[2]
active=yes
alarms=RED
description=Wildcard X100P Board 2
name=WCFXO/1
manufacturer=Digium
irq=0
type=analog
port=2,FXO



Continuação: 



O Dahdi assim como o software antigo Zaptel, trabalha com a logica de kernel modulo e channel driver. 

O arquivo /etc/dahdi/system.conf passa os parâmetros de configuração para o modulo do kernel que controla sua placa (sinalização, canais, clock, etc).

Já o arquivo chan_dadhi.conf, você ira configurar os parâmetros do channel driver do asterisk.

Logo abaixo teremos uma configuração simples para uma placa
Clone (modem Ambient ou Intel)     ou      Digium X100P  de 'um canal'

Faça backup do seu system.conf e crie um novo mais ou menos como esta abaixo:

/etc/dahdi/system.conf
# Configuração simples para um canal
loadzone = br
defaultzone = br
# Lembrar que a sinalização de FXO é FXS e a de FXS é FXO, portanto FXSKS
fxsks = 1 

echocanceller=mg2,1
# Dependendo do modulo que vc tem para Echo canceller
#echocanceller=oslec,1    



Verifique se no arquivo /etc/dahdi/modules exite o modulo wcfxo este arquivo se encarrega de subir no dahdi os módulos do kernel referentes a sua placa (tem outros módulos comente os que não vai usar). 
* Verifique qual o modulo vc deve usar com sua placa*

No /etc/asterisk/chan_dahdi.conf (não se preocupe como dahdi_channels.conf esse arquivo é apenas um include para separa a configuração de canais do restos):


vim /etc/asterisk/chan_dahdi.conf
[channels]
language=pt_BR
usecallerid=yes
hidecallerid=no
callwaiting=yes
usecallingpres=yes
callwaitingcallerid=yes
threewaycalling=yes
transfer=yes
canpark=yes
cancallforward=yes
callreturn=yes
;# cancelamento de eco ajuste com sabedoria e desde que tenha ativado no system.conf do dahdiechocancel=yes
echocancelwhenbridged=no
echotraining=250
;#
faxdetect=both
;# Em placas Analógicas o ganho é muito importante para evitar eco e para controlar o volume 
rxgain=0.0
txgain=0.0 
callgroup=1
pickupgroup=1
relaxdtmf=yes
busydetect=yes 
busycount=3
immediate=no
;# canais e grupos
signalling=fxs_ks
group=0
;# Contexto que você vai usar no Snep
context=default 
channel => 1

;#
;#OBS se tiver mais q um canal, coloque o channel => 1, assim :  channel => 1,2   ou conforme sua necessidade

Pronto, pare os serviços, inicie novamente;

Faça o teste:



sneppbx*CLI> dahdi show channels 

   Chan Extension  Context         Language   MOH Interpret       

 pseudo            default                    default             

      1            default         pt_BR      default             
      2            default         pt_BR      default   


sneppbx*CLI> dahdi show status 
Description                              Alarms     IRQ        bpviol     CRC4      
Wildcard X100P Board 1                   RED        0          0          0         
Wildcard X100P Board 2                   RED        0          0          0    


Apos conectar a linha telefonica deve ficar com um OK em Alarms.


Se precisar recarregar o modulo:
sneppbx*CLI> module unload chan_dahdi.so 
sneppbx*CLI> module load chan_dahdi.so 



e depois ir no Snep e configurar um tronco como TDM/Virtual e colocar como string de discagem DAHDI/g0

o g0 é o nome do grupo que criou no arquivo chan_dahdi.conf









INSTALAÇÃO HYLAFAX E IAXMODEM:

Pode ser instalado via APT (Pois a ultima versão já esta disponivel nos repositórios por default)
apt-get install hylafax-server iaxmodem

ou pode-se baixar os pacotes e compilar normalmente, não tem muito segredo por isso não vou ocupar espaço aqui com isso;     =)



Configurações do IAX


sneppbx:~# cd /etc/iaxmodem/
sneppbx:/etc/iaxmodem# ls
ttyIAX  ttyIAX1




sneppbx:/etc/iaxmodem# cat ttyIAX
device    /dev/ttyIAX
owner     uucp:uucp
mode      660
port      4570
refresh   60
server    127.0.0.1
peername  iaxmodem
secret    76667666
cidname   FAX
cidnumber 4832405614
codec     alaw




sneppbx:/etc/iaxmodem# /etc/init.d/iaxmodem stop
sneppbx:/etc/iaxmodem# /etc/init.d/iaxmodem start






Configurando o IAX no Asterisk:


sneppbx:~# cd /etc/asterisk/


Adicione no final do arquivo: 
sneppbx:/etc/asterisk# vim iax.conf 
[iaxmodem]
context = default
host = dynamic
username = iaxmodem  (user)
secret = 76667666   (senha)
type = friend
disallow = all
allow = alaw
qualify = yes
requirecalltoken = no

[iaxmodem1]
context = default
host = dynamic
username = iaxmodem1
secret = 76667666
type = friend
disallow = all
allow = alaw
qualify = yes
requirecalltoken = no



Configuração do ramal 'fax' no Snep:
Vá em Configurações, ramais, e inclua um ramal.

Faça conforme a imagem abaixo:



Crie uma nova regra conforme abaixo:



Adicionar as ações abaixo:





Pronto! Com essa configuração, o Snep estará pronto para entrada de fax.






Configurações do Hylafax:


sneppbx:/etc/iaxmodem# cd /etc/hylafax/
sneppbx:/etc/hylafax# ls -l
total 100
-rw-r--r--  1 root root   211 Jun 19  2010 config
-rw-r--r--  1 root root   805 Out 26 19:03 config.ttyIAX
-rw-r--r--  1 root root   805 Out 26 19:52 config.ttyIAX1
-rw-r--r--  1 root root 10368 Set 15  2010 cover.templ
-rw-r--r--  1 root root  1855 Set 15  2010 dialrules
-rw-r--r--  1 root root  2397 Set 15  2010 dialrules.europe
-rw-r--r--  1 root root  2093 Set 15  2010 dialrules.sf-ba
-rw-r--r--  1 root root  7384 Dez 10  2010 faxcover.ps
-rw-r--r--  1 root root   167 Set 15  2010 faxmail.ps
-rw-r--r--  1 root root  2401 Set 15  2010 hfaxd.conf
-rw-------  1 uucp uucp   257 Out 26 21:24 hosts.hfaxd
-rw-r--r--  1 root root  1347 Out 26 19:03 hyla.conf
-rw-r--r--  1 root root 14072 Set 15  2010 lutRS18.pcf
-rw-r--r--  1 root root  3247 Out 26 00:06 pagesizes
-r--r--r--  1 root root  1156 Out 26 00:34 setup.cache
-r--r--r--  1 root root   780 Out 26 00:34 setup.modem
drwxr-xr-x 11 root root   103 Out 26 00:06 templates
-rw-r--r--  1 root root  8801 Dez 10  2010 typerules






# faxsetup

O Faxsetup fará varias perguntas
ACoutry code [1]?55
Area code [000]?051
Serial port that modem is connected to []?ttyIAX0
Phone number of fax modem []?+55.51.3333.0001
Local identification string (for TSI/CIG) {"NothingSetup"]?NomedoFax
NOTA: O Fax's chegarão no seguinte diretório: /var/spool/hylafax/recvq



sneppbx:/etc/hylafax# cat config.ttyIAX
CountryCode:          55
AreaCode:             048
FAXNumber:            4832306516
LongDistancePrefix:   0
InternationalPrefix:  00
DialStringRules:      etc/dialrules
ServerTracing:        0xFFF
SessionTracing:       0xFFF
RecvFileMode:         0600
LogFileMode:          0600
DeviceMode:           0600
RingsBeforeAnswer:    1
SpeakerVolume:        off
GettyArgs:            "-h %l dx_%s"
LocalIdentifier:      "MINHAEMPRESA"
TagLineFont:          etc/lutRS18.pcf
TagLineFormat:        "De %%l|%c|Pagina %%P de %%T"
MaxRecvPages:         200
ModemType:            Class1
Class1AdaptRecvCmd:   AT+FAR=1
Class1TMConnectDelay: 400
ModemResetCmds:       AT+VCID=1
PagerTTYParity:       none
CallIDPattern:        "NMBR="
CallIDPattern:        "NAME="
CallIDPattern:        "ANID="
CallIDPattern:        "NDID="





sneppbx:/etc/hylafax# cat config.ttyIAX1 
CountryCode:          55
AreaCode:             048
FAXNumber:            4832404613
LongDistancePrefix:   0
InternationalPrefix:  00
DialStringRules:      etc/dialrules
ServerTracing:        0xFFF
SessionTracing:       0xFFF
RecvFileMode:         0600
LogFileMode:          0600
DeviceMode:           0600
RingsBeforeAnswer:    1
SpeakerVolume:        off
GettyArgs:            "-h %l dx_%s"
LocalIdentifier:      "MINHAEMPRESA"
TagLineFont:          etc/lutRS18.pcf
TagLineFormat:        "De %%l|%c|Pagina %%P de %%T"
MaxRecvPages:         200
ModemType:            Class1
Class1AdaptRecvCmd:   AT+FAR=1
Class1TMConnectDelay: 400
ModemResetCmds:       AT+VCID=1
PagerTTYParity:       none
CallIDPattern:        "NMBR="
CallIDPattern:        "NAME="
CallIDPattern:        "ANID="
CallIDPattern:        "NDID="




marcosabadi (site):

# faxsetupO Faxsetup fará varias perguntas, eu vou mencionar apenas as básicas para o funcionamento.
Coutry code [1]?55
Area code [000]?051
Serial port that modem is connected to []?ttyIAX0
Phone number of fax modem []?+55.51.3333.0001
Local identification string (for TSI/CIG) {"NothingSetup"]?NomedoFax
NOTA: O Fax's chegarão no seguinte diretório: /var/spool/hylafax/recvq

Para Enviar por E-mail, crie um arquivo na pasta /var/spool/hylafax/etc com o Nome FaxDispatch

Nesse arquivo coloque o seguinte:

FILETYPE=tif;
SENDTO=seuemail@dominio.com.br;

Se quiser ter varios fax`s e e-mail diferentes:

case "$DEVICE" in
ttyFax001) SENDTO=email001@domino.com;; # todos os faxes recebidos em ttyFax001
ttyFax002) SENDTO=email002@dominio.com;; # todos os faxes recebidos em ttyFax002
esac



Para certificar que o serviço está rodando execute o comando abaixo:
# faxstat -a -s

onde a seguinte mensagem deverá aparecer:

HylaFAX scheduler on : Running
Modem ttyS2 (): Running and idle


Adicione um usuário com o nome faxuser e sem senha para fazer alguns testes: 
# faxadduser -u 100 faxuser -p 123456

O login dos usuários serão amrazenado no arquivo abaixo:
/var/spool/hylafax/etc/hosts.hfaxd





>>> Segue abaixo algumas questoes que Marcos Abadi compartilho em seu blog:

Vou postar também algumas dúvidas que tive antes de implementar
> Vamos ver se eu entendi. > Para receber, a pessoa liga para meu asterisk e no menu ela escolhe o ramal do fax e recebe o sinal e o arquivo cai na pasta /var/spool/hylafax/recvq
Correto


> Como faço para buscar o arquivo do fax no spooler? >
Você pode pegar o arquivo via SSH, Samba ou enviar por e-mail.


> Como faço para enviar um fax da minha aplicação, por exemplo, do word, adobe. Tenho que instalar algum software na minha estação? > Se eu tiver que mandar para uma pessoa que tem um aparelho de fax como fica? e eu não tenho o aparelho de fax e quero mandar do meu word por exemplo para uma pessoa tem o aparelho? como fica?>
Existem muitos programas para fazer isso. Creio que o mais fácil seria esse:http://winprinthylafax.sourceforge.net/
A pessoa que receberá o fax não faz idéia de como você está enviando.

------------------------------------------------------------------------------------
Olá,

Esse arquivo recebido que está no spooler do Hylafax pode ser
buscado por programas específicos que se conectam ao Hylafax e inclusive
enviam e mostram a situação do servidor, tal como o Gfax Facsimile. Pode
ainda configurar o Hylafax para enviar este arquivo por e-mail.

Para enviar, use um programa que faça isso, geralmente aceitam
arquivos texto, pdf e ps, ou uma impressora virtual que te forneça tal
recurso interagindo com o servidor Hylafax. Uma outra forma de enviar é
mandar por e-mail, onde o corpo será uma folha de rosto e um arquivo em
anexo será o restante, geralmente texto, pdf ou ps, ficando no assunto
o número do telefone, e então tratar esse e-mail de forma a enviá-lo
para o servidor Hylafax, um pouco trabalhoso, mas é uma boa alternativa.

Existem ainda softphones que enviam e/ou recebem fax, mas nunca
vi isso funcionar na prática. Com esses, não precisa de IAXmodem e nem
de Hylafax.

---------------------------------------------------------------------------------
Use o wintprinthylafax, ele instala uma porta virtual, crie uma impressora com suporte a PS (Appler Laser por exemplo), configure a porta com user/senha e host do seu servidor hylafax...
assim, q uando mandar imprimir ele vai te pedir o telefone, forneça o telefone e o asterisk ira fazer o resto, caso ja esteja configurado

Qualnto ao spooler dos arquivos recebidos, todos eles ficam no diretorio citada pelo nosso colega, no meu caso configurei o hylafax para converte-lo em PDF e enviar por email...



referencias:
http://marcosabadi.blogspot.com.br/2008/10/instalando-hylafax-e-integrando-ao.html







Comentários