mail-lenny-file.agi (Source)

#!/bin/bash
# After hangup on a channel with a conversation with Lenny, convert the .wav
# file to MP3 and mail it
source $AST_AGI_DIR/bashagi.sh

EMAIL_TO_NAME="Brian"
EMAIL_TO_ADDR="brian2@groupbcl.ca"

function die { AGI_VERBOSE "Error: $1"; exit 1; }

# Function: seconds_to_DHMS <SECONDS>
# Converts a time in seconds to a human readable time
function seconds_to_DHMS() {
    local SECONDS=$1
    local INCLUDE_SECONDS=true
    local X=""

    if [ $SECONDS -ge 86400 ]; then
        local DAYS=$((SECONDS / 86400))
        SECONDS=$((SECONDS % 86400))
        [ $DAYS == 1 ] && _s='' || _s='s'
        X="$DAYS day$_s "
        INCLUDE_SECONDS=false
    fi  

    if [ $SECONDS -ge 3600 ]; then
        local HOURS=$((SECONDS / 3600))
        SECONDS=$((SECONDS % 3600))
        [ $HOURS == 1 ] && _s='' || _s='s'
        X="${X}$HOURS hour$_s "
        INCLUDE_SECONDS=false
    fi  

    if [ $SECONDS -ge 60 ]; then
        local MINUTES=$((SECONDS / 60))
        SECONDS=$((SECONDS % 60))
        [ $MINUTES == 1 ] && _s='' || _s='s'
        X="${X}$MINUTES minute$_s "
    fi  

    if $INCLUDE_SECONDS; then
        [ $SECONDS == 1 ] && _s='' || _s='s'
        X="${X}$SECONDS second$_s "
    fi  

    echo "${X% }"   # (Trim trailing blank from $X)
}

[ "$1" ] || die "Missing the name of the recording file"


##---------------------------------------------------------------------------##
#                   M A I N   P R O C E S S I N G
##---------------------------------------------------------------------------##
#--- Prepare variables and start background operation
if [ "$1" != '--background' ]
then
    AGI_read_vars
    export RECORDING_FN="$1"
    AGI_background
    exit
fi

#--- Wait for Asterisk to close the recording
if [ "$AGI_VERBOSE_FN" -a "$AGI_VERBOSE_FN" != '/dev/stdout' ]
then
    AGI_VERBOSE "Waiting for Asterisk to close the recording file"
    inotifywait -q -e close_write -t5 "$AST_MONITOR_DIR/$RECORDING_FN"
fi

#--- Normalise the CallerID number
/usr/local/bin/show_env.sh
CNUM="$AGI_CALLERID"
CNAM="$AGI_CALLERIDNAME"
[ "${CNUM:0:1}" == 1 ] && ONE_DASH='1-' CNUM=${CNUM:1}
CNUM="${ONE_DASH}${CNUM:0:3}-${CNUM:3:3}-${CNUM:6}"

#--- Convert the recording to MP3
AGI_VERBOSE "Coverting file to MP3"
EMAIL_ATTACHMENT_FN="/tmp/$(basename "${RECORDING_FN/.wav/.mp3}")"
MTIME="$(stat -c %Y "$AST_MONITOR_DIR/$RECORDING_FN")"
ID3_TITLE="$(date +'%b %-d %Y' --date @$MTIME) from $CNUM"
ID3_ARTIST="Asterisk and FreePBX"
ID3_ALBUM="It's Lenny!"
ID3_YEAR=$(date +%Y --date @$MTIME)
ID3_COMMENT="$(hostname)"
nice lame --silent --preset phone --tt "$ID3_TITLE" --ta "$ID3_ARTIST" \
  --tl "$ID3_ALBUM" --ty "$ID3_YEAR" --tc "$ID3_COMMENT" --tg "100" \
  --id3v1-only "$AST_MONITOR_DIR/$RECORDING_FN" "$EMAIL_ATTACHMENT_FN"

#--- Prepare the email message
USER="$(grep ":$UID:" /etc/passwd | cut -f1 -d:)"
RECORDING_LENGTH="$(seconds_to_DHMS $(soxi -D "$AST_MONITOR_DIR/$RECORDING_FN" | cut -f1 -d.))"
RECORDING_SIZE="$(ls -lh $EMAIL_ATTACHMENT_FN | awk '{print $5}')"
EMAIL_ATTACHMENT_BASENAME="$(basename "$EMAIL_ATTACHMENT_FN")"
EMAIL_FROM_NAME="$USER on $(hostname | awk -F. '{print $1}')"
EMAIL_FROM_ADDR="${USER}@${HOSTNAME}"
EMAIL_SUBJECT="Conversation with Lenny from $CNUM"
EMAIL_FN='/tmp/email.text'
BABBAGE="\"On two occasions, I have been asked [by members of Parliament],"
BABBAGE="${BABBAGE} 'Pray, Mr. Babbage, if you put into the machine wrong figures,"
BABBAGE="${BABBAGE} will the right answers come out?'"
BABBAGE="${BABBAGE} I am not able to rightly apprehend the kind of confusion of ideas"
BABBAGE="${BABBAGE} that could provoke such a question.\""
BABBAGE="${BABBAGE}\n  -- Charles Babbage (1791-1871)"
MIME_BOUNDARY="_----------$(date +%s)"

AGI_VERBOSE "Sending email: $EMAIL_SUBJECT"

# Headers
echo "From: $EMAIL_FROM_NAME <$EMAIL_FROM_ADDR>" >$EMAIL_FN
echo "To: $EMAIL_TO_NAME <$EMAIL_TO_ADDR>" >>$EMAIL_FN
echo "Date: $(date +'%a, %-d %b %Y %T %z')" >>$EMAIL_FN
echo "Subject: $EMAIL_SUBJECT" >>$EMAIL_FN
echo "MIME-Version: 1.0" >>$EMAIL_FN
echo "Content-Type: multipart/mixed; boundary=$MIME_BOUNDARY" >>$EMAIL_FN
echo >>$EMAIL_FN
echo "This is a multi-part message in MIME format." >>$EMAIL_FN

# Message body
echo "--$MIME_BOUNDARY" >>$EMAIL_FN
echo "Content-Disposition: inline" >>$EMAIL_FN
echo "Content-Transfer-Encoding: 8bit" >>$EMAIL_FN
echo "Content-Type: text/plain" >>$EMAIL_FN
echo >>$EMAIL_FN
echo -n "A caller from $CNUM (CallerID name '$CNAM') had a conversation with "  >>$EMAIL_FN
echo "Lenny that lasted for $RECORDING_LENGTH."  >>$EMAIL_FN
echo >>$EMAIL_FN
echo -e "$BABBAGE" >>$EMAIL_FN

# Attachment
echo "--$MIME_BOUNDARY" >>$EMAIL_FN
echo "Content-Type: audio/mpeg" >>$EMAIL_FN
echo "Content-Disposition: attachment; filename=$EMAIL_ATTACHMENT_BASENAME" >>$EMAIL_FN
echo "Content-Transfer-Encoding: base64" >>$EMAIL_FN
echo >>$EMAIL_FN
AGI_VERBOSE "Base-64 encoding attachment $EMAIL_ATTACHMENT_FN (size $RECORDING_SIZE)"
base64 "$EMAIL_ATTACHMENT_FN" >>$EMAIL_FN
echo "--${MIME_BOUNDARY}--" >>$EMAIL_FN

#   AGI_VERBOSE "Not sending email; review files $EMAIL_ATTACHMENT_FN and $EMAIL_FN"
#   exit

AGI_VERBOSE 'Sending mesasge'
RESULT="$(//usr/sbin/sendmail -t <$EMAIL_FN 2>&1)"
[ "$RESULT" ] && AGI_VERBOSE "$RESULT"
rm -f $EMAIL_ATTACHMENT_FN $EMAIL_FN 
AGI_VERBOSE 'Email sent; exiting background script'

# vim: tabstop=4