FreePBX/Asterisk Recorded Calls not moving to correct location

2.2k views Asked by At

FreePBX: 10.13.66-12/ISO install

Asterisk: 13.12.2

asterisk-addons: Latest

Users reported not being able to see/download on demand recordings from the UCP. The calls are however being recorded, /var/spool/asterisk/monitor is full of files, files that should have been moved to the appropriate date directories. e.g. 2016/12/15. I have setup a Post Call Recording Script that is set in FreePBX, this also doesn't run. It is simply to see if it ever gets called, appends to a file.

-rw-rw-r-- 1 asterisk asterisk 120364 Dec 15 17:20 1481858418.2722.wav

-rw-r--r-- 1 asterisk asterisk 147884 Dec 16 10:02 1481918523.4964.wav

The top file permissions were changed after running fwconsole chown. This leads me to think that asterisk doesn't have the correct permissions.

This is the breakdown of the debug log for MixMonitor

[2016-12-15 17:03:14] VERBOSE[20476] app_mixmonitor.c: Begin MixMonitor Recording SIP/200-00000125

[2016-12-15 17:03:24] VERBOSE[20476] app_mixmonitor.c: MixMonitor close filestream (mixed)`

[2016-12-15 17:03:24] VERBOSE[20476] app_mixmonitor.c: End MixMonitor Recording SIP/200-00000125

[2016-12-15 17:03:24] VERBOSE[20476] app_mixmonitor.c: Copying recordings for Mixmonitor SIP/200-00000125 to voicemail recipients

[2016-12-15 17:03:24] WARNING[20476] format_wav.c: Unable to set write file size

I have tried changing permissions, re-installing the asterisk-addons, and many other things. Any ideas out there?

2

There are 2 answers

3
arheops On

Correct solution - write file in place where it should be, i.e it to 2016/12/15

It is impossible guess what you dooing wrong(no scripts provided, config etc), but i can suggest you have selinux or permission issue.

0
Patrick L On

Answering my own question.

This is an issue with digium phones and freepbx. Digium uses their own technique to record and save calls. https://wiki.asterisk.org/wiki/display/DIGIUM/Phone+Features+by+Environment

There is a solution to have the calls show up in the CDR and User Portal, but involves changes to the system. Use at you own risk.

Create an executable script belonging to the asterisk user, I keep mine in the asterisk user home directory.

#!/bin/bash

#this script is run from an incrontab

MONITOR=/var/spool/asterisk/monitor/
if [ -d "$MONITOR$1" ]; then
    exit
fi
if [ ! -f "$MONITOR$1" ]; then
    echo "$(date): Failed to move a recording. \"$MONITOR$1\" does not exist." >> /var/log/asterisk/moved_recording_log
    exit
fi

filename=$1
uid=${filename%.*}

if [ $(sed -e "s/^.wav//I" <<< "${filename##*.}") != "wav" ]; then
    exit
fi

CONF=/etc/asterisk/res_odbc_additional.conf
user=$(awk -F"=>" '/username=>/ {print $2}' ${CONF})
password=$(awk -F"=>" '/password=>/ {print $2}' ${CONF})

db=$( mysql asteriskcdrdb -u $user -p$password -se  "SELECT cnum, calldate as date FROM cdr WHERE uniqueid = \"$uid\";" 2>/dev/null )

ext=$(echo $db | awk '{print $1}')
read -r -a dbd <<< "$db"
IFS="-" read -r -a dbdate <<< "${dbd[1]}"

if [ -z "${dbdate[0]}" ] || [ -z "${dbdate[1]}" ] || [ -z "${dbdate[2]}" ]; then
    exit
fi

dir="/var/spool/asterisk/monitor/${dbdate[0]}/${dbdate[1]}/${dbdate[2]}/"
mkdir -p $dir

name="ondemand-${dbd[0]}-${dbd[0]}-${dbdate[0]}${dbdate[1]}${dbdate[2]}-${dbd[2]//:}-$filename"
db=$(mysql asteriskcdrdb -u $user -p$password -se  "UPDATE cdr SET recordingfile=\"$name\" WHERE uniqueid = \"$uid\";")
mv $MONITOR$filename $dir$name

exit

The next step is what watches the recordings directory for any files that have been written.

As the asterisk user edit incrontab

incrontab -e

add the following with the location and name of the above script

/var/spool/asterisk/monitor/ IN_CLOSE_WRITE /bin/bash /home/asterisk/move_recordings.sh $#

This is based on a pretty generic FreePBX setup. There may be a nicer way to do this, but this has been working for me.