FAX

De Asterisk Wiki
Saltar a: navegación, buscar
Alert.png To Do
Esta página necesita ser completada.
Puedes revisar todas las páginas por completar en este enlace.


El FAX es un medio de comunicación que pertenece al mundo de la telefonía clásica. A pesar que ya tenemos medios muy superiores para enviar la información que este sistema ofrece, todavía existen vestigios que es necesario cubrir, y aquí mostramos como Asterisk ofrece esta cobertura.

Dibujo de un completo FAX

Base de Funcionamiento

Hay que considerar que aunque el FAX sea un método muy rudimentario, con muy baja calidad, y muy propenso a fallos, sin ya motivos aparente para abandonar esta tecnología súbitamente, por desgracia, aun existen usuarios del mismo. Es quizá por su simplicidad de manejo por lo que ha proliferado y se ha preservado hasta nuestros días.

No vamos a adentrarnos en el funcionamiento de un sistema de FAX, más de lo necesario para entender algunos conceptos del mismo, en relación a lo que afecta a nuestro sistema

En cuanto a Asterisk podemos decir que existen dos métodos oficiales y uno adicional muy popularizado, para manejar el sistema de FAX:

  1. Si tenemos una máquina de FAX, gracias al códec de audio de telefonía clásica [Codecs y Formatos|G.711] podemos realizar una trasmisión directa (pass-through). Además ofrece el estándar T.38 [1] para la trasmisión de fax a través del protocolo SIP, por ejemplo para un servidor de Faxes SIP.
  2. Existe un módulo oficial de Digium, Fax for Asterisk, que provee de funcionalidad completa para implementar un servicio de Faxing en nuestra máquina. Solo se puede conectar una línea de forma gratuita, para lineas adicionales se requieren licencias específicas de Digium
  3. Existe una opción no oficial, y es conectar nuestra linea, a un dispositivo IAX conectando a la aplicación IAXModem (un dispositivo IAX que simula un faxmodem). Este módem puede conectarse a una aplicación llamada Hylafax, a la que pueden conectarsele varios tipos de módems, para gestionar FAXes

FAX Passthrough

Cuando queremos que al conectar un FAX analógico directamente a una toma FXS conectada a nuestra maquina (utilizando una PasarelaATA o una tarjeta especifica Digium utilizando DAHDI, los faxes entren y salgan de forma "automática", se ha desarrollado internamente una serie de mecanismos de gestión, para que esto suceda prácticamente "al salir de la caja" (out of the box, tan pronto como los parámetros más básicos de Asterisk están puestos en su sitio).

El problema que la señalización de los FAXes resulta muy delicada, y cualquier pequeño defecto en la señal puede provocar un error en la trasmisión, por lo que es necesario implementar casi siempre, mecanismos adicionales de control para obtener resultados más perfeccionistas.

Por ello, aunque es posible que más del 90% de los faxes entren y salgan sin problemas sin configurar nada especial, para intentar mejorar ese 90% se han implementado una serie de "técnicas" adicionales sin tenemos previsto enchufar FAXes analógicos a nuestras tomas FXS.

Por un lado tenemos para DAHDI, dos parámetros principales:

  • faxbuffers => 12,half: Con esto, creamos un buffer dedicado cuando entra un FAX (concretamente de 96ms según la documentación), y así aliviar aún más los posibles cortes que puedan haber durante la trasmisión.
  • faxdetect: También podemos indicar con este parámetro si queremos que los faxbuffers se apliquen para FAXes entrantes (incoming), salientes (outgoing) o ambos sentidos (both) o no se apliquen (no), esta es la selección por defecto.

Por otro lado, para SIP, solo tenemos un parámetro:

  • faxdetect: tenemos la opción cng, si queremos que al recibir un fax o al enviar, se compruebe si se recibe un tono CNG, o t38, para detectar si recibimos una trama SIP T.38 en un mensaje INVITE, yes, para comprobar ambos casos, en estos caso, redirige la llamada a la extensión fax del plan de marcación, si ponemos no, no comprueba nada, que es la opción por defecto.

En estos casos, existe una extensión especial de DialPlan, a la que se redireccionarían los "Faxes detectados": La extensión especial fax.

FAX for Asterisk

El sistema FAX for Asterisk es propietario exclusivo de Digium, y tiene una licencia privativa. Esta compuesto por dos módulos, uno "libre", llamado res_fax.so que surge a partir de la versión 1.8 y se encarga específicamente de la trasmisión, recepción y envio, incorpora las aplicaciones de Dialplan especificas para tratar los FAXes, y por otro lado, tenemos otro módulo llamado res_fax_digium.so que se encarga del procesamiento en si, quizá la parte más propensa a fallos.

Para solo una linea, es "gratis", pero no libre, esto quiere decir, que igualmente necesitaríamos introducir una licencia de uso. Esta se puede generar desde la página de Digium e incorporar en un directorio específico de licencias /var/lib/asterisk/licenses.

Funcion FAXOPT

Existe una función específica de FFA: FAXOPT, la cual puede recibir los siguientes argumentos:

  • ecm: Podemos activar o ver, el Error Correction Mode (Modo de corrección de errores), valores yes o no
  • error: Para saber el error que se ha producido, en caso que se haya dado
  • minrate: Podemos especificar la tasa minima de transferencia, los valores son los tipicos baudios de los modems, 7200, 9600, 14400...
  • maxrate: Podemos especificar la tasa máxima de transferencia, los valores son los tipicos baudios de los modems, 7200, 9600, 14400...
  • modem: Podemos definir las capacidades de modem que tiene el FAX en cuestión (Habría que ver la especificación concreta del FAX que estemos utilizando), posibles valores, V17,V27,V29 y V34

Variables Generales de FAX

Existen unas variables globales relacionadas al servicio de FAX:

  • FAXSTATUS: Resultado de la trasmisión de un FAX
  • FAXERROR: Razón por la que fallo la trasmisión del FAX
  • FAXPAGES: Número de páginas transferidas por el FAX
  • FAXRESOLUTION: Resolución de la imagen del FAX transferido
  • FAXBITRATE: La tasa de transferencia que se ha utilizado durante la trasmisión

Aplicación ReceiveFax

Esta aplicación sirve para recibir un FAX y definir el fichero que se quiere recibir.

La sintaxis específica es: ReceiveFAX(<nombre_de_fichero>,<opciones>)

  • El nombre del fichero que queremos darle al recibir el FAX
  • Las opciones pueden ser:
    • d: Permite hacer una depuración de la trasmisión del FAX
    • f: Permite funciones de audio durante la transferencia en canales que permiten la norma T.38
    • s: Envia eventos de tipo Progress al AMI en vez de EventStatus que se envían desde el módulo de tipo recurso especifico de FAX.

Aplicación SendFax

Sirve para a partir de uno o varios ficheros, enviar un FAX a un destinatario. La sintaxis específica es: SendFAX(<fichero_1>[,<fichero_N>],<opciones>)

  • En primer lugar el nombre del fichero o ficheros TIFF que queremos enviar
  • Por otro lado las opciones disponibles son:
    • d: Permite hacer depuración durante la trasmisión del FAX
    • f: Permite funciones de audio durante la transferencia en canales que permiten la norma T.38
    • s: Envia eventos de tipo Progress al AMI en vez de EventStatus que se envían desde el módulo de tipo recurso especifico de FAX.
    • z: Lanza un mensaje INVITE de tipo T.38, en caso que todavía no se haya recibido el mismo para indicar el envío de FAX en el caso que hablemos de intercomunicaciones entre pares SIP (ejemplo entre Asterisk y una Pasarela ATA

IAX Modem y HylaFax

Logo de HylaFax representativo

Esta opción, es la única disponible, de carácter Open Source, que ofrece posibilidades ilimitadas de Faxing. El único problema es que no esta soportada por Asterisk de forma "oficial" lo que toda implementación de esta solución carece 100% de cualquier soporte por parte de la comunidad Asterisk y concretamente de Digium. Además es muy propensa a Fallos, y resulta relativamente compleja de configurar [2], por lo que en casos de pequeña escala puede no estar recomendado su uso, y en casos no tolerantes a fallos también.

Pero como comentábamos al principio, como el FAX es un sistema en vías de extinción, quizá es planteable el hecho de aceptar ese margen de errores. Asi que esta solución podría resultar una alternativa valida para el resto de los casos.

Referencias

  1. http://www.itu.int/rec/T-REC-T.38/e
  2. IAXModem, Asterisk y Hylafax Asterisk en 10000 Horas, Manuel Camargo (2010)

Véase también

Enlaces Externos