Asterisk 1.6.X y la aplicacion SendFax

En Asterisk 1.6.X, si compilado con el soporte FAX, la aplicación para enviar un FAX es SendFax. La sintaxis es muy sencilla:

SendFAX(filename[|options]):

El problema es que con esta aplicación no podemos llamar directamente un FAX en cuanto no hay posibilidad de indicar el numero a marcar.

Para solucionar el problema hay que hacer uso de un callfile. Un callfile es un archivo de texto donde se definen unas cuantas acciones que Aterisk tiene que ejecutar, y una vez que esté completo se mueve en la carpeta /var/spool/asterisk/outgoing. Asterisk controla periódicamente esta carpeta y si hay un archivo lo procesa.

En el escenario que se va a presentar se llamará el numero de destino (un servicio que permite recibir FAX y luego los envía a un correo electrónico definido) usando come proveedor para la llamada justvoip. Una vez que el destinatario conteste se enviará el archivo prueba.tif (solo funciona con archivos tiff) presente en la carpeta /tmp.

cd /tmp

nano enviofax

Se añaden las siguientes líneas:

Channel: SIP/justvoip/0039XXXXXXXXXXX

;el canal que se va a usar para efectuar la llamada

Callerid: "FAX"

; el identificativo del llamante

WaitTime: 30

;Se espera un respuesta por 30 segundos

Maxretries:3

:se intentará llamar el numero per tres veces

RetryTime: 300

; entre un intento y otro se esperarán 300 segundos

Account: 1000

; el el registro de las llamadas (CDR) cobramos la llamada a la extension 1000

Application: SendFax

; una vez que el destinatario conteste se ejecuta la aplicación sendfax

Data: /tmp/prueba.tif

;el nombre del archivo que se enviará

El resultado del archivo sin los comentarios será:

Channel: SIP/justvoip/0039XXXXXXXXXXX

Callerid: "FAX"

WaitTime: 30

Maxretries:3

RetryTime: 300

Account: 1000

Application: SendFax

Data: /tmp/prueba.tif

Se guardan los cambios y se mueve el archivo en la carpeta /var/spool/asteisk/outgoning

mv enviofax /var/spool/asterisk/outgoing

Este es el resultado en la consola de Asterisk:

Attempting call on SIP/justvoip/003907334445023 for application SendFax(/tmp/prueba.tif) (Retry 1)

> Channel SIP/justvoip-084c82d0 was answered.

> Launching SendFax(/tmp/prueba.tif) on SIP/justvoip2-084c82d0

[Nov 26 15:45:32] NOTICE[7630]: pbx_spool.c:357 attempt_thread: Call completed to SIP/justvoip2/003907334445023

Este es el correo electrónico recibido:

fax

Vota el Articulo: 

Sin votos (todavía)
Evalúa la calidad del articulo

6 comentarios

hola! Version de Asterisk

Molestandote con una pregunta, ante todo muchas gracias por todo lo q nos enseñas
La version que tienes 1.6.1.9 no te ha dado problemas con el Fax? la ves estable o ya le has aplicado parches?
es q tengo un asterisk 1.6.1.0 pero el otro dia intentaron hackearme y hacer llamadas hacia UK :( lo bueno q como es de mi casa no tenia hablilitada la opcion de llamadas internacionales en el Dial Plan... pero bueno quiero darle un update para que todas esas vulnerabilidades se eliminen, y pues veo que la 1.6.1.9 es la que ya tiene todos...
no lo quiero updatear al 1.6.1.12 por que es muy nuevo y no se q problemas traiga... o tu que recomendarias?

Agradeceria mucho tu ayuda.
Saludos.

Saludos y muchas gracias....!!!!

Re: version de Asterisk

Hola,

estoy usando la versión 1.6.0.17 y dentro de poco voy a pasarme a la ultima actualización (la 1.6.0.20). Hasta ahora no he tenido ningún problema con la aplicación fax; funciona bien.

Estoy usando la versión 0.0.6pre12 de SpanDSP y con la compilación de Asterisk no he tenido problemas (con versiones anteriores no compilaba con esa versión de SpanDSP).

La mayoría de las vulnerabilidades dependen, en su mayoría, de la configuración de Asterisk (contraseñas sencillas, acceso abierto a los huéspedes y algunos parámetros más).

Si todo te están funcionando bien, yo me quedaría con la versión que tienes tomando la precaución de actualizarla cuando salga alguna corrección de seguridad.

Saludos

Problema SendFax

Buenas,

estoy tratando de hacer una prueba de envío de fax a una máquina real desde mi servidor con asterisk haciendo uso de un callfile y de la aplicación SendFax tal y como se describe en este post. Para hacer el envío al fax estoy utilizando un canal DAHDI ya que tengo conectada una tarjeta FXO, modelo X100P, que funciona correctamente ya que he podido realizar satisfactoriamente pruebas de llamadas tanto entrantes como salientes.

El callfile que estoy utilizando es el siguiente:

 


Channel: DAHDI/1/0916XXXXXX

WaitTime: 45

MaxRetries: 0

RetryTime: 300

Application: SendFax

Data: /tmp/prueba.tiff

Archive: yes


 

Después de moverlo a la carpeta /var/spool/asterisk/outgoing para que el servidor realice el envío de fax obtengo la siguiente traza de mensajes en la CLI:

debian*CLI> 
    -- Attempting call on DAHDI/1/0916XXXXXX for application SendFax(/tmp/prueba.tiff) (Retry 1)
       > Channel DAHDI/1-1 was answered.
       > Launching SendFax(/tmp/prueba.tiff) on DAHDI/1-1
    -- Channel 'DAHDI/1-1' sending FAX '/tmp/prueba.tiff'
[Jul 23 09:45:58] ERROR[2928]: res_fax_digium.c:2114 dgm_fax_start: FAX handle 0: failed to queue document '/tmp/prueba.tiff'
[Jul 23 09:45:58] ERROR[2928]: res_fax.c:834 generic_fax_exec: channel 'DAHDI/1-1' FAX session '0' failure, reason: 'failed to start FAX session'
debian*CLI> 
Disconnected from Asterisk server
Executing last minute cleanups

Tal y como indica la penúltima línea, tras esto el servidor de asterisk se desconecta, es decir, el proceso asterisk termina por sí solo por lo que también queda desconectada la CLI.
No se cómo interpretar los mensajes de error que me está dando la CLI 
[Jul 23 09:45:58] ERROR[2928]: res_fax_digium.c:2114 dgm_fax_start: FAX handle 0: failed to queue document '/tmp/prueba.tiff'
[Jul 23 09:45:58] ERROR[2928]: res_fax.c:834 generic_fax_exec: channel 'DAHDI/1-1' FAX session '0' failure, reason: 'failed to start FAX session'
- En un principio pensé que podría ser por el tipo de fichero que estoy enviando. Me he asegurado de que el fichero es en efecto un .tiff (lo he creado convirtiendo un fichero que originalmente era un pdf que contiene únicamente una frase) y hasta dónde yo sé este tipo de documentos es totalmente compatible con la transmisión vía fax.
- Tampoco creo que sea un error debido a una mala conexión de la línea analógica ya que las llamadas a través de ella funcionan correctamente.
La versión de Asterisk que estoy utilizando es 1.6.2.6 y para el soporte fax he instalado los módulos de Fax For Asterisk de Digium https://www.digium.com/products/software/fax-for-asterisk. Por lo que sé, la instalación se ha realizado correctamente, cosa que comprueba mediante la ejecución en la CLI del comando fax show stats.

debian*CLI> fax show stats
debian*CLI> 
FAX Statistics:
---------------
Current Sessions     : 0
Transmit Attempts    : 0
Receive Attempts     : 0
Completed FAXes      : 0
Failed FAXes         : 0
Digium G.711        
Licensed Channels    : 1
Max Concurrent       : 0
Success              : 0
Switched to T.38     : 0
Canceled             : 0
No FAX               : 0
Partial              : 0
Negotiation Failed   : 0
Train Failure        : 0
Protocol Error       : 0
IO Partial           : 0
IO Fail              : 0
Digium T.38         
Licensed Channels    : 1
Max Concurrent       : 0
Success              : 0
Canceled             : 0
No FAX               : 0
Partial              : 0
Negotiation Failed   : 0
Train Failure        : 0
Protocol Error       : 0
IO Partial           : 0
IO Fail              : 0

Buscando en google sobre este tema, lo único que he encontrado similar a mí problema se encuentra en el siguiente enlace perteneciente a las listas de correo de digium http://lists.digium.com/pipermail/asterisk-users/2010-May/248445.html donde se recomienda instalar la versión de Fax For Asterisk (FFA) 1.2.1. ¿Cómo puedo averiguar qué versión de FFA tengo instalada? En el caso de que tenga que renovar mi versión, ¿dónde encuentro la versión 1.2.1? En la página de digium no hay ningún apartado de versiones para FFA. En el enlace anterior recomiendan ponerse en contacto con el soporte técnico de Digium para pedir una copia de la versión 1.2.1 de FFA.
En cualquier forma, ¿alguien me puede decir por qué puede venir dado este error? Soy incapaz de averiguar la causa que está impidiendo el envío del documento desde mi servidor asterisk a mi fax.
Muchas gracias por la ayuda.
Un saludo,
Fernando.

 

RE: Problema SendFax

Ya he conseguido el resolver el problema para el que yo mismo planteé la duda. Dejo aquí la solución por si alguien se encuentra con el mismo problema en algún momento.

Antes me adelantaba cuando decía que el problema no era debido al formato del documento que estaba intentando enviar ya que en efecto este ha sido el problema. Básicamente lo que yo estaba haciendo antes era abrir un fichero pdf con Vista Previa (visor de varios formatos de documentos para Mac OS X), en el menú archivo seleccionaba guardar como y posteriormente lo guardaba con el formato que aparece como TIFF. Por lo visto esto no es suficiente para que el documento sea válido para la transferencia vía FAX. Para que el documento sea válido generándolo a partir de un pdf la forma recomendada por el manual de Fax For Asterisk (FFA) es utilizar ghostscript. En línea de comandos de un sistema UNIX (yo lo he realizado tanto con Mac OS X como con Debian obteniendo los mimos resultados) utilizaríamos lo siguiente:

gs -q -dNOPAUSE -dBATCH -sDEVICE=tiffg4 -sPAPERSIZE=a4 -sColorMode=mono -sOutputFile=<nombre del fichero de salida, recomiendo hacerlo con extensión .tif> <nombre del fichero de entrada, un fichero pdf>

Asimismo, para más información sobre la conversión de documentos a .tif recomiendo echar un vistazo al manual de FFA, https://my.digium.com/en/login/index.php?page=/, en la página 34 en la respuesta a la pregunta: How do I create a TIFF file?

Problema al envío FAX

Buenas de nuevo,

una vez solucionado el problema del formato de los documentos a enviar, estoy experimentando un nuevo contratiempo relacionado con el envío de fax mediante la aplicación SendFax.

El callfile que estoy utilizando es:

 


Channel: DAHDI/1/0916XXXXXX

WaitTime: 45

MaxRetries: 0

RetryTime: 300

Context: fax-tx

Extension: send

Priority: 1

Archive: yes


Y el contexto fax-tx que interesa en este caso, es el sacado de la documentación oficial de Fax For Asterisk (cambiando evidentemente el nombre del fichero a enviar):

[fax-tx] 
exten => send,1,NoOp(**** SENDING FAX ****) 
exten => send,n,Wait(6) 
exten => send,n,Set(GLOBAL(FAXCOUNT)=$[ ${GLOBAL(FAXCOUNT)} + 1 ]) 
exten => send,n,Set(FAXCOUNT=${GLOBAL(FAXCOUNT)}) 
exten => send,n,Set(FAXFILE=dw-faxout.tif) 
; Set FAXOPTs 
exten => send,n,NoOp(**** SETTING FAXOPT ****) 
exten => send,n,Set(FAXOPT(ecm)=yes) 
exten => send,n,Set(FAXOPT(headerinfo)=Fax from $ 
{GLOBAL(LASTFAXCALLERNAME)} at ${GLOBAL(LASTFAXCALLERNUM)} was received.) 
exten => send,n,Set(FAXOPT(localstationid)=1234567890) 
exten => send,n,Set(FAXOPT(maxrate)=14400) 
exten => send,n,Set(FAXOPT(minrate)=2400) 
; Send the fax 
exten => send,n,NoOp(**** SENDING FAX : ${FAXFILE} ****) 
exten => send,n,SendFAX(/home/dwayne/faxout/${FAXFILE},d) 
; Hangup! Print FAXOPTs 
exten => h,1,NoOp(FAXOPT(ecm) : ${FAXOPT(ecm)}) 
exten => h,n,NoOp(FAXOPT(filename) : ${FAXOPT(filename)}) 
exten => h,n,NoOp(FAXOPT(headerinfo) : ${FAXOPT(headerinfo)}) 
exten => h,n,NoOp(FAXOPT(localstationid) : ${FAXOPT(localstationid)}) 
exten => h,n,NoOp(FAXOPT(maxrate) : ${FAXOPT(maxrate)}) 
exten => h,n,NoOp(FAXOPT(minrate) : ${FAXOPT(minrate)}) 
exten => h,n,NoOp(FAXOPT(pages) : ${FAXOPT(pages)}) 
exten => h,n,NoOp(FAXOPT(rate) : ${FAXOPT(rate)}) 
exten => h,n,NoOp(FAXOPT(remotestationid) : ${FAXOPT(remotestationid)}) 
exten => h,n,NoOp(FAXOPT(resolution) : ${FAXOPT(resolution)}) 
exten => h,n,NoOp(FAXOPT(status) : ${FAXOPT(status)}) 
exten => h,n,NoOp(FAXOPT(statusstr) : ${FAXOPT(statusstr)})exten => h,n,NoOp(FAXOPT(error) : ${FAXOPT(error)})

Una vez se copia el call file al directorio /var/spool/asterisk/outgoing, se obtiene el siguiente mensaje de la CLI:

debian*CLI> 
    -- Attempting call on DAHDI/1/0916XXXXXX for send@fax-tx:1 (Retry 1)
       > Channel DAHDI/1-1 was answered.
    -- Executing [send@fax-tx:1] NoOp("DAHDI/1-1", "**** SENDING FAX ****") in new stack
    -- Executing [send@fax-tx:2] Wait("DAHDI/1-1", "6") in new stack
[Jul 23 12:50:32] WARNING[3662]: ast_expr2.fl:445 ast_yyerror: ast_yyerror():  syntax error: syntax error, unexpected '+', expecting $end; Input:
  + 1 
  ^
[Jul 23 12:50:32] WARNING[3662]: ast_expr2.fl:449 ast_yyerror: If you have questions, please refer to doc/tex/channelvariables.tex.
    -- Executing [send@fax-tx:3] Set("DAHDI/1-1", "GLOBAL(FAXCOUNT)=") in new stack
  == Setting global variable 'FAXCOUNT' to ''
    -- Executing [send@fax-tx:4] Set("DAHDI/1-1", "FAXCOUNT=") in new stack
    -- Executing [send@fax-tx:5] Set("DAHDI/1-1", "FAXFILE=pruebaGS.tif") in new stack
    -- Executing [send@fax-tx:6] NoOp("DAHDI/1-1", "**** SETTING FAXOPT ****") in new stack
    -- Executing [send@fax-tx:7] Set("DAHDI/1-1", "FAXOPT(ecm)=yes") in new stack
    -- Executing [send@fax-tx:8] Set("DAHDI/1-1", "FAXOPT(headerinfo)=Fax from  at  was received.") in new stack
    -- Executing [send@fax-tx:9] Set("DAHDI/1-1", "FAXOPT(localstationid)=1234567890") in new stack
    -- Executing [send@fax-tx:10] Set("DAHDI/1-1", "FAXOPT(maxrate)=14400") in new stack
    -- Executing [send@fax-tx:11] Set("DAHDI/1-1", "FAXOPT(minrate)=2400") in new stack
    -- Executing [send@fax-tx:12] NoOp("DAHDI/1-1", "**** SENDING FAX : pruebaGS.tif ****") in new stack
    -- Executing [send@fax-tx:13] SendFAX("DAHDI/1-1", "/tmp/pruebaGS.tif,d") in new stack
    -- Channel 'DAHDI/1-1' sending FAX '/tmp/pruebaGS.tif'
    -- FAX handle 0: [ 1279882232.147162 ], STAT_EVT_STRT_TX       st: IDLE         rt: IDLENSTX
    -- FAX handle 0: [ 1279882232.148651 ], STAT_EVT_TX_HW_RDY     st: WT_TX_HW_RDY rt: TRDYNHTY
    -- FAX handle 0: [ 1279882232.149294 ], P30EVN_SEND_STARTED
    -- Channel 'DAHDI/1-1' FAX session '6' started
    -- FAX handle 0: [ 039.991363 ], STAT_EVT_T1_EXP        st: WT_DIS       rt: WDISNT1X
    -- FAX handle 0: [ 042.492353 ], STAT_EVT_HW_CLOSE      st: WT_HW_CLS    rt: WCLSNCLS
    -- FAX handle 0: [ 042.493860 ], STAT_SES_COMPLETE
    -- FAX handle 0: [ 042.494946 ], P30EVN_COMPLETE
    -- Channel 'DAHDI/1-1' FAX session '6' is complete, result: 'FAILED' (FAX_NO_FAX), error: 'T1_TIMEOUT', pages: 0, resolution: 'unknown', transfer rate: '2400', remoteSID: ''
    -- Auto fallthrough, channel 'DAHDI/1-1' status is 'UNKNOWN'
    -- Executing [h@fax-tx:1] NoOp("DAHDI/1-1", "FAXOPT(ecm) : no") in new stack
    -- Executing [h@fax-tx:2] NoOp("DAHDI/1-1", "FAXOPT(filename) : /tmp/pruebaGS.tif") in new stack
    -- Executing [h@fax-tx:3] NoOp("DAHDI/1-1", "FAXOPT(headerinfo) : Fax from  at  was received.") in new stack
    -- Executing [h@fax-tx:4] NoOp("DAHDI/1-1", "FAXOPT(localstationid) : 1234567890") in new stack
    -- Executing [h@fax-tx:5] NoOp("DAHDI/1-1", "FAXOPT(maxrate) : 14400") in new stack
    -- Executing [h@fax-tx:6] NoOp("DAHDI/1-1", "FAXOPT(minrate) : 2400") in new stack
    -- Executing [h@fax-tx:7] NoOp("DAHDI/1-1", "FAXOPT(pages) : 0") in new stack
    -- Executing [h@fax-tx:8] NoOp("DAHDI/1-1", "FAXOPT(rate) : 2400") in new stack
    -- Executing [h@fax-tx:9] NoOp("DAHDI/1-1", "FAXOPT(remotestationid) : ") in new stack
    -- Executing [h@fax-tx:10] NoOp("DAHDI/1-1", "FAXOPT(resolution) : unknown") in new stack
    -- Executing [h@fax-tx:11] NoOp("DAHDI/1-1", "FAXOPT(status) : FAILED") in new stack
    -- Executing [h@fax-tx:12] NoOp("DAHDI/1-1", "FAXOPT(statusstr) : FAX_NO_FAX") in new stack
    -- Executing [h@fax-tx:13] NoOp("DAHDI/1-1", "FAXOPT(error) : T1_TIMEOUT") in new stack
    -- Hungup 'DAHDI/1-1'
[Jul 23 12:51:14] NOTICE[3662]: pbx_spool.c:349 attempt_thread: Call completed to DAHDI/1/0916XXXXXX

De o que interpreto por la variable status que el envío ha fallado. No sé cómo interpretar los otros dos parámetros que me son dados, el statusstr a FAX_NO_FAX y el error a T1_TIMEOUT, ¿qué quieren decir exactamente?
En la máquina fax que se quiere emplear como destinatario del documento se recibe un tono de llamada pero el documento no llega a imprimirse en ningún caso.
¿Alguien me puede dar una referencia que me lleve en un buen camino a solucionar el problema? ¿Alguna idea de qué es lo que puede ser que esté mal hecho?
Muchas gracias por la ayuda.
Un saludo,
Fernando.

 

Problemas Fax

Hola que tal: bueno tengo 2 problemas con el fax, espero que me puedar dar una mano:

1.- tengo configurado el fax al interno 40, cuando hago la llamada al interno 40 desde otro interno, me da tono de fax, cuando entra la llamada por la FXO a un interno y quiere fax, se lo transfiere al interno 40 y da tono de fax, no hay problema, el problema es cuando el servidor contesta y se presiona directo el interno para tener tono de fax, el servidor no da tono de fax, el error es el siguiente app_dial.c:2345 dial_exec_full: Unable to create channel of type 'sip'.

2.- configure todo como la guia dice para poder mandar fax cuando intento me sale el siguiente error y no manda, este es el error:
Attempting call on DAHDI/1/2411516 for application SendFax(/home/fax/pruebafax.tiff) (Retry 1)
> Channel DAHDI/1-1 was answered.
> Launching SendFax(/home/fax/pruebafax.tiff) on DAHDI/1-1
[Aug 23 23:29:24] ERROR[17438]: res_fax.c:2183 sendfax_exec: access failure. Verify '/home/fax/pruebafax.tiff' exists and check permissions.
-- Hanging up on 'DAHDI/1-1'
-- Hungup 'DAHDI/1-1'

gracias por su ayuda y sigan adelante que hacen un buen trabajo....

Suscribirse a Comentarios de "Asterisk 1.6.X y la aplicacion SendFax" Suscribirse a VozToVoice - Todos los comentarios