Reputation: 11
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?
Upvotes: 1
Views: 2333
Reputation: 11
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.
Upvotes: 0
Reputation: 15259
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.
Upvotes: -1