Trucos Asterisk, Entrega número 3

Improvisa :: Informática :: Trucos Asterisk, Entrega número 3En esta nueva entrega de trucos, realizados con la magnífica centralita Asterisk , os enseñaremos a montar un servidor de fax que despachará todos los que recibamos a la cuenta de mail que le digamos, no nos hará falta nada más que instalar un par de paquetes y tendremos habilitado en nuestra centralita Asterisk el envio y la recepcion de faxes, en todos los numeros de telefono que tenga nuestra centralita.

El manual se basará en Iaxmodem, modem virtual que se logueara como extension a nuestro Asterisk PBX e Hylafax.

Manos a la obra ………­

 

Como he dicho antes el sistema se basara en la utilizacion de un modem virtual llamado iaxmodem y el servidor de faxes Hylafax.

En este manual supondremos que habeis creado la centralita como dice el manual de Improvisa, es decir con FreePBX.

Alta extensión en FreePBX 

Daremos de alta una nueva extensión IAX y le daremos un nuevo numero, password. Entrad en la configuracion de FreePBX y dadla de alta, supongamos que habeis dejado algo asi:

username=401
type=friend
secret=401_iaxmodem
qualify=no
notransfer=yes
host=dynamic
context=from-internal
callerid="Fax" <401>
allow=all

Actualización General Settings de FreePBX:

Una vez creada la extensión debemos decirle a FreePBX que debe detectar los Faxes que nos entren, debemos decirselo en General Settings, en el portal de configuracion y ahí configuraremos la nueva extension, 401 Fax.

Zapata.conf:

Despues de haber acabado con FreePBX, debemos configurar el archivo /etc/asterisk/zapata.conf y comprobar que tenemos la linea faxdetect=incoming, sino la tenemos ponedla antes de la definición de los canales.

Instalación. configuración y pruebas de IaxModem:

Muy bien ya tenemos la parte de FreePBX y la de Asterisk montada.

Ahora Instalaremos Iaxmodem, el modem virtual iax.

centralita:~# apt-get install iaxmodem

Configuremos el nuevo modem iax:

centralita:~# vi /etc/iaxmodem/ttyIAXMODEM

device /dev/ttyIAXMODEM
owner asterisk:asterisk
mode 660
port 45699
refresh 300
server 127.0.0.1
peername 401
secret 401_iaxmodem
cidname IAX Modem 1
cidnumber 401
codec slinear

Si ya hemos dado de alta la extension comprobemos que se loguea contra la centralita:

centralita:~# iaxmodem ttyIAXMODEM

[2008-03-14 14:00:07] Modem started
[2008-03-14 14:00:07] Setting device = ‘/dev/ttyIAXMODEM’
[2008-03-14 14:00:07] Setting owner = ‘asterisk:asterisk’
[2008-03-14 14:00:07] Setting mode = ‘660’
[2008-03-14 14:00:07] Setting port = 45699
[2008-03-14 14:00:07] Setting refresh = 300
[2008-03-14 14:00:07] Setting server = ‘127.0.0.1’
[2008-03-14 14:00:07] Setting peername = ‘401’
[2008-03-14 14:00:07] Setting secret = ‘401_iaxmodem’
[2008-03-14 14:00:07] Setting cidname = ‘IAX Modem 1’
[2008-03-14 14:00:07] Setting cidnumber = ‘401’
[2008-03-14 14:00:07] Setting codec = slinear
[2008-03-14 14:00:07] Opened pty, slave device: /dev/pts/2
[2008-03-14 14:00:07] Removed old /dev/ttyIAXMODEM
[2008-03-14 14:00:07] Created /dev/ttyIAXMODEM symbolic link
Restart 0
[2008-03-14 14:00:07] Registration completed successfully.

Perfecto si no sale esto, salid del proceso con  Ctrl C e indiquemosle al archivo /ety/inittab que debe iniciar iaxmodem, añadid al final del archivo /etc/inittab la siguiente linea:

iax:2345:respawn:/usr/bin/iaxmodem ttyIAXMODEM&> /var/log/iaxmodem-ttyIAXMODEM

Para que vuelva a cargar el fichero /etc/inittab sin tener que reiniciar pondremos este comando:

centralita:~# kill -HUP 1

Podeis ver que todo funciona bien poniendo:

centralita:~# asterisk -rvvvvvvv
  == Parsing ‘/etc/asterisk/asterisk.conf’: Found
  == Parsing ‘/etc/asterisk/extconfig.conf’: Found
Asterisk 1.2.26.2, Copyright (C) 1999 – 2007 Digium, Inc. and others.
Created by Mark Spencer <markster@digium.com>
Asterisk comes with ABSOLUTELY NO WARRANTY; type ‘show warranty’ for details.
This is free software, with components licensed under the GNU General Public
License version 2 and other licenses; you are welcome to redistribute it under
certain conditions. Type ‘show license’ for details.
====================================
Connected to Asterisk 1.2.26.2 currently running on centralita (pid = 3524)
Verbosity is at least 8
    — Remote UNIX connection
centralita*CLI> iax2 show peers
Name/Username    Host                 Mask             Port          Status   
401              127.0.0.1       (D)  255.255.255.255  45699         OK (3 ms)
1 iax2 peers [1 online, 0 offline, 0 unmonitored]
centralita*CLI>

Instalción de SpanDSP:


Para continuar debemos instalar la libreria spandsp para que asterisk sea capaz de diferenciar llamadas de faxes y de esa forma pasarselo a la extension correcta.

centralita:~# apt-get install libspandsp-dev

Esto nos instalará spandsp y sus dependecias

Instalación, configuración y pruebas de Hylafax:


Es hora de instalar hylafax

centralita:~# apt-get install hylafax-server hylafax-client hylafax-doc mgetty mgetty-voice gs gsfonts gs-common libtiff4 libtiff-tools libtiff4-dev

Perfecto para hacer funcionar a hylafax con el nuevo modem IAXMODEM, debemos tener arrancado iaxmodem y logueado contra la centralita asterisk en su extension 401.

Para la configuracion de Hylafax os acosejo que hagais lo siguiente, lanzad en una nueva consola el iaxmodem y en otra el faxsetup, cuando os pregunte en que tty quereis que escuche hylafax debeis decirle ttyIAXMODEM, os dareis cuenta que cuando le digais esto tirará el proceso, volved a levantarlo con iaxmodem ttyIAXMODEM.

Rellenad segun sean vuestras opciones, debies prestar atención al modem tty.

centralita:~# faxsetup

Al final os volvera a preguntar si quereis añadir otro modem tty, decidle que no.

Os habra dejado un archivo en /etc/hylafax/config.ttyIAXMODEM, algo asi:

centralita:~# vi /etc/hylafax/config.ttyIAXMODEM

# $Id: iaxmodem,v 1.1 2006/04/02 23:18:30 darren Exp $

#
# prototype config for the IAXmodem softmodem which uses
# the spandsp soft-DSP library
#

#
CountryCode:            0034
AreaCode:               959
FAXNumber:              267758
LongDistancePrefix:     00
InternationalPrefix:    00
DialStringRules:        etc/dialrules
ServerTracing:          1
SessionTracing:         11
RecvFileMode:           0600
LogFileMode:            0600
DeviceMode:             0600
RingsBeforeAnswer:      1
SpeakerVolume:          off
GettyArgs:              "-h %l dx_%s"
LocalIdentifier:        TUEMPRESA
TagLineFont:            etc/lutRS18.pcf
TagLineFormat:          "From %%l|%c|Page %%P of %%T"
MaxRecvPages:           50
#

#
#
# Modem-related stuff: should reflect modem command interface
# and hardware connection/cabling (e.g. flow control).
#
ModemType:              Class1          # use this to supply a hint

#
# The modem is taken off-hook during initialization, and then
# placed back on-hook when done to prevent glare.
#
ModemResetCmds:         "ATH1
AT VCID=1"       # enables CallID display
ModemReadyCmds:         ATH0

Class1AdaptRecvCmd:     AT FAR=1
Class1TMConnectDelay:   400             # counteract quick CONNECT response
Class1RMQueryCmd:       "!24,48,72,96"  # V.17 fast-train recv doesn’t work well

CallIDPattern:          "NMBR="
CallIDPattern:          "NAME="
CallIDPattern:          "ANID="
CallIDPattern:          "NDID="
# Uncomment these if you really want them, but you probably don’t.
#CallIDPattern:          "DATE="
#CallIDPattern:          "TIME="

Reiniciaemos el servicio con:

centralita:~# /etc/init.d/hylafax restart

Podemos comprobar que todo va bien poniendo:

centralita:~# ps ax
 5730 ?        Ss     0:00 /usr/sbin/faxq
 5732 ?        Ss     0:00 /usr/sbin/hfaxd -i 4559
 5740 pts/1    S      0:00 /usr/sbin/faxgetty ttyIAXMODEM

Perfecto Hylafax esta utilizando el modem

Nos falta decirle a Hylafax que debe hacer con los faxes recibidos, mi opción preferida es enviarlos directamente al mail en formato pdf, de esta forma nos olvidaremos de la maldita publicidad y ahorrar papel, que la Madre Tierra nos lo agradecerá.

Debemos crear un archivo en /etc/hylafax llamado FaxDispatch, hagamoslo:

centralita:~# vi /etc/hylafax/FaxDispatch

Y pondremos las siguientres opciones:

FILETYPE=pdf;
SENDTO=tumail@tudominio.com;

Reiniciad de nuevo el servicio:

centralita:~# /etc/init.d/hylafax restart

Con esto ya tenemos recibiendo faxes a nuestro Hylafax, para el envio de faxes podemos utilizar cualquier sistema de envio por ejemplo  winprinthylafax, nos añadirá una impresora en Windows que mandará directamente el fax por la extensión que hemos configurado.

Para que Asterisk envie los faxes debemos crear el contexto y asociar las extensiones IAX a este nuevo contexto:

[from-hylafax]
exten => _X.,1,Set(__SIP_CODEC=alaw)
exten => _X.,2,Goto(from-internal,${EXTEN},1)

 

Problemas conocidos: 

Haciendo este breve manual, me he dado cuenta que no funciona del todo con tarjetas clonicas OpenVox, si que lo hace a la perfección con tarjetas Billion.

El problema que me da en /var/spool/hylafax/log/cualquier_intento_de_envio es:

Mar 25 13:19:40.46: [ 3629]: –> [10:NO CARRIER]
Mar 25 13:19:40.46: [ 3629]: MODEM No carrier
Mar 25 13:19:40.46: [ 3629]: RECV FAX: No answer (T.30 T1 timeout)
Mar 25 13:19:40.46: [ 3629]: RECV FAX: end
Mar 25 13:19:40.46: [ 3629]: SESSION END

Si alquien consiguiese resolverlo sería un gran placer recibir la solución 😉

Pues nada creo que he encontrado la solución para mi asterisk 1.2.26

Tendremos que recompilar asterisk sin ningún miedo.

Debemos bajarnos el siguiente archivo :

centralita:~#  cd /usr/src/

centralita:/usr/src#  wget http://www.improvisa.com/descargas/app_nv_faxdetect.c

centralita:/usr/src/#  cp app_nv_faxdetect.c asterisk-1.2.26/apps

centralita:/usr/src/#  cd asterisk-1.2.26/apps

centralita:/usr/src/asterisk-1.2.26/apps# vi Makefile

Buscaremos donde define la variable APPS y debajo de Experimental things por ejemplo añadiremos la siguiente linea:

APPS =app_nv_faxdetect.so

Guardaremos el archivo y recompilaremos asterisk, asumiendo que seguisteis mi documento para instalar asterisk, de la siguiente forma:

centralita:/usr/src/asterisk-1.2.26/apps# amportal stop

centralita:/usr/src/asterisk-1.2.26/apps# cd /usr/src/asterisk-1.2.26

centralita:/usr/src/asterisk-1.2.26# make clean

centralita:/usr/src/asterisk-1.2.26# make

centralita:/usr/src/asterisk-1.2.26# make install

Iniciaremos de nuevo amportal:

centralita:/usr/src/asterisk-1.2.26# amportal start

Comprobemos que nos ha cargado la nueva aplciación con el siguiente comando:

centralita:/usr/src/asterisk-1.2.26# asterisk -rvvvvvv

centralita*CLI> show application NVFaxDetect

y debe aparecernos algo asi:

  -= Info about application ‘NVFaxDetect’ =-

[Synopsis]
Detects fax sounds on all channel types (IAX and SIP too)

[Description]
  NVFaxDetect([waitdur[|options[|sildur[|mindur[|maxdur]]]]]):
This application listens for fax tones (on IAX and SIP channels too)
for waitdur seconds of time. In addition, it can be interrupted by digits,
or non-silence. Audio is only monitored in the receive direction. If
digits interrupt, they must be the start of a valid extension unless the
option is included to ignore. If fax is detected, it will jump to the
‘fax’ extension. If a period of non-silence greater than ‘mindur’ ms,
yet less than ‘maxdur’ ms is followed by silence at least ‘sildur’ ms
then the app is aborted and processing jumps to the ‘talk’ extension.
If all undetected, control will continue at the next priority.
      waitdur:  Maximum number of seconds to wait (default=4)
      options:
        ‘n’:  Attempt on-hook if unanswered (default=no)
        ‘x’:  DTMF digits terminate without extension (default=no)
        ‘d’:  Ignore DTMF digit detection (default=no)
        ‘f’:  Ignore fax detection (default=no)
        ‘t’:  Ignore talk detection (default=no)
      sildur:  Silence ms after mindur/maxdur before aborting (default=1000)
      mindur:  Minimum non-silence ms needed (default=100)
      maxdur:  Maximum non-silence ms allowed (default=0/forever)
Returns -1 on hangup, and 0 on successful completion with no exit conditions.

For questions or comments, please e-mail support@newmantelecom.com.

Perfecto, ahora retocaremos el Freepbx, buscad dentro del Freepbx la seccion General Settings y en la zona de FAX decidle que vuestra extension de Fax es la 401. Debemos asignar ahora a todas las llamadas entrantes la deteccion de fax, buscaremos en Inbound Routes la ruta que deseemos, en mi caso todas (any DID / any CID) y le diremos en la sección Fax Handling que la extension de fax es la 401 y el tipo NVFax y el tiempo 20. Os dejo un resumen de los cambios en FreePBX:

General Settings –> Fax Machine –> Extension ……. –> 401
General Settings –> Fax Machine –> Mail ……. –> Vacio
General Settings –> Fax Machine –> Mail ……. –> Vacio

Inbound Routes –> any DID / any CID –> Fax Handling –> Fax Extension –> 401
Inbound Routes –> any DID / any CID –> Fax Handling –> Fax Mail –> Vacio
Inbound Routes –> any DID / any CID –> Fax Handling –> Fax Detection Type –> NVFax
Inbound Routes –> any DID / any CID –> Fax Handling –> Pause after answer –> 20

De esta forma conseguimos que la detección de fax en cualquiera de las lineas que tengamos sea optima en cualquier tipo de linea y con cualquier tipo de hardware.

Agradecimientos:

Julián Menéndez y a su sabiduría en Asterisk.

Alfonso de MicroAlcarria, otra vez, como siempre.

CeLSuM de Doctores del PC, le surgió la necesidad y me ha picado con esto hasta que lo he sacado.

A ­Vosotros, que a ver si logro picaros y empezais a dejar aquí vuestras miguitas 😉

 

Comentarios