Como recibir Fax en Asterisk

Imagen de RazaMetaL

Siguiendo con el envio de fax, me puse a investigar acerca de como hacerlo con asterisk y este es el resultado. Se puede implementar Hylafax + Asterisk para tener una sencilla y funcional maquina de fax virtual. Que ganamos? no tenemos que comprar un fax ni tarjetas o modulos fxs adicionales :) en fin ahorramos y de paso aprendemos algo nuevo.

Vamos a requerir de las siguientes aplicaciones:

- [url=http://www.hylafax.org]Hylafax[/url]
- [url=http://iaxmodem.sourceforge.net/]IAXModem[/url]

Las instrucciones para instalar Hylafax en Debian las pueden encontrar en este [url=http://www.ecualug.org/?q=2007/02/26/comos/como_instalar_un_servidor_de_fax_en_debian]link[/url]. Para CentOS 4.4 lo pueden descargar desde:
[url]ftp://ftp.hylafax.org/binary/linux/redhat/RPMS/i386/hylafax-4.3.2-3rhel4.i386.rpm[/url]

Para esta ultima distribucion dependiendo del caso puede pedir un par de dependencias que podemos instalar con yum:

yum install ghostscript sharutils

Y finalmente:

rpm -ivh hylafax-4.3.2-3rhel4.i386.rpm

[b]Configurar ASTERISK[/b]:
Agregamos en iax.conf la extension para nuestro fax:

[300]
username=300
type=friend
secret=300
qualify=yes
notransfer=yes
host=dynamic
context=from-internal
callerid="Fax" <300>
allow=all

Agregamos en zapata.conf :

faxdetect=incoming

En extensions.conf buscamos el contexto para las llamadas entrantes y agregamos:

exten => fax,1,Dial(IAX2/300)

En Freepbx este proceso es mucho mas sencillo, se crea una extension IAX para el fax y en la opcion de configuracion general se configura para que las llamadas de fax sean dirigidas a esa extension recien creada, en este ejemplo es 300.

[b]Configurar IAXModem[/b]
Tanto Debian y CentOS (en el repositorio de Trixbox) tienen iaxmodem disponibles en sus repositorios, es recomendable utilizar estos paquetes para obtener y gozar de beneficios de las actualizaciones de la distribucion que estemos usando :)

Descargamos IAXModem:

cd /usr/src
wget http://ufpr.dl.sourceforge.net/sourceforge/iaxmodem/iaxmodem-0.2.1.tar.gz
tar zvxf iaxmodem-0.2.1.tar.gz
cd tar zvxf iaxmodem-0.2.1

Lo instalamos:

cd lib/libiax2
./configure
make && make install
cd ../spandsp
./configure
make && make install
cd ../../
./configure
make

Copiamos el binario iaxmodem en /usr/bin:

cp iaxmodem /usr/bin

Creamos un directorio en /etc/iaxmodem en donde guaradermos la configuracion del modem IAX archivo de configuracion para el modem IAX2 en /etc/iaxmodem/ttyIAX :

device /dev/ttyIAX
port 45699
refresh 300
server localhost
peername 300
secret 300
cidname Fax
cidnumber 300
codec slinear

Debemos verificar si el modem se registra en nuestro asterisk:

# iaxmodem ttyIAX
[2007-02-27 12:56:51] Modem started
[2007-02-27 12:56:51] Setting device = '/dev/ttyIAX'
[2007-02-27 12:56:51] Setting port = 45699
[2007-02-27 12:56:51] Setting refresh = 300
[2007-02-27 12:56:51] Setting server = 'localhost'
[2007-02-27 12:56:51] Setting peername = '300'
[2007-02-27 12:56:51] Setting secret = '300'
[2007-02-27 12:56:51] Setting cidname = 'Fax'
[2007-02-27 12:56:51] Setting cidnumber = '300'
[2007-02-27 12:56:51] Setting codec = slinear
[2007-02-27 12:56:51] Error: group unspecified, using root instead
[2007-02-27 12:56:51] Error: user not found in passwd file, using root instead
[2007-02-27 12:56:51] Error: invalid mode string () ? Leaving default modes on /dev/ttyIAX
[2007-02-27 12:56:51] Opened pty, slave device: /dev/pts/1
[2007-02-27 12:56:51] Created /dev/ttyIAX symbolic link
[2007-02-27 12:56:51] Error: mode is 0, leaving default permissions
Restart 0
[2007-02-27 12:56:51] Registration completed successfully.

En asterisk:

sip*CLI> iax2 show peers like 300
Name/Username Host Mask Port Status
300/300 127.0.0.1 (D) 255.255.255.255 45699 OK (3 ms)
1 iax2 peers [1 online, 0 offline, 0 unmonitored]

En vista de que esta registrado vamos a agregarlo en /etc/inittab para que el modem este disponible todo el tiempo:

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

Indicamos a init que lea inittab nuevamente con:

telinit q

[b]Configurar Hylafax[/b]
Hasta ahora tenemos iaxmodem registrado como extension en asterisk y hemos configurado el dialplan para que los faxes sean enviados a esta extension. Necesitamos entonces configurar hylafax para que acepte los faxes.

Lo primero es configurar hylafax como ya lo vimos en este [url=http://www.ecualug.org/?q=2007/02/26/comos/como_instalar_un_servidor_de_fax_en_debian]link[/url]:

faxsetup

Cuando nos pida un modem debemos detenernos y agregarlo a mano. En la ruta en la que descomprimimos iaxmodem hay un archivo llamado config.ttyIAX el cual copiaremos a /var/spool/hylafax/etc y luego modificaremos para que la seccion informativa de nuestro fax luzca de la siguiente manera, todo lo demas del archivo queda intacto:

cp config.ttyIAX /var/spool/hylafax/etc/
vi /var/spool/hylafax/etc/config.ttyIAX


CountryCode: 593
AreaCode: 5
FAXNumber: +593-5-262-2621
LongDistancePrefix: 0
InternationalPrefix: 00
DialStringRules: etc/dialrules
ServerTracing: 0xFFF
SessionTracing: 0xFFF
RecvFileMode: 0664
LogFileMode: 0664
DeviceMode: 0666
RingsBeforeAnswer: 1
SpeakerVolume: off
GettyArgs: "-h %l dx_%s"
LocalIdentifier: "MI EMPRESA"
TagLineFont: etc/lutRS18.pcf
TagLineFormat: "De %%l|%c|Pag %%P de %%T"
MaxRecvPages: 150

Igual que con iaxmodem, anadimos en inittab lo siguiente:

fax:2345:respawn:/usr/sbin/faxgetty ttyIAX

Y ejecutamos:

telinit q

Si marcamos a la extension 300 vamos a tener tono de fax :)

Ahora necesitamos especificar quienes recibiran los e-mails conteniendo el fax como adjunto. Para esto modificamos /var/spool/hylafax/etc/FaxDispatch para que contenga la direccion de e-mail a la que deberan llegar los faxes y el formato:

SENDTO=FaxMaster;
FILETYPE=pdf;

case "$DEVICE" in
ttyIAX) SENDTO=usuario@midominio.com;; # all faxes received on ttyS1
esac

Riniciamos hylafax y enviamos un fax a la extension 300, luego revisamos nuestro fax en el casillero de usuario@midominio.com.

Comentarios

Buenos días! Ya he resuelto

Buenos días!

Ya he resuelto el problema de segmentación, ahora el inconveniente es que el IAXmodem nunca termina de registrarse al ejecutar el comando #iaxmodem ttyIAX el proceso de registro se queda estancadado en "Created /dev/ttyIAX symbolic link", les agradeceria si pudieran ayudarme, no he encontrado documentación sobre este error

Como resolvistes el problema

Imagen de RazaMetaL

Como resolvistes el problema de Segmentation Fault ?

[quote]
ahora el inconveniente es que el IAXmodem nunca termina de registrarse al ejecutar el comando #iaxmodem ttyIAX el proceso de registro se queda estancadado en "Created /dev/ttyIAX symbolic link", les agradeceria si pudieran ayudarme, no he encontrado documentación sobre este error[/quote]

Muestranos tus archivos de configuración de iaxmodem y la parte que corresponde a la configuración del la extensión IAX de asterisk para iaxmodem.

Se me ocurre que probablemente estas usando en iaxmodem el puerto 4569 que es el mismo que usa el canal IAX2 de asterisk.

------------

Antes de preguntar visita el [url=http://www.sindominio.net/ayuda/preguntas-inteligentes.html]link[/url] :evil:

 

[img]http://www.bbspot.com/Images/News_Features/2003/01/os_quiz/debian.jpg[/img]

-----

Visita este [url=http://www.sindominio.net/ayuda/preguntas-inteligentes.html]link[/url] :evil:

[img]http://www.bbspot.com/Images/News_Features/2003/01/os_quiz/debian.jpg[/img]

(adsbygoogle = window.adsbygoogle || []).push({});

El problema de

El problema de segmentación, a mi juicio aparecio por algun error de compilación. Desistale todo, instale y recompile de nuevo.
Actualmente el ambiente en el que desarrollo tiene una tarjeta FXO generica de un solo puerto a la que tengo conectada la linea telefonica por la que enrruto mis llamadas entrantes y salientes. A parte de Asterisk, cuento con FreePBX,ARI y A2Billing.

Aca coloco los archivos de configuración que he manipulado según el manual:

iax.conf

[general]
bindport = 4569 ; Port to bind to (IAX is 4569)
bindaddr = 0.0.0.0 ; Address to bind to (all addresses on machine)
disallow=all
allow=ulaw
allow=alaw
allow=gsm
mailboxdetail=yes
iaxcompat=yes
jitterbuffer=yes

;FAX
[300]
username=300
type=friend
secret=iaxmodem
qualify=no
notransfer=yes
host=dynamic
context=from-internal
callerid="Fax" <300>
allow=all
;Fin modificaciones

#include iax_registrations_custom.conf
#include iax_registrations.conf
#include iax_custom.conf
#include iax_additional.conf
#include additional_a2billing_sip.conf

ttyIAX0 -> /iaxmodem/ttyIAX0

device /dev/ttyIAX0
port 4569 -> he intendado cambiando el puerto a 45699 y 4570 sin obtener resultados
owner root:root
mode 660
refresh 300
server localhost
peername 300
secret iaxmodem
cidname Fax
cidnumber 300
codec slinear

zapata.conf

[channels]
language=en
context=from-pstn
signalling=fxs_ks
faxdetect=incoming
usecallerid=yes
callerid=asreceived
echocancel=yes
callprogress=no
busydetect=no
echocancelwhenbridged=no
echotraining=800
group=0
channel=1
musiconhold=default
#include zapata.additional.conf

extensions.conf

[from-pstn]
include => from-pstn-custom
include => ext-did
include => ext-did-catchall
include => from-did-direct
;exten => fax,1,Goto(ext-fax,in_fax,1)
;modificado
exten => fax,1,Dial(IAX2/300)
;fin modificaciones

iax2 show peers:
300/300 127.0.0.1 (D) 255.255.255.255 4569 UNREACHABLE

Espero puedan ayudarme, eset servicio me ha traido muchos inconvenientes y el tiempo esta en mi contra! espero su respuesta mcuhas gracias desde ya

Gracias por indicarnos como

Imagen de RazaMetaL

Gracias por indicarnos como solucionastes el problema de segmetación, ahora, retomando tu pregunta:

[quote]
iax.conf

[general]
bindport = 4569 ; Port to bind to (IAX is 4569)
bindaddr = 0.0.0.0 ; Address to bind to (all addresses on machine)
disallow=all
allow=ulaw
allow=alaw
allow=gsm
mailboxdetail=yes
iaxcompat=yes
jitterbuffer=yes
[/quote]

Es correcto.

[quote]
;FAX
[300]
username=300
type=friend
secret=iaxmodem
qualify=no
notransfer=yes
host=dynamic
context=from-internal
callerid="Fax" <300>
allow=all
;Fin modificaciones

#include iax_registrations_custom.conf
#include iax_registrations.conf
#include iax_custom.conf
#include iax_additional.conf
#include additional_a2billing_sip.conf
[/quote]

Agrega el siguiente paŕametro:

port=45691

[quote]
device /dev/ttyIAX0
port 4569 -> he intendado cambiando el puerto a 45699 y 4570 sin obtener resultados
owner root:root
mode 660
refresh 300
server localhost
peername 300
secret iaxmodem
cidname Fax
cidnumber 300
codec slinear
[/quote]

El puerto debe ser 45691 igual que en el archivo iax.conf.

[quote]
iax2 show peers:
300/300 127.0.0.1 (D) 255.255.255.255 4569 UNREACHABLE

Espero puedan ayudarme, eset servicio me ha traido muchos inconvenientes y el tiempo esta en mi contra! espero su respuesta mcuhas gracias desde ya
[/quote]

Realiza las modificaciones que te recomendé, mata todas las instancias de iaxmodem, reinicia asterisk, inicia iaxmodem y mira si el fax se registra ahora.

------------

Antes de preguntar visita el [url=http://www.sindominio.net/ayuda/preguntas-inteligentes.html]link[/url] :evil:

 

[img]http://www.bbspot.com/Images/News_Features/2003/01/os_quiz/debian.jpg[/img]

-----

Visita este [url=http://www.sindominio.net/ayuda/preguntas-inteligentes.html]link[/url] :evil:

[img]http://www.bbspot.com/Images/News_Features/2003/01/os_quiz/debian.jpg[/img]

(adsbygoogle = window.adsbygoogle || []).push({});

No hubo avance

Buenas tardes! Gracias por responder tan pronto, tome en cuenta las correcciones y ejecute de nuevo "iaxmodem ttyIAX0" y se queda siempre en el mismo punto, ahora con el agravante de que asterisk no levanta :( se detiene en el punto en el que ejecuta "[app_txfax.so]" la aplicación del fax :?... de nuevo espero sus respuestas.

Ya levanta Asterisk

Bien ya levanta Asterisk, hice los cambios sugeridos y al ejecutar el iaxmodem ttyIAX0 se queda en el mismo punto -> Created /dev/ttyIAX0 symbolic link, escucho sus sugerencias :( SOS

Pero se registra o no la

Imagen de RazaMetaL

Pero se registra o no la extensión de fax en asterisk?

Que salida te da:


asterisk -r -x "iax2 show peers"

------------

Antes de preguntar visita el [url=http://www.sindominio.net/ayuda/preguntas-inteligentes.html]link[/url] :evil:

 

[img]http://www.bbspot.com/Images/News_Features/2003/01/os_quiz/debian.jpg[/img]

-----

Visita este [url=http://www.sindominio.net/ayuda/preguntas-inteligentes.html]link[/url] :evil:

[img]http://www.bbspot.com/Images/News_Features/2003/01/os_quiz/debian.jpg[/img]

(adsbygoogle = window.adsbygoogle || []).push({});

esta es la salida de "iax2

esta es la salida de "iax2 show peers"
FAX/root 10.182.97.24 (S) 255.255.255.255 4569 Unmonitored
300/300 (Unspecified) (D) 255.255.255.255 0 UNKNOWN
Ahora se me presenta una duda, la extesión que yo destine para ek Fax es 300, porque esta no se registra?!

Bien, hoy ejecute de nuevo

Bien, hoy ejecute de nuevo el comando "iaxmodem ttyIAX0" y se registro con exito. Hecho esto descomprimi Hylafax-4.4.4, y compile con los comandos ./configure - make - make install. Hecho esto realice una llamada desde un número externo a la extensión IAX2 consiguiendo que repicara ma sno que diera tono de fax, aqui les presento los logs:

Connected to Asterisk 1.2.18 currently running on Pcotorra (pid = 2600)
Asteriskserver*CLI> set verbose 60
== CDR updated on Zap/1-1
-- Executing Macro("Zap/1-1", "exten-vm|novm|300") in new stack
-- Executing Macro("Zap/1-1", "user-callerid") in new stack
-- Executing NoOp("Zap/1-1", "user-callerid: ") in new stack
-- Executing GotoIf("Zap/1-1", "0?report") in new stack
-- Executing GotoIf("Zap/1-1", "0?start") in new stack
-- Executing Set("Zap/1-1", "REALCALLERIDNUM=") in new stack
-- Executing NoOp("Zap/1-1", "REALCALLERIDNUM is ") in new stack
-- Executing Set("Zap/1-1", "AMPUSER=") in new stack
-- Executing Set("Zap/1-1", "AMPUSERCIDNAME=") in new stack
-- Executing GotoIf("Zap/1-1", "1?report") in new stack
-- Goto (macro-user-callerid,s,11)
-- Executing NoOp("Zap/1-1", "TTL: ARG1: novm") in new stack
-- Executing GotoIf("Zap/1-1", "0?continue") in new stack
-- Executing Set("Zap/1-1", "__TTL=64") in new stack
-- Executing GotoIf("Zap/1-1", "1?continue") in new stack
-- Goto (macro-user-callerid,s,21)
-- Executing NoOp("Zap/1-1", "Using CallerID "" <>") in new stack
-- Executing Set("Zap/1-1", "FROMCONTEXT=exten-vm") in new stack
-- Executing Set("Zap/1-1", "VMBOX=novm") in new stack
-- Executing Set("Zap/1-1", "EXTTOCALL=300") in new stack
-- Executing Set("Zap/1-1", "CFUEXT=") in new stack
-- Executing Set("Zap/1-1", "CFBEXT=") in new stack
-- Executing Set("Zap/1-1", "RT=") in new stack
-- Executing Macro("Zap/1-1", "record-enable|300|IN") in new stack
-- Executing GotoIf("Zap/1-1", "0?2:4") in new stack
-- Goto (macro-record-enable,s,4)
-- Executing DeadAGI("Zap/1-1", "recordingcheck|20080602-125514|1212425692.2") in new stack
-- Launched AGI Script /var/lib/asterisk/agi-bin/recordingcheck
recordingcheck|20080602-125514|1212425692.2: Inbound recording not enabled
-- AGI Script recordingcheck completed, returning 0
-- Executing NoOp("Zap/1-1", "No recording needed") in new stack
-- Executing Macro("Zap/1-1", "dial||tr|300") in new stack
-- Executing DeadAGI("Zap/1-1", "dialparties.agi") in new stack
-- Launched AGI Script /var/lib/asterisk/agi-bin/dialparties.agi
dialparties.agi: Starting New Dialparties.agi
== Parsing '/etc/asterisk/manager.conf': Found
== Manager 'admin' logged on from 127.0.0.1
dialparties.agi: priority is 1
dialparties.agi: Caller ID name is 'unknown' number is 'unknown'
dialparties.agi: Methodology of ring is 'none'
> dialparties.agi: USE_CONFIRMATION: 'FALSE'
> dialparties.agi: RINGGROUP_INDEX: ''
-- dialparties.agi: Added extension 300 to extension map
-- dialparties.agi: Extension 300 cf is disabled
-- dialparties.agi: Extension 300 do not disturb is disabled
> dialparties.agi: extnum: 300
> dialparties.agi: exthascw: 1
> dialparties.agi: exthascfb: 0
> dialparties.agi: extcfb:
> dialparties.agi: exthascfu: 0
> dialparties.agi: extcfu:
-- dialparties.agi: DbDel CALLTRACE/300 - Caller ID is not defined
-- AGI Script dialparties.agi completed, returning 0
-- Executing Dial("Zap/1-1", "IAX2/300||tr") in new stack
-- Call accepted by 127.0.0.1 (format alaw)
-- Format for call is alaw
-- Called 300
== Manager 'admin' logged off from 127.0.0.1
-- IAX2/300-3 is ringing
-- Registered IAX2 '300' (AUTHENTICATED) at 127.0.0.1:32787

Luego de esto, cerre la sesión y al intentar levantar Asterisk nuevamente dio error de segmentación! :( una vez mas agradezco todo el apoyo que me puedan brindar.

Falla de segmentación

La unica forma que he encontrado hasta los momentos de reparar, si es que se puede llamar asi, la falla de segmentación es desinstalando absolutamente todo lo referente a iaxmodem e hylafax y limpiando todos los directorios... :( No soy especialista en Linux no se donde puede estar la falla, si tienen información se los agradeceria

Páginas