added GSM_sALe recording compression script for archive servers
changed IVR regording to use recording_id only as filename git-svn-id: svn://192.168.202.10@712 3d104415-ff17-0410-8863-d5cf3c621b8a
This commit is contained in:
@@ -326,10 +326,11 @@ $affected_rows = $dbhA->do($stmtA);
|
||||
### if set to record this session, start recording ###
|
||||
if ($record_call =~ /Y/)
|
||||
{
|
||||
$filename = "$inbound_number$US$phone_number$US$ivr_id";
|
||||
#$filename = "$inbound_number$US$phone_number$US$ivr_id";
|
||||
$filename = "$ivr_id";
|
||||
### code to record call goes here ###
|
||||
|
||||
$AGI->exec("Monitor wav|/var/spool/asterisk/monitor/$inbound_number$US$phone_number$US$ivr_id|m");
|
||||
$AGI->exec("Monitor wav|/var/spool/asterisk/monitor/$filename|m");
|
||||
|
||||
### insert record into recording_log table ###
|
||||
$stmtA = "INSERT INTO recording_log (channel,server_ip,extension,start_time,start_epoch,length_in_sec,filename,lead_id,user,location) values('$channel','$server_ip','$inbound_number','$now_date','start_epoch','0','$filename','$lead_id','$user','$ivr_id');";
|
||||
|
||||
@@ -0,0 +1,164 @@
|
||||
#!/usr/bin/perl
|
||||
#
|
||||
# AST_CRON_GSM_SALE_recordings.pl
|
||||
#
|
||||
# IMPORTANT!!! used to delete recordings!!!
|
||||
#
|
||||
# runs every day, goes through all recordings to compress only the SALE recordings
|
||||
# and place them in a special directory
|
||||
#
|
||||
# put an entry into the cron of of your asterisk archive to run this script
|
||||
# every day or however often you desire
|
||||
#
|
||||
# This program assumes that recordings are saved as .wav
|
||||
# should be easy to change this code if you use .gsm instead
|
||||
#
|
||||
# Copyright (C) 2007 Matt Florell <vicidial@gmail.com> LICENSE: GPLv2
|
||||
#
|
||||
#
|
||||
# 1112-1245 - first build
|
||||
#
|
||||
|
||||
$save_statuses = '|SALE|UPSALE|UPSELL|XFER|A1|A2|A3|A4|';
|
||||
$save_statusesSQL = "'SALE','UPSALE','UPSELL','XFER','A1','A2','A3','A4'";
|
||||
$suffix = '-all.wav';
|
||||
$local_DIR = '/home2/cron/RECORDINGS';
|
||||
$GSM_DIR = '/home/cron/GSM';
|
||||
$use_date_DIRs = 1;
|
||||
|
||||
$secX = time();
|
||||
|
||||
$TDtarget = ($secX - 36000); # 10 hours ago
|
||||
|
||||
($Tsec,$Tmin,$Thour,$Tmday,$Tmon,$Tyear,$Twday,$Tyday,$Tisdst) = localtime($TDtarget);
|
||||
$Tyear = ($Tyear + 1900);
|
||||
$Tmon++;
|
||||
if ($Tmon < 10) {$Tmon = "0$Tmon";}
|
||||
if ($Tmday < 10) {$Tmday = "0$Tmday";}
|
||||
if ($Thour < 10) {$Thour = "0$Thour";}
|
||||
if ($Tmin < 10) {$Tmin = "0$Tmin";}
|
||||
if ($Tsec < 10) {$Tsec = "0$Tsec";}
|
||||
$BEGINdate = "$Tyear-$Tmon-$Tmday 00:00:00";
|
||||
$ENDdate = "$Tyear-$Tmon-$Tmday 23:59:59";
|
||||
|
||||
$BEGINdate = "2007-08-01 00:00:00";
|
||||
$ENDdate = "2007-08-31 23:59:59";
|
||||
|
||||
$soxbin = '';
|
||||
if ( -e ('/usr/bin/sox')) {$soxbin = '/usr/bin/sox';}
|
||||
else
|
||||
{
|
||||
if ( -e ('/usr/local/bin/sox')) {$soxbin = '/usr/local/bin/sox';}
|
||||
else
|
||||
{
|
||||
print "Can't find sox binary! Exiting...\n";
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
# default path to astguiclient configuration file:
|
||||
$PATHconf = '/etc/astguiclient.conf';
|
||||
|
||||
open(conf, "$PATHconf") || die "can't open $PATHconf: $!\n";
|
||||
@conf = <conf>;
|
||||
close(conf);
|
||||
$i=0;
|
||||
foreach(@conf)
|
||||
{
|
||||
$line = $conf[$i];
|
||||
$line =~ s/ |>|\n|\r|\t|\#.*|;.*//gi;
|
||||
if ( ($line =~ /^PATHhome/) && ($CLIhome < 1) )
|
||||
{$PATHhome = $line; $PATHhome =~ s/.*=//gi;}
|
||||
if ( ($line =~ /^PATHlogs/) && ($CLIlogs < 1) )
|
||||
{$PATHlogs = $line; $PATHlogs =~ s/.*=//gi;}
|
||||
if ( ($line =~ /^PATHagi/) && ($CLIagi < 1) )
|
||||
{$PATHagi = $line; $PATHagi =~ s/.*=//gi;}
|
||||
if ( ($line =~ /^PATHweb/) && ($CLIweb < 1) )
|
||||
{$PATHweb = $line; $PATHweb =~ s/.*=//gi;}
|
||||
if ( ($line =~ /^PATHsounds/) && ($CLIsounds < 1) )
|
||||
{$PATHsounds = $line; $PATHsounds =~ s/.*=//gi;}
|
||||
if ( ($line =~ /^PATHmonitor/) && ($CLImonitor < 1) )
|
||||
{$PATHmonitor = $line; $PATHmonitor =~ s/.*=//gi;}
|
||||
if ( ($line =~ /^VARserver_ip/) && ($CLIserver_ip < 1) )
|
||||
{$VARserver_ip = $line; $VARserver_ip =~ s/.*=//gi;}
|
||||
if ( ($line =~ /^VARDB_server/) && ($CLIDB_server < 1) )
|
||||
{$VARDB_server = $line; $VARDB_server =~ s/.*=//gi;}
|
||||
if ( ($line =~ /^VARDB_database/) && ($CLIDB_database < 1) )
|
||||
{$VARDB_database = $line; $VARDB_database =~ s/.*=//gi;}
|
||||
if ( ($line =~ /^VARDB_user/) && ($CLIDB_user < 1) )
|
||||
{$VARDB_user = $line; $VARDB_user =~ s/.*=//gi;}
|
||||
if ( ($line =~ /^VARDB_pass/) && ($CLIDB_pass < 1) )
|
||||
{$VARDB_pass = $line; $VARDB_pass =~ s/.*=//gi;}
|
||||
if ( ($line =~ /^VARDB_port/) && ($CLIDB_port < 1) )
|
||||
{$VARDB_port = $line; $VARDB_port =~ s/.*=//gi;}
|
||||
$i++;
|
||||
}
|
||||
|
||||
# Customized Variables
|
||||
$server_ip = $VARserver_ip; # Asterisk server IP
|
||||
if (!$VARDB_port) {$VARDB_port='3306';}
|
||||
|
||||
use DBI;
|
||||
|
||||
$dbhA = DBI->connect("DBI:mysql:$VARDB_database:$VARDB_server:$VARDB_port", "$VARDB_user", "$VARDB_pass")
|
||||
or die "Couldn't connect to database: " . DBI->errstr;
|
||||
|
||||
### directory where in/out recordings are saved to by Asterisk
|
||||
$dir1 = "$PATHmonitor";
|
||||
|
||||
|
||||
##### Get the lead_ids of all recordings that are not DELETED or NULL #####
|
||||
$stmtA = "SELECT recording_log.lead_id,recording_id,start_time,filename,location,status FROM recording_log,vicidial_log where start_time > '$BEGINdate' and start_time < '$ENDdate' and location IS NOT NULL and location NOT IN('','NOT_FOUND','NOT_FOUND_2','DELETED') and vicidial_log.status IN($save_statusesSQL) and call_date > '$BEGINdate' and call_date < '$ENDdate' and recording_log.lead_id=vicidial_log.lead_id and recording_log.user=vicidial_log.user order by recording_id LIMIT 500000;";
|
||||
print "$stmtA\n";
|
||||
|
||||
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
||||
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
||||
$sthArows=$sthA->rows;
|
||||
$i=0;
|
||||
while ($sthArows > $i)
|
||||
{
|
||||
@aryA = $sthA->fetchrow_array;
|
||||
$lead_ids[$i] = "$aryA[0]";
|
||||
$recording_ids[$i] = "$aryA[1]";
|
||||
$start_times[$i] = "$aryA[2]";
|
||||
$filenames[$i] = "$aryA[3]";
|
||||
$locations[$i] = "$aryA[4]";
|
||||
$status[$i] = "$aryA[5]";
|
||||
$i++;
|
||||
}
|
||||
$sthA->finish();
|
||||
|
||||
|
||||
##### Go through the list of sales recordings and compress all of them #####
|
||||
$i=0;
|
||||
$WAV='-all.wav';
|
||||
$GSM='-all.gsm';
|
||||
foreach(@lead_ids)
|
||||
{
|
||||
if ($use_date_DIRs)
|
||||
{
|
||||
$date_DIR = $start_times[$i];
|
||||
$date_DIR =~ s/ .*//gi;
|
||||
$date_DIR .= "/";
|
||||
}
|
||||
else {$date_DIR=''}
|
||||
if ( -e ("$GSM_DIR/$date_DIR")) {$nothing=1;}
|
||||
else {mkdir("$GSM_DIR/$date_DIR");}
|
||||
if ( -e ("$GSM_DIR/$date_DIR$filenames[$i]$GSM"))
|
||||
{print "DUPLICATE: $GSM_DIR/$date_DIR$filenames[$i]$GSM EXISTS\n";}
|
||||
else
|
||||
{
|
||||
`$soxbin "$local_DIR/$date_DIR$filenames[$i]$WAV" "$GSM_DIR/$date_DIR$filenames[$i]$GSM"`;
|
||||
print "$soxbin \"$local_DIR/$date_DIR$filenames[$i]$WAV\" \"$GSM_DIR/$date_DIR$filenames[$i]$GSM\"\n";
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
|
||||
print "TOTAL COMPRESSED: $i\n";
|
||||
|
||||
if ($v) {print "DONE... EXITING\n\n";}
|
||||
|
||||
$dbhA->disconnect();
|
||||
|
||||
|
||||
exit;
|
||||
Reference in New Issue
Block a user