¿Qué es FoIP – Fax over IP?

Fax sobre T38

FoIP significa ‘Fax over IP‘ (fax sobre IP), y se refiere al proceso de enviar y recibir faxes a través de una red VoIP. Una llamada de FoIP (FAX) es muy similar a una llamada normal de VoIP (voz). En esencia es una llamada que transmite señales de fax sobre una red IP.

Fax sobre IP funciona a través de T38 y requiere un Gateway VoIP compatible con T38, así como una máquina de fax, tarjeta de fax o software de fax también compatible con T38. El protocolo T38 fue desarrollado para resolver los problemas que aparecen al intentar transportar un fax a través de una llamada sobre telefonía IP, dado que el fax es una tecnología muy anterior a la telefonía IP y no fue diseñado para ser utilizado en ese entorno. El software de servidor de fax que puede hablar en ‘T38’ permite la gran funcionalidad de Comunicaciones Unificadas, Fax a E-mail, que envía faxes directamente a través de un gateway VoIP y convierte el mensaje de fax en un correo electrónico. ¡El lado positivo es que no se necesita ningún hardware adicional para que la funcionalidad de Fax a E-mail funcione a la perfección!

3CX incluye un servidor de fax T38 con todas las funciones que permiten la recepción de faxes desde cualquier lugar de la red. Se pueden recibir faxes en formato PDF y reenviarlos por correo electrónico. Otros servidores de fax en la actualidad en el mercado requieren el uso separado de costosos y licenciados controladores Dialogic SoftIP.

¿Cómo recibe un Fax el servicio 3CX FAX Server?

3CX tiene un servicio separado de servidor de fax, que actúa como un cliente SIP dedicado a recibir faxes.

¿Cuál es la diferencia entre una llamada de FoIP y una de VoIP?

La mayor diferencia entre una llamada de VoIP y otra de FoIP es el tipo de media establecido entre los extremos, por lo tanto el SDP adjunto en la señalización SIP también es ligeramente diferente. Tradicionalmente la media de una llamada FoIP es T.38. T.38 es un estándar de la ITU para enviar FAX a través de redes IP. Las sesiones T.38 se encuentran descriptas en el SDP adjunto usando el tipo mime “image/t38″ descripto en la RFC 3362. Es necesario utilizar media T.38 en las llamadas de FAX en contraposición a los codecs de voz normales, ya que los codecs de voz comprimen con pérdida de información (la cual no es percibida en llamadas de voz, pero si en los datos) y por lo tanto no son confiables para transmisión de datos. Los datos T.38 transmitidos contienen data cruda de FAX. Al analizar una llamada de FoIP notará dos diferentes características:

1. En lugar de tener media RTP conteniendo datos de voz, una llamada de FoIP contiene media T.38 con la imagen del FAX.
2. La negociación SDP de la señalización SIP es prácticamente idéntica en una llamada de FoIP y en una de VoIP con la excepción de las imágenes listadas.

Descripción de la Media

El siguiente es un ejemplo de un INVITE desde un dispositivo SmartNode que contiene T.38 en su SDP;

INVITE sip:100@10.172.0.100 SIP/2.0
Via: SIP/2.0/UDP 10.172.0.115:5060
Contact: <sip:3cx@10.172.0.123:5060>
To: “100″<sip:100@10.172.0.100>
From: “anonymous”<sip:404@10.172.0.115:5060>;tag=1
Call-ID: 1-6056@10.172.0.115
Cseq: 1 INVITE
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO
Content-Type: application/sdp
Max-Forwards: 70
User-Agent: SN-4114
Content-Length: 215
v=0
o=user1 53655765 2353687637 IN IP4 10.172.0.115
s=-
t=0 0
c=IN IP4 10.172.0.115
m=audio 6000 RTP/AVP 0
a=rtpmap:0 PCMU/8000
a=sendrecv
m=image 4908 udptl t38
a=T38FaxUdpEC:t38UDPRedundancy
a=sendrecv

NOTE que los únicos encabezados adicionales son los últimos tres:

m=image 4908 udptl t38
a=T38FaxUdpEC:t38UDPRedundancy
a=sendrecv

La primera línea es una instrucción para el destinatario de la llamada para que envíe la media de tipo “image” al puerto “4908” donde “t38” es el método preferido. Las siguientes líneas (a=) son atributos de la media. En este INVITE describen el tipo de media y la dirección del flujo de datos (bidireccional). Por ejemplo, la conexión será establecido en modo de transmisión y recepción. El destinatario de la llamada sabrá a qué IP deberá enviar la media por la dirección IP mencionada en el encabezado de información de conexión (c=) del SDP “GLOBAL”.

NOTA!! La conexión Global solo aplica cuando no hay información de conexión para la descripción de la media (m=). Cada descipción de media PUEDE tener un encabezado de información de conexión distinto (m=) pero si éste no se encuentra definido el destinatario de la llamada debe utilizar la información provista en el encabezado de conexión “GLOBAL” descripto en el nivel de la sesión. Esto es descripto en mayor detalle en la RFC 2327 en la sección 6.

Informando la ubicación a la PBX – Registración del cliente de FAX

En el arranque, el servicio de FAX lee de la base de datos de 3CX el DN especial del FAX (número de extensión), el ID de autenticación de la extensión de fax y su contraseña. El cliente de FAX entonces envía un mensaje REGISTER a la PBX utilizando estas credenciales, refrescando la registración cada 10 minutos (por defecto). El monitor de estado mostrará las siguientes líneas de log:

17:11:42.229 FaxCfg::updateContact [CM504008]: Fax Service: registered as sip:888@3CXPhoneSystem with contact sip:888@10.130.0.2:5100;user=phone

Para revisar los detalles de la registración, la respuesta OK al mensaje REGISTER puede ser observada en los logs de trace de 3CX (logs del servidor SIP). En modo verborrágico (verbose) la PBX escribirá en el log la respuesta SIP la cual se verá como la siguiente:

17:37:30.874|DialogUsageManager.cxx(800)|Debug8|Resip|::ResipLogger:SEND: SIP/2.0 200 OK
Via: SIP/2.0/UDP 10.130.0.2:5100;branch=z9hG4bK-29D6-2
Contact: <sip:888@10.130.0.2:5100;user=phone>;expires=600
To: <sip:888@3CXPhoneSystem;user=phone>;tag=0b0ffd5b
From: <sip:888@3CXPhoneSystem;user=phone>;tag=CBB
Call-ID: 0@3CXPhoneSystem
CSeq: 2 REGISTER
User-Agent: 3CXPhoneSystem 5.0.3665.0
Content-Length: 0

La búsqueda dentro de logs en modo verborrágico puede ser tediosa y llevar mucho tiempo. Para encontrar rápidamente entra anotación busque el número de la extensión de FAX. Note que el encabezado de contacto (Contact) contiene la IP y puerto donde el cliente está escuchando. Por defecto el servicio de FAX escucha por mensajes SIP en el puerto 5100 en lugar del puerto usual 5060. El servicio de FAX es configurado de esta forma porque usualmente está instalado en el mismo servidor que la PBX, donde el puerto 5060 ya está siendo utilizado por la PBX. El URI de contacto debe ser un contacto válido alcanzable por el extreme llamante. Es posible que la PBX nunca reciba un pedido de registración (REGISTER). En ese caso puede revisar si el servicio está intentando registrarse en el archive de log “%ProgramData%3CXDataLogs3CXFAXServer.log”. Si el servicio está intentando registrarse, aparecerán líneas similares a las siguientes:

11:46:24.345|0eec|(0):FAXServer, ♪(nai 0, conn_id 0) SSC Evt (Register): Send SSC_REGISTER_RQ

Si es necesario revisar el pedido de registración mencionado, esto puede ser encontrado en “%ProgramData%3CXDataLogsFaxTracesaudittrace.log”. Estos son los logs de rastreo de NetBrick los cuales deberían ser generados solamente cuando el nivel de log de la base de datos está configurado en modo “trace”. Dado que estos logs son bastante grandes, es una buena práctica buscar por la hora del pedido de REGISTER que aparece en el archivo de log 3CXFAXserver.log. Una vez encontrado el pedido de REGISTER será como el siguiente:

74- 81- 49| 50- 50|001e1e04-001fdddc| 0.530-I| None | |SIP-IP |SOCK_U_DA_RQ | 0: 1: 0#466:……………………….REGISTER sip:10.130.0.2:5060 SI»– SIP Primitive –To Remote IP address: 10.130.0.2 (5060)

REGISTER sip:10.130.0.2:5060 SIP/2.0
Allow: INVITE,BYE,ACK,OPTIONS,CANCEL
Call-ID: 0@3CXPhoneSystem
Contact: <sip:888@10.130.0.2:5100;user=phone>
CSeq: 1 REGISTER
Expires: 600
From: <sip:888@3CXPhoneSystem;user=phone>;tag=27CB
Max-Forwards: 70
To: <sip:888@3CXPhoneSystem;user=phone>
User-Agent: Netbricks-Sip-T.38IAF/2.01 (PRODUCT ID:5, 05 Jul 2007)
Via: SIP/2.0/UDP 10.130.0.2:5100;branch=z9hG4bK-7EE7-1
Content-Length: 0

El pedido de REGISTER puede ser revisado buscando direcciones IP incorrectas. También preste atención a las líneas de log donde el cliente de Fax describe la dirección IP remota donde ha enviado los pedidos de REGISTER:

REGISTER sip:10.130.0.2:5060 SI»– SIP Primitive –

Enviando llamadas al servicio de FAX

Las llamadas son enrutadas al cliente de FAX a través de la configuración de las reglas de enrutamiento de FAX en la configuración de cada línea. Pueden elegirse diferentes destinatarios de correo al enrutar las llamadas al FAX. Esto es realizado indirectamente seleccionando una extensión en el menú desplegable “Enviar fax a email de la extensión”. La PBX manipulará la parte visible del encabezado “To” de un mensaje INVITE entrante y lo completará con el número de extensión seleccionado. La PBX luego enviará el mensaje INVITE manipulado al cliente de FAX, caso contrario el mensaje INVITE será enviado sin cambios con el ID de FAX en el encabezado SIP “To”.

Convirtiendo el FAX

Una vez que un mensaje INVITE ha sido recibido por el cliente de FAX, puede negociar la llamada con el llamante, es decir, la pasarela. Note que el flujo de media debe ser pasado directamente desde la pasarela al servicio de FAX y esto no puede hacerse en un dispositivo que está “atado al Media Server”, es decir donde la opción de configuración “Central entrega el audio” se encuentra activada. T.38 no puede ser transcodificado por el Media server por lo tanto la pasarela debe operar con el Media Server en modo “pass-through” o “bypass”. En una llamada exitosa y una vez que el flujo T.38 es recibido exitosamente desde el llamante, la información del FAX es escrita en el directorio de trabajo del servicio de FAX como datos crudos de FAX. Este archivo con datos crudos de FAX es inútil sin su descriptor de datos, el cual se encuentra en la memoria del cliente de Fax. El servicio de FAX accede a esta información y a los datos crudos de FAX del archivo para construir un nuevo archivo TIF conteniendo la imagen del FAX. Los archivos TIF generados son guardados en la carpeta “%ProgramData%3CXDataFaxFaxesToSend” junto con un descriptor XML. El XML es completado con el ID de la extensión de destino, por ejemplo:

 

Convirtiendo y enviando el FAX

El servicio de FAX entonces intentará enviar este archive TIF al destinatario correcto. Obtendrá el ID del destinatario desde el XML y consultará en la base de datos por su dirección de correo electrónico. Si el servicio de FAX encuentra que el adjunto es un archivo TIF, lo convertirá a PDF y lo enviará al destinatario configurado. Si no hay datos de FAX entonces un email sin adjuntos será enviado con la siguiente información:

No Fax was received. Call was either not from a fax machine, or else fax handshaking failed.

El asunto del email será “Fax From: 888888”, donde el numero “888888” es el ID del FAX de la máquina que envió el FAX. El nombre del originante del fax será completado con el campo “Display Name” encontrado en el encabezado “From” del mensaje INVITE de la llamada de FAX.
Los FAX fallidos irán a la carpeta “%ProgramData%3CXDataFaxFaxesFailed”. El motivo de la falla se encuentra en los elementos . Este es un ejemplo de falla al intentar enviar el email:

Failed to send SMTP message, response: ”, error: No recipients defined

En caso de tener un fax fallido que necesite ser reprocesado, puede mover el archive XML y el PDF con el mismo nombre a la carpeta “ToSend”. Una pequeña modificación sera necesaria, la cual implica remover todos los elementos , , en el archivo XML. Por ejemplo, remover un bloque de texto similar a este:

10

Failed to send SMTP message, response: ”, error: No recipients defined
20071129154018.168

20071129154018.168

Lecturas Adicionales

¿Qué es T38?
¿Cómo funciona el Fax en ambientes VoIP?

¡Gratis hasta por 1 año! Seleccione su instalación preferida:

On-Premise

en Linux como MiniPC de $200 o como VM

Obtenga el ISO

On-Premise

en Windows como VM

Descargue el archivo de configuración

En la Nube

En su cuenta en Google, Amazon, Azure

Tome el PBX Express