Enviar y reicibir FAX con GNU/Linux, Asterisk, Iaxmodem y hylafax

Requerimiento para convertir tu computadora en un servidor de FAX o
darle la capacidad a tu asterisk de manipular FAX

Se requiere:

Hylafax, puede ser descargado para RedHat o Centos Aqui:

ftp://ftp.hylafax.org/binary/linux/redhat/RPMS/i386/

IaxModem

http://iaxmodem.sourceforge.net/

Ademas de:

ghostscript y sharutils

En algunas instalaciones esta incluido, en otras las tendran que
incluir. si se tratara de CentOS, con yum install ghostscript sharutils
se puede descargar de internet e instalarlo en el servidor de FAX.

GNU/Linux siempre ha tenido la capacidad de enviar y recibir FAX, antes
del Boom el Vozip y de Asterisk, esto para GNU/Linux es cosa simple y
tenemos 2 opciones para realizarlo.

Conseguir un FAX/MODEM antiguo, algunos ni los han de conocer, son esas
cajas viejas con luces que hacían ruidos en la linea telefónica, algunos
nos conectamos con eso a Internet a una súper velocidad de 14,400 kbps,
hasta un celular sin 3G en puro EDGE es 10 veces mas rápido que eso, en
fin.

Como sera difícil conseguir un FAX/Modem de hardware, usaremos el
IAXMODEM, que es básicamente un programa que se comportara como módem y
usara el protocolo IAX para conectarse al asterisk todo en software

El Iaxmodem.tar.gz debe descomprimirse y compilarse, ya que viene en
código fuente, finalmente hay que copiar el programa de iaxmodem de
forma manual a la carpeta /usr/bin, cp iaxmodem /usr/bin

Se una vez con el ejecutable de iaxmodem, habra que configurarlo para
que sepa a que servidor IAX se conectara, en este caso nuestro asterisk.

Se crea el directorio /etc/iaxmodem y luego se crea el archivo
/etc/iaxmodem/ttyIAX donde se pondran las configuraciones

device /dev/ttyIAX

port 45699
refresh 300
server localhost
peername xxx
secret yyy
cidname Fax
cidnumber xxx
codec alaw

El asterisk se prepara para recibir la conexión de un nuevo dispositivo
IAX, que en este caso sera el software que la hara de MODEM

[xxx]
username=xxx
type=friend
secret=yyy
qualify=yes
notransfer=yes
host=dynamic
context=Tu-contexto
callerid=”Virtual Fax” <xxx>
allow=all

Donde xxx es el usuario y extensión, donde yyy es la clave para esa
extensión.

Se puede automatizar el recibir FAX, pero esto es opcional, por ejemplo
cuando una maquina FAX llamada a nuestro Asterisk, ASterisk detectara
que es un FAX y lo reenviara inmediatamente a la extension de FAX sin
que la recepcionista tenga que mover un dedo

Dependiendo si usas Dahdi o Zapata, sabrás en que archivo debes colocar
esta linea

faxdetect=incoming

En tu extension.conf debes agregar la siguiente

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

Como explico, esto es opcional, si no lo agregas, simplemente la
recepcionista tendrá que transferir manualmente al a extensión de FAX
que de hecho es la forma común en prácticamente el 99% de las empresas.

Con esto Asterisk sabe que tiene un nuevo telefono IAX conectado.

Con lo anterior terminamos con Asterisk y su manejo de un FaxModem en
Software.

Lo siguiente, los que alguna vez ya enviaron y recibieron FAX lo deben
saber, por que esto ya no es nuevo.

Preparar Linux para manejar FAX y decirle cual es su FAX modem, solo que
en lugar de usar el FAX hardware físico, usara el IAXMODEM

Configurando el Hylafax

faxsetup

La mayoria de las preguntas que este programa hara se dejan en su
contenido default, salvo se quiera modificar alguna cosa.

Afinando la configuración en el archivo
/var/spool/hylafax/etc/FaxDispatch se le dice a HylaFAX a que correo
electrónico debe enviar los faxes recibidos

SENDTO=FaxMaster;

FILETYPE=pdf;

case “$DEVICE” in

ttyIAX) SENDTO=david@lastdragon.net;; # all faxes received on ttyS1

esac

Se puede afinar mas, pero con el FAxMaster y un solo correo electrónico
debería ser suficiente para la mayoria.

Finalmente hay que ligar la parte del sistema operativo que “piensa” que
tiene un FAX/MODEM de verdad con el Fax Virtual IAXMODEM.

Agregamos las siguientes 2 lineas en /etc/inittab

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

Reiniciamos todos los programas HylaFax, recargamos asterisk y el init.

telinit q

service hylafax restart

asterisk -rx reload

O tal vez simplemente sea mas cómodo un simple shutdown -r now y esperar
a que se reinicie todo el equipo.

Si todo salio como se espera, al marcar la extensión asignada al
iaxmodem, este debe dar todo de FAX y si recibe un FAX, lo codificara a
PDF y adjuntara al correo proveeido /var/spool/hylafax/etc/FaxDispatch

Enviar FAX

Enviar FAX es de hecho ya un proceso muy simple a partir de este punto.

El hecho lo anterior, ya también se esta en posibilidad de enviar faxes,
con el programa sendfax

por ejemplo:

sendfax -n -d 5511236741 miarchivo.pdf

Ese comando va a mandar el contenido del archivo “miarchivo.pdf” al
numero 5511236741.

El comando resuelve de hecho el problema, pero no se le puede pedir a un
usuario común que entre a una sesión de shell a un entorno tipo Unix a
enviar un FAX, por lo que hay que hacer un frontend

Hay varios metodos.

Crear un buzón de correo electrónico donde el numero telefónico sea el
correo por ejemplo 5511236741@miservidordefax.com
y que el pdf adjunto sea lo que
hay que enviar. El programa de esa forma construiría el comando sendfax
y lo enviaría.

Se lee fácil, todos sabemos enviar un correo electrónico y adjuntarle
archivos.

Otro método que es el que preferí, para mi gusto mas fácil de programar
ya que lo hice en exactamente 2:30 segundos.

Escribir una pagina WEB con 2 campos, un campo para el numero a marcar y
el otro para subir el archivo PDF, al darle submit o enviar, un script
en php se encargaría de construir y ejecutar el sendfax

Yo lo resolví con este segundo método y dejare el código de no mas de 10
lineas que resolvió el asunto de enviar un FAX. Esto sigue siendo fácil
para el usuario, una pagina WEB llenar campos y listo se envía el fax

Codigo para el Front End WEB

Archivo Enviar.html

Enviar FAX

<p>

<form enctype=”multipart/form-data” action=”enviar.php”
method=”post”>

<input type=”hidden” name=”MAX_FILE_SIZE” value=”1900000″>
Numero telefonico <input type=”text” name=”nfax”>
Enviar Archivo PDF:  <input name=”archivo” type=”file”>

<input type=”submit” value=”Enviar FAX”>

</form>

<p>Nota: Tu archivo no debe pasar de 2MB
<p>David Rivero: david@lastdragon.net

</p>

Archivo enviar.php

<?php

// $cmd = “sendfax ân âd “.$nfax.” “.$pdff;

$fdestino = $_FILES[‘archivo’][‘name’];
$forigen = $_FILES[‘archivo’][‘tmp_name’];
$nfax = $_POST[‘nfax’];

$copiar = “cp “.$forigen.” “.$fdestino;

$enviarfax = “sendfax -n -d “.$nfax.” “.$fdestino;

system ($copiar);
system ($enviarfax);

echo “<br />Enviando….”;

?>

Un vídeo demostrativo:

15 Comments

Add a Comment

Comment spam protected by SpamBam