We have a PRI with blocks of DID’s, and we wanted to have a single number for direct line & direct fax. Plus we really don’t want fax–we use email. Anyhow, I have taken 's fax2mail script and modified it to map extensions to email addresses to keep from duplicating entering that info. While we in it, we changed up a few things. Please let me know what you think, and if you see any pitfalls–I am new to *, so I maybe doing something stupid here?
fax2mail…
[code]#!/bin/bash
#--------------------------------------------------------------------------
|
File: fax2mail |
Type: BASH script |
Summary: fax to E-Mail helper application for asterisk PBX |
Description: fax2mail is a helper application which sits between |
asterisk and a MTA. Is is designed to be called by asterisk upon the |
receipt of a new fax. It will forward the received fax to the email |
address of choice, and will convert the file the one of several |
formats. |
Usage: |
fax2mail expects seven parameters from asterisk as follows: |
$1 = CallerID Number of fax sender |
$2 = CallerID Name of fax sender |
$3 = Fax number called |
$4 = Destination name |
$5 = Destination email address |
$6 = Fax file name (without .tif extension) |
$7 = Format conversion (n=none,p=pdf,e=eps) |
Dependencies: |
This application requires asterisk, ast_fax, app_rxfax, tifflib |
mime-construct |
Author: |
Designed and written by Michelle Dupuis on October 7, 2005 |
Michelle can be reached at support@ocgca |
This script and other related tools are avaiable for download |
at www.generationd.com |
#--------------------------------------------------------------------------
|
DATE VER AUTHOR DESCRIPTION |
Oct 7 2005 1.0 M Dupuis Original coding |
Oct 9 2005 1.8 M Dupuis Better parameter & email checking |
Oct 23 2005 1.9 M Dupuis Syntax error fixes, hand ! in ID name |
Oct 25 2005 2.0 M Dupuis Improved page count mechanism |
Nov 23 2006 2.1 J Puckett Generisized the script & pulled vars |
from voicemail.conf |
#--------------------------------------------------------------------------
#!/bin/bash
Script to mail the received file to the specified user
Send the tiff file to the email address
VERSION=“fax2mail v2.1"
LOGFILE=”/var/log/asterisk/faxlog" #Set to /dev/null to disable logging
DATETIME=$(date +"%A, %B %d %Y, at %I:%M %p")
FROMEMAIL="Asterisk PBX asterisk@domain.tld"
DEFAULTTO=“where.ever@domain.tld”
if [ ${#} -eq 0 ]; then
echo "Usage: $CMD_SCRIPT [-p | -e | -t] -f File [–cid-name ] [–cid-number ] [–dest-exten ] [–dest-name ] [–dest-number ]"
exit 1;
fi
CID_NAME="“
CID_NUMBER=”“
DEST_NAME=”“
DEST_EMAIL=”“
DEST_EXTEN=”“
FILE=”"
FORMAT=“pdf”
while [ ${#} -gt 0 ]; do
case “${1}” in
"–cid-name" )
CID_NAME=${2}
shift
;;
"--cid-number" )
CID_NUMBER=${2}
shift
;;
"--dest-name" )
DEST_NAME=${2}
shift
;;
"--dest-email" )
DEST_EMAIL=${2}
shift
;;
"--dest-exten" )
DEST_EXTEN=${2}
shift
;;
"--file" | "-f" )
FILE=${2}
shift
;;
"-e" )
FORMAT="eps"
;;
"-t" )
FORMAT="tif"
;;
esac
shift
done
if [ “$FILE” = “” ]; then
echo "Error: A file is required"
exit 1;
fi
echo >>$LOGFILE
echo $VERSION >>$LOGFILE
echo " Triggered on $DATETIME">>$LOGFILE
echo " CallerID number of fax sender = $CID_NUMBER">>$LOGFILE
echo " CallerID name of fax sender = $CID_NAME">>$LOGFILE
echo " Fax number called = $DEST_EXTEN">>$LOGFILE
echo " Destination name = $DEST_NAME">>$LOGFILE
echo " Destination email address = $DEST_EMAIL">>$LOGFILE
echo " Fax file name (without .tif extension) = $FILE">>$LOGFILE
echo " Attachment format conversion = $FORMAT">>$LOGFILE
Correct for missing info
if [ “$CID_NUMBER” = “” ] ; then
CID_NUMBER="“
echo " Set CallerID number of fax sender to $CID_NUMBER”>>$LOGFILE
fi
Must surround in quotes in case name is preceded by a !
if [ “$CID_NAME” = “” ] ; then
CID_NAME="“
echo " Set CallerID name of fax sender to $CID_NAME”>>$LOGFILE
fi
if [ “$DEST_EXTEN” = “” ] ; then
DEST_EXTEN="“
echo " Set Fax number called to $DEST_EXTEN”>>$LOGFILE
fi
Get destination name if empty
if [ “$DEST_NAME” = “” ] ; then
DEST_NAME=grep $DEST_EXTEN /etc/asterisk/voicemail.conf | cut -d, -f2
echo " Set Destination name to $DEST_NAME">>$LOGFILE
fi
Get destination email if empty
if [ “$DEST_EMAIL” = “” ] ; then
DEST_EMAIL=grep $DEST_EXTEN /etc/asterisk/voicemail.conf | cut -d, -f3-
if [ “$DEST_EMAIL” = “” ] ; then
DEST_EMAIL=$DEFAULTTO
fi
echo " Set Destination email address to $DEST_EMAIL">>$LOGFILE
fi
SOURCEFILE=$FILE.tif
DESTFILE=$FILE.$FORMAT
INFOFILE=$FILE.txt
if [ -e $SOURCEFILE ]
then
echo " Fax file $SOURCEFILE found.">>$LOGFILE
Read data from TIFF file
PAGES=$(tiffinfo $SOURCEFILE | grep “Page” | cut -d " " -f 1)
DT=$(tiffinfo $SOURCEFILE | grep “Date”)
DTFAX=${DT#:}
COUNT=${PAGES#-}
if [ -z $COUNT ]
then
# If didn’t find a page count, use the number of occurances of “spandsp"
COUNT=$(grep -c “spandsp” $SOURCEFILE)
if [ -z $COUNT ]
then
COUNT=”"
fi
fi
Do any conversions requested
case “$FORMAT” in
Check if PDF conversion required
“pdf” )
tiff2pdf -f -p letter $SOURCEFILE > $DESTFILE
#I like to keep arround for a few days & use tmpwatch to clean up
rm -f $SOURCEFILE
echo " Converted $SOURCEFILE to $DESTFILE.">>$LOGFILE
;;
Check if EPS conversion required
“eps” )
tiff2ps -2eaz -w 8.3 -h 11.7 $SOURCEFILE > $DESTFILE
rm -f $SOURCEFILE
echo " Converted $SOURCEFILE to $DESTFILE.">>$LOGFILE
;;
Default to leave as tif
*)
echo " No conversion of $SOURCEFILE required.">>$LOGFILE
;;
esac
echo -n >$INFOFILE
echo “Dear $DEST_NAME,”>>$INFOFILE
echo >>$INFOFILE
echo “You have just received a $COUNT page fax from $CID_NAME <$CID_NUMBER>, at phone number $DEST_EXTEN, on $DATETIME. The original fax document is attached in $FORMAT format.”>>$INFOFILE
echo >>$INFOFILE
echo >>$INFOFILE
echo >>$INFOFILE
cat $DESTFILE | mime-construct --subpart --attachment $CID_NAME-$CID_NUMBER.$FORMAT --type application/$FORMAT --file - >$FILE.part1
cat $INFOFILE | mime-construct --header “From: $FROMEMAIL” --to $DEST_EMAIL --subject “[Fax]: New fax from $CID_NAME <$CID_NUMBER>” --subpart-file $FILE.part1 --file -
echo " E-mailed file to $DEST_EMAIL">>$LOGFILE
Delete the destination file
echo " Removing destination file $DESTFILE">>$LOGFILE
rm -f $DESTFILE
Exit with OK status code
RETVAL=0
Else tif file is missing
else
echo " Fax file $SOURCEFILE not found.">>$LOGFILE
echo -n > $INFOFILE
echo “Dear $DEST_NAME,”>>$INFOFILE
echo >>$INFOFILE
echo “You have just received a fax attempt from $CID_NAME <$CID_NUMBER>, at phone number $DEST_EXTEN, on $DATETIME. There was a problem receiving the fax.”>>$INFOFILE
echo >>$INFOFILE
echo >>$INFOFILE
cat $INFOFILE | mime-construct --header “From: $FROMEMAIL” --to $DEST_EMAIL --subject “[Fax]: Failed fax attempt from $CID_NAME <$CID_NUMBER>” --file -
echo " "E-mailed warning to $DEST_EMAIL >>$LOGFILE
RETVAL=1
fi
Delete the temporary message file
rm -f $FILE.part1
rm -f $INFOFILE
echo >>$LOGFILE
exit with failure code
exit $RETVAL
[/code]
part of extensions.conf…
[code]
[default]
…Unimportant stuff removed for this…
;Detected fax call
exten => fax,1,Goto(fax,s,1)
[fax]
exten => s,1,Macro(recvfax)
exten => h,1,System(’/usr/bin/fax2mail --cid-number “${CALLERIDNUM}” --cid-name “${CALLERIDNAME}” --dest-exten “${INIT_EXTEN}” -f “${FAXFILE}”’)[/code]
part of macros.incl…
[macro-recvfax]
;
; Receive incoming fax macro:
;
exten => s,1,Set(FAXFILE=/var/spool/asterisk/fax/${STRFTIME(${EPOCH},,%Y%m%M%S)}-${CALLERIDNUM}-${INIT_EXTEN})
exten => s,2,rxfax(${FAXFILE}.tif)
Please let me know if you see anything that could cause issues.