Asterisk Faxing Part 1: Receiving Faxes
We recently decided to eliminate some legacy fax lines and utilize asterisk’s built in fax functionality. It was surprisingly straight forward to do. We don’t do a ton of faxing, but we deal with enough old school companies that we have to support it.
Setting up a DID to receive a fax looks like…
exten => 5551234567,1,NoOp(Lets get a fax!)
same => SET(email=email@example.com)
same => SET(datetime=${STRFTIME(,,%T%F)})
; where we put the TIF
same => SET(tiffpath=/var/spool/received-faxes/${datetime}.tif)
; where we put the PDF
same => SET(pdfpath=/var/spool/asterisk/converted-faxes/${email}/${datetime}.pdf)
; get the fax and store the given tif file
same => ReceiveFAX(${tifffpath})
; Use convert the tif to a PDF (install ImageMagick to get convert command)
same => System(/usr/bin/convert ${tiffpath} ${pdfpath})
; Send the PDF in an e-mail
same => System(mail -s "Received Fax" -a ${pdfpath} ${email} << "You got a fax!")
same => Hangup()
Once we got one number and running it was simple enough to extract that in to a subroutine. Now we can easily set up different numbers to send faxes to different e-mails.
[receivefax]
; ARG1 - the e-mail to send to
exten => 1,s,NoOp(lets receive a fax - subroutine style)
same => SET(LOCAL(email)=${ARG1})
same => SET(LOCAL(datetime)=${STRFTIME(,,%T%F)})
; where we put the TIF
same => SET(LOCAL(tiffpath)=/var/spool/received-faxes/${datetime}.tif)
; where we put the PDF
same => SET(LOCAL(pdfpath)=/var/spool/asterisk/converted-faxes/${email}/${datetime}.pdf)
; get the fax and store the given tif file
same => ReceiveFAX(${tifffpath})
; Use convert the tif to a PDF (install ImageMagick to get convert command)
same => System(/usr/bin/convert ${tiffpath} ${pdfpath})
; Send the PDF in an e-mail
same => System(mail -s "Received Fax" -a ${pdfpath} ${email} << "You got a fax!")
same => Return()
[incomingdids]
exten => 5551234567,1,Gosub(receivefax,s,1(email@example.com))
same => n,Hangup()
exten => 5551234568,1,Gosub(receivefax,s,1(email2@example.com))
same => n,Hangup()
exten => 5551234569,1,Gosub(receivefax,s,1(email3@example.com))
same => n,Hangup()
I’ll write up part 2 about how send faxes later this week. It was definitely a more complex problem than receiving the faxes.