changed agi-transfer scripts to use new AGI_output setting
changed agi-transfer scripts to look for agent every 0.5 second for first 4 sec on hold git-svn-id: svn://192.168.202.10@175 3d104415-ff17-0410-8863-d5cf3c621b8a
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/perl
|
#!/usr/bin/perl
|
||||||
#
|
#
|
||||||
# agi-VDAD_LB_transfer.agi version 0.4 *DBI-version*
|
# agi-VDAD_LB_transfer.agi version 0.5 *DBI-version*
|
||||||
# Load Balanced - when a call comes in on this server the script looks for an agent
|
# Load Balanced - when a call comes in on this server the script looks for an agent
|
||||||
# on any server on the network on the same campaign to send call to.
|
# on any server on the network on the same campaign to send call to.
|
||||||
#
|
#
|
||||||
@@ -31,13 +31,26 @@
|
|||||||
# 60503-1043 - Added safe harbor and drop second options from campaign
|
# 60503-1043 - Added safe harbor and drop second options from campaign
|
||||||
# 60731-1441 - changed to use DBI-DBD::mysql
|
# 60731-1441 - changed to use DBI-DBD::mysql
|
||||||
# - changed to use /etc/astguiclient.conf for configs
|
# - changed to use /etc/astguiclient.conf for configs
|
||||||
|
# 60816-1034 - added output options check from database
|
||||||
|
# - changed look for agent every 0.5 second for first 4 sec on hold
|
||||||
#
|
#
|
||||||
|
|
||||||
$V = 1; # set to 1 for verbose mode
|
$script = 'agi-VDAD_LB_transfer.agi';
|
||||||
$M = 1; # set to 1 for 2 line messages mode
|
|
||||||
|
|
||||||
$DROP_TIME = 10; # default number of seconds to wait until you drop a waiting call
|
$DROP_TIME = 10; # default number of seconds to wait until you drop a waiting call
|
||||||
|
|
||||||
|
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
|
||||||
|
$year = ($year + 1900);
|
||||||
|
$mon++;
|
||||||
|
if ($mon < 10) {$mon = "0$mon";}
|
||||||
|
if ($mday < 10) {$mday = "0$mday";}
|
||||||
|
if ($hour < 10) {$Fhour = "0$hour";}
|
||||||
|
if ($min < 10) {$min = "0$min";}
|
||||||
|
if ($sec < 10) {$sec = "0$sec";}
|
||||||
|
|
||||||
|
$now_date_epoch = time();
|
||||||
|
$now_date = "$year-$mon-$mday $hour:$min:$sec";
|
||||||
|
|
||||||
# default path to astguiclient configuration file:
|
# default path to astguiclient configuration file:
|
||||||
$PATHconf = '/etc/astguiclient.conf';
|
$PATHconf = '/etc/astguiclient.conf';
|
||||||
|
|
||||||
@@ -76,10 +89,8 @@ foreach(@conf)
|
|||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Customized Variables
|
|
||||||
$server_ip = $VARserver_ip; # Asterisk server IP
|
|
||||||
|
|
||||||
if (!$VARDB_port) {$VARDB_port='3306';}
|
if (!$VARDB_port) {$VARDB_port='3306';}
|
||||||
|
if (!$AGILOGfile) {$AGILOGfile = "$PATHlogs/agiout.$year-$mon-$mday";}
|
||||||
|
|
||||||
use DBI;
|
use DBI;
|
||||||
use Time::HiRes ('gettimeofday','usleep','sleep'); # necessary to have perl sleep command of less than one second
|
use Time::HiRes ('gettimeofday','usleep','sleep'); # necessary to have perl sleep command of less than one second
|
||||||
@@ -87,23 +98,43 @@ use Asterisk::AGI;
|
|||||||
$AGI = new Asterisk::AGI;
|
$AGI = new Asterisk::AGI;
|
||||||
|
|
||||||
|
|
||||||
|
$dbhA = DBI->connect("DBI:mysql:$VARDB_database:$VARDB_server:$VARDB_port", "$VARDB_user", "$VARDB_pass")
|
||||||
|
or die "Couldn't connect to database: " . DBI->errstr;
|
||||||
|
|
||||||
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
|
### Grab Server values from the database
|
||||||
$year = ($year + 1900);
|
$stmtA = "SELECT voicemail_dump_exten,ext_context,answer_transfer_agent,local_gmt,asterisk_version,max_vicidial_trunks,agi_output FROM servers where server_ip = '$VARserver_ip';";
|
||||||
$mon++;
|
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
||||||
if ($mon < 10) {$mon = "0$mon";}
|
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
||||||
if ($mday < 10) {$mday = "0$mday";}
|
$sthArows=$sthA->rows;
|
||||||
if ($hour < 10) {$Fhour = "0$hour";}
|
$rec_count=0;
|
||||||
if ($min < 10) {$min = "0$min";}
|
while ($sthArows > $rec_count)
|
||||||
if ($sec < 10) {$sec = "0$sec";}
|
{
|
||||||
|
@aryA = $sthA->fetchrow_array;
|
||||||
|
$DBvoicemail_dump_exten = "$aryA[0]";
|
||||||
|
$DBext_context = "$aryA[1]";
|
||||||
|
$DBanswer_transfer_agent = "$aryA[2]";
|
||||||
|
$DBSERVER_GMT = "$aryA[3]";
|
||||||
|
$DBasterisk_version = "$aryA[4]";
|
||||||
|
$DBmax_vicidial_trunks = "$aryA[5]";
|
||||||
|
$DBagi_output = "$aryA[6]";
|
||||||
|
if ($DBvoicemail_dump_exten) {$voicemail_dump_exten = $DBvoicemail_dump_exten;}
|
||||||
|
if ($DBext_context) {$ext_context = $DBext_context;}
|
||||||
|
if ($DBanswer_transfer_agent) {$answer_transfer_agent = $DBanswer_transfer_agent;}
|
||||||
|
if ($DBSERVER_GMT) {$SERVER_GMT = $DBSERVER_GMT;}
|
||||||
|
if ($DBasterisk_version) {$AST_ver = $DBasterisk_version;}
|
||||||
|
if ($DBmax_vicidial_trunks) {$max_vicidial_trunks = $DBmax_vicidial_trunks;}
|
||||||
|
if ($DBagi_output =~ /STDERR/) {$AGILOG = '1';}
|
||||||
|
if ($DBagi_output =~ /FILE/) {$AGILOG = '2';}
|
||||||
|
if ($DBagi_output =~ /BOTH/) {$AGILOG = '3';}
|
||||||
|
$rec_count++;
|
||||||
|
}
|
||||||
|
$sthA->finish();
|
||||||
|
|
||||||
$now_date_epoch = time();
|
|
||||||
$now_date = "$year-$mon-$mday $hour:$min:$sec";
|
|
||||||
$start_time=$now_date;
|
$start_time=$now_date;
|
||||||
$CIDdate = "$mon$mday$hour$min$sec";
|
$CIDdate = "$mon$mday$hour$min$sec";
|
||||||
$tsSQLdate = "$year$mon$mday$hour$min$sec";
|
$tsSQLdate = "$year$mon$mday$hour$min$sec";
|
||||||
$SQLdate = "$year-$mon-$mday $hour:$min:$sec";
|
$SQLdate = "$year-$mon-$mday $hour:$min:$sec";
|
||||||
$SQLdateBEGIN = $SQLdate;
|
$SQLdateBEGIN = $SQLdate;
|
||||||
|
|
||||||
$BDtarget = ($secX - 5);
|
$BDtarget = ($secX - 5);
|
||||||
($Bsec,$Bmin,$Bhour,$Bmday,$Bmon,$Byear,$Bwday,$Byday,$Bisdst) = localtime($BDtarget);
|
($Bsec,$Bmin,$Bhour,$Bmday,$Bmon,$Byear,$Bwday,$Byday,$Bisdst) = localtime($BDtarget);
|
||||||
@@ -121,12 +152,12 @@ if ($Bsec < 10) {$Bsec = "0$Bsec";}
|
|||||||
### begin parsing run-time options ###
|
### begin parsing run-time options ###
|
||||||
if (length($ARGV[0])>1)
|
if (length($ARGV[0])>1)
|
||||||
{
|
{
|
||||||
if ($V) {print STDERR "Perl Environment Dump:\n";}
|
if ($AGILOG) {$agi_string = "Perl Environment Dump:"; &agi_output;}
|
||||||
$i=0;
|
$i=0;
|
||||||
while ($#ARGV >= $i)
|
while ($#ARGV >= $i)
|
||||||
{
|
{
|
||||||
$args = "$args $ARGV[$i]";
|
$args = "$args $ARGV[$i]";
|
||||||
if ($V) {print STDERR "$i|$ARGV[$i]|\n";}
|
if ($AGILOG) {$agi_string = "$i|$ARGV[$i]"; &agi_output;}
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -160,17 +191,13 @@ if ($V) {print STDERR "Perl Environment Dump:\n";}
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
if ($V) {print "no command line options set\n";}
|
|
||||||
}
|
|
||||||
|
|
||||||
$|=1;
|
$|=1;
|
||||||
while(<STDIN>)
|
while(<STDIN>)
|
||||||
{
|
{
|
||||||
chomp;
|
chomp;
|
||||||
last unless length($_);
|
last unless length($_);
|
||||||
if ($V)
|
if ($AGILOG)
|
||||||
{
|
{
|
||||||
if (/^agi_(\w+)\:\s+(.*)$/)
|
if (/^agi_(\w+)\:\s+(.*)$/)
|
||||||
{
|
{
|
||||||
@@ -194,8 +221,7 @@ if ( (length($callerid)>20) && ($callerid =~ /\"\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S
|
|||||||
### set the callerid to the ACQS value(calleridname)
|
### set the callerid to the ACQS value(calleridname)
|
||||||
print "SET CALLERID $callerid\n";
|
print "SET CALLERID $callerid\n";
|
||||||
checkresult($result);
|
checkresult($result);
|
||||||
print STDERR "callerID changed: $callerid\n";
|
if ($AGILOG) {$agi_string = "callerID changed: $callerid"; &agi_output;}
|
||||||
|
|
||||||
}
|
}
|
||||||
if ( (
|
if ( (
|
||||||
(length($calleridname)>5) && ( (!$callerid) or ($callerid =~ /unknown|private|00000000/i) or ($callerid =~ /5551212/) )
|
(length($calleridname)>5) && ( (!$callerid) or ($callerid =~ /unknown|private|00000000/i) or ($callerid =~ /5551212/) )
|
||||||
@@ -205,74 +231,42 @@ if ( (
|
|||||||
### set the callerid to the ACQS value(calleridname)
|
### set the callerid to the ACQS value(calleridname)
|
||||||
print "SET CALLERID $callerid\n";
|
print "SET CALLERID $callerid\n";
|
||||||
checkresult($result);
|
checkresult($result);
|
||||||
print STDERR "callerID changed: $callerid\n";
|
if ($AGILOG) {$agi_string = "callerID changed: $callerid"; &agi_output;}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if ($V)
|
if ($AGILOG) {$agi_string = "AGI Environment Dump:"; &agi_output;}
|
||||||
{
|
|
||||||
|
|
||||||
if ($V) {print STDERR "AGI Environment Dump:\n";}
|
foreach $i (sort keys %AGI)
|
||||||
foreach $i (sort keys %AGI) {
|
{
|
||||||
if ($V) {print STDERR " -- $i = $AGI{$i}\n";}
|
if ($AGILOG) {$agi_string = " -- $i = $AGI{$i}"; &agi_output;}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($AGILOG) {$agi_string = "AGI Variables: |$unique_id|$channel|$extension|$type|$callerid|$calleridname|$priority|"; &agi_output;}
|
||||||
|
|
||||||
$VDADcampaign='';
|
$VDADcampaign='';
|
||||||
$VDADphone='';
|
$VDADphone='';
|
||||||
$VDADphone_code='';
|
$VDADphone_code='';
|
||||||
|
|
||||||
if ($V) {print STDERR "AGI Environment Dump: |$unique_id|$channel|$extension|$type|$callerid|$calleridname|$priority|\n";}
|
|
||||||
|
|
||||||
|
|
||||||
$callerid =~ s/\"//gi;
|
$callerid =~ s/\"//gi;
|
||||||
$CIDlead_id = $callerid;
|
$CIDlead_id = $callerid;
|
||||||
$CIDlead_id = substr($CIDlead_id, 11, 9);
|
$CIDlead_id = substr($CIDlead_id, 11, 9);
|
||||||
$CIDlead_id = ($CIDlead_id + 0);
|
$CIDlead_id = ($CIDlead_id + 0);
|
||||||
|
|
||||||
if ($V) {print STDERR "\nCALL RECEIVED IN FROM VDAD: $callerid $channel $priority\n";}
|
if ($AGILOG) {$agi_string = "+++++ VDAD START : |$CIDlead_id|$now_date|$AST_ver|$priority|"; &agi_output;}
|
||||||
if ($M) {print STDERR "+++++ VDAD START : |$unique_id|$channel|$extension|$type|$callerid|$CIDlead_id|$now_date|$AST_ver|$priority|\n";}
|
|
||||||
|
|
||||||
if ( ($channel =~ /Local/i) && ($AST_ver !~ /^1\.0\.8|^1\.0\.9/) )
|
if ( ($channel =~ /Local/i) && ($AST_ver !~ /^1\.0\.8|^1\.0\.9/) )
|
||||||
{
|
{
|
||||||
if ($M) {print STDERR "+++++ VDAD START LOCAL CHANNEL: EXITING- $priority\n";}
|
if ($AGILOG) {$agi_string = "+++++ VDAD START LOCAL CHANNEL: EXITING- $priority"; &agi_output;}
|
||||||
if ($priority > 2) {sleep(1);}
|
if ($priority > 2) {sleep(1);}
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$dbhA = DBI->connect("DBI:mysql:$VARDB_database:$VARDB_server:$VARDB_port", "$VARDB_user", "$VARDB_pass")
|
|
||||||
or die "Couldn't connect to database: " . DBI->errstr;
|
|
||||||
|
|
||||||
### Grab Server values from the database
|
|
||||||
$stmtA = "SELECT voicemail_dump_exten,ext_context,answer_transfer_agent,local_gmt,asterisk_version,max_vicidial_trunks FROM servers where server_ip = '$server_ip';";
|
|
||||||
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
|
||||||
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
|
||||||
$sthArows=$sthA->rows;
|
|
||||||
$rec_count=0;
|
|
||||||
while ($sthArows > $rec_count)
|
|
||||||
{
|
|
||||||
@aryA = $sthA->fetchrow_array;
|
|
||||||
$DBvoicemail_dump_exten = "$aryA[0]";
|
|
||||||
$DBext_context = "$aryA[1]";
|
|
||||||
$DBanswer_transfer_agent = "$aryA[2]";
|
|
||||||
$DBSERVER_GMT = "$aryA[3]";
|
|
||||||
$DBasterisk_version = "$aryA[4]";
|
|
||||||
$DBmax_vicidial_trunks = "$aryA[5]";
|
|
||||||
if ($DBvoicemail_dump_exten) {$voicemail_dump_exten = $DBvoicemail_dump_exten;}
|
|
||||||
if ($DBext_context) {$ext_context = $DBext_context;}
|
|
||||||
if ($DBanswer_transfer_agent) {$answer_transfer_agent = $DBanswer_transfer_agent;}
|
|
||||||
if ($DBSERVER_GMT) {$SERVER_GMT = $DBSERVER_GMT;}
|
|
||||||
if ($DBasterisk_version) {$AST_ver = $DBasterisk_version;}
|
|
||||||
if ($DBmax_vicidial_trunks) {$max_vicidial_trunks = $DBmax_vicidial_trunks;}
|
|
||||||
$rec_count++;
|
|
||||||
}
|
|
||||||
$sthA->finish();
|
|
||||||
|
|
||||||
### Grab call parameters from vicidial_auto_calls table
|
### Grab call parameters from vicidial_auto_calls table
|
||||||
$stmtA = "UPDATE vicidial_auto_calls set uniqueid='$unique_id', channel='$channel',status='LIVE' where callerid='$callerid' order by call_time desc limit 1;";
|
$stmtA = "UPDATE vicidial_auto_calls set uniqueid='$unique_id', channel='$channel',status='LIVE' where callerid='$callerid' order by call_time desc limit 1;";
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
if ($M) {print STDERR "-- VDAD : |$affected_rows|update of vac table: $callerid\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "-- VDAD : |$affected_rows|update of vac table: $callerid\n|$stmtA|"; &agi_output;}
|
||||||
if ($affected_rows > 0)
|
if ($affected_rows > 0)
|
||||||
{
|
{
|
||||||
$stmtA = "SELECT campaign_id,phone_number,phone_code,lead_id,call_time FROM vicidial_auto_calls where callerid='$callerid' order by call_time desc limit 1;";
|
$stmtA = "SELECT campaign_id,phone_number,phone_code,lead_id,call_time FROM vicidial_auto_calls where callerid='$callerid' order by call_time desc limit 1;";
|
||||||
@@ -312,11 +306,10 @@ if ($affected_rows > 0)
|
|||||||
$sthA->finish();
|
$sthA->finish();
|
||||||
|
|
||||||
$stmtA = "INSERT INTO vicidial_log (uniqueid,lead_id,campaign_id,call_date,start_epoch,status,phone_code,phone_number,user,processed) values('$uniqueid','$CIDlead_id','$VDADcampaign','$SQLdate','$now_date_epoch','QUEUE','$VDADphone_code','$VDADphone','VDAD','N')";
|
$stmtA = "INSERT INTO vicidial_log (uniqueid,lead_id,campaign_id,call_date,start_epoch,status,phone_code,phone_number,user,processed) values('$uniqueid','$CIDlead_id','$VDADcampaign','$SQLdate','$now_date_epoch','QUEUE','$VDADphone_code','$VDADphone','VDAD','N')";
|
||||||
if($M){print STDERR "\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;}
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
|
|
||||||
if ($M) {print STDERR "-- VDAD : |$VDADlead_id|$CIDlead_id|insert to vicidial_log: $uniqueid\n";}
|
if ($AGILOG) {$agi_string = "-- VDAD : |$VDADlead_id|$CIDlead_id|insert to vicidial_log: $uniqueid"; &agi_output;}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$drop_timer=0;
|
$drop_timer=0;
|
||||||
@@ -329,7 +322,7 @@ while ($drop_timer <= $DROP_TIME)
|
|||||||
$channel_status = $AGI->channel_status("$channel");
|
$channel_status = $AGI->channel_status("$channel");
|
||||||
if ($channel_status < 1)
|
if ($channel_status < 1)
|
||||||
{
|
{
|
||||||
print STDERR "CHANNEL $channel DOWN $channel_status $DROP_TIME|$drop_timer CHECKING AGAIN...\n";
|
if ($AGILOG) {$agi_string = "CHANNEL $channel DOWN $channel_status $DROP_TIME|$drop_timer CHECKING AGAIN"; &agi_output;}
|
||||||
### sleep for 99 hundredths of a second
|
### sleep for 99 hundredths of a second
|
||||||
usleep(1*990*1000);
|
usleep(1*990*1000);
|
||||||
|
|
||||||
@@ -337,7 +330,7 @@ if ($channel_status < 1)
|
|||||||
|
|
||||||
if ($channel_status_DC < 1)
|
if ($channel_status_DC < 1)
|
||||||
{
|
{
|
||||||
print STDERR "CHANNEL $channel DOWN $channel_status $DROP_TIME|$drop_timer\n";
|
if ($AGILOG) {$agi_string = "CHANNEL $channel DOWN $channel_status $DROP_TIME|$drop_timer"; &agi_output;}
|
||||||
if ($drop_timer < $DROP_TIME) {$drop_seconds = $drop_timer;}
|
if ($drop_timer < $DROP_TIME) {$drop_seconds = $drop_timer;}
|
||||||
$drop_timer = ($drop_timer + $DROP_TIME);
|
$drop_timer = ($drop_timer + $DROP_TIME);
|
||||||
}
|
}
|
||||||
@@ -363,7 +356,7 @@ if ($CAMP_callorder =~ /random/i) {$agent_call_order = 'order by random_id';}
|
|||||||
|
|
||||||
$rec_countWAIT=0;
|
$rec_countWAIT=0;
|
||||||
$stmtA = "SELECT count(*) FROM vicidial_auto_calls where status = 'LIVE' and campaign_id = '$VDADcampaign' and call_time < \"$VDADcall_time\" and lead_id != '$VDADlead_id';";
|
$stmtA = "SELECT count(*) FROM vicidial_auto_calls where status = 'LIVE' and campaign_id = '$VDADcampaign' and call_time < \"$VDADcall_time\" and lead_id != '$VDADlead_id';";
|
||||||
if($M){print STDERR "\n\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;}
|
||||||
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
||||||
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
||||||
$sthArows=$sthA->rows;
|
$sthArows=$sthA->rows;
|
||||||
@@ -377,13 +370,13 @@ while ($sthArows > $rec_count)
|
|||||||
$sthA->finish();
|
$sthA->finish();
|
||||||
if ($rec_countWAIT < 1)
|
if ($rec_countWAIT < 1)
|
||||||
{
|
{
|
||||||
$stmtA = "UPDATE vicidial_live_agents set status='QUEUE',lead_id='$CIDlead_id',uniqueid='$unique_id', channel='$channel', call_server_ip='$server_ip', callerid='$callerid' where status = 'READY' and campaign_id='$VDADcampaign' and last_update_time > '$BDtsSQLdate' $agent_call_order limit 1;";
|
$stmtA = "UPDATE vicidial_live_agents set status='QUEUE',lead_id='$CIDlead_id',uniqueid='$unique_id', channel='$channel', call_server_ip='$VARserver_ip', callerid='$callerid' where status = 'READY' and campaign_id='$VDADcampaign' and last_update_time > '$BDtsSQLdate' $agent_call_order limit 1;";
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
if ($M) {print STDERR "-- VDAD get agent: |$affected_rows|update of vla table: $VDADcampaign|$server_ip\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "-- VDAD get agent: |$affected_rows|update of vla table: $VDADcampaign|$VARserver_ip\n|$stmtA|"; &agi_output;}
|
||||||
if ($affected_rows > 0)
|
if ($affected_rows > 0)
|
||||||
{
|
{
|
||||||
$stmtA = "SELECT conf_exten,user,extension,server_ip FROM vicidial_live_agents where status = 'QUEUE' and campaign_id='$VDADcampaign' and callerid='$callerid' and channel='$channel' order by last_call_time limit 1;";
|
$stmtA = "SELECT conf_exten,user,extension,server_ip FROM vicidial_live_agents where status = 'QUEUE' and campaign_id='$VDADcampaign' and callerid='$callerid' and channel='$channel' order by last_call_time limit 1;";
|
||||||
if($M){print STDERR "\n\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;}
|
||||||
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
||||||
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
||||||
$sthArows=$sthA->rows;
|
$sthArows=$sthA->rows;
|
||||||
@@ -401,14 +394,14 @@ if ($rec_countWAIT < 1)
|
|||||||
|
|
||||||
$stmtA = "UPDATE vicidial_auto_calls set status='XFER' where callerid='$callerid';";
|
$stmtA = "UPDATE vicidial_auto_calls set status='XFER' where callerid='$callerid';";
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
if ($M) {print STDERR "-- VDAD XFER REMOTE: |$affected_rows|update of vac table: $callerid\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "-- VDAD XFER : |$affected_rows|update of vac table: $callerid\n|$stmtA|"; &agi_output;}
|
||||||
|
|
||||||
$dbhA->disconnect();
|
$dbhA->disconnect();
|
||||||
|
|
||||||
### format the remote server dialstring to get the call to the overflow agent meetme room
|
### format the remote server dialstring to get the call to the overflow agent meetme room
|
||||||
$S='*';
|
$S='*';
|
||||||
$VDADremDIALstr='';
|
$VDADremDIALstr='';
|
||||||
if( ($VDADserver_ip =~ m/(\S+)\.(\S+)\.(\S+)\.(\S+)/) && ($VDADserver_ip !~ /$server_ip/) )
|
if( ($VDADserver_ip =~ m/(\S+)\.(\S+)\.(\S+)\.(\S+)/) && ($VDADserver_ip !~ /$VARserver_ip/) )
|
||||||
{
|
{
|
||||||
$a = leading_zero($1);
|
$a = leading_zero($1);
|
||||||
$b = leading_zero($2);
|
$b = leading_zero($2);
|
||||||
@@ -418,7 +411,7 @@ if ($rec_countWAIT < 1)
|
|||||||
}
|
}
|
||||||
$VDADremDIALstr .= "$VDADconf_exten";
|
$VDADremDIALstr .= "$VDADconf_exten";
|
||||||
|
|
||||||
print STDERR "\nexiting the VDAD app, transferring call to $VDADremDIALstr\n";
|
if ($AGILOG) {$agi_string = "exiting the VDAD app, transferring call to $VDADremDIALstr"; &agi_output;}
|
||||||
print "SET CONTEXT $ext_context\n";
|
print "SET CONTEXT $ext_context\n";
|
||||||
checkresult($result);
|
checkresult($result);
|
||||||
print "SET EXTENSION $VDADremDIALstr\n";
|
print "SET EXTENSION $VDADremDIALstr\n";
|
||||||
@@ -437,25 +430,35 @@ if ($rec_countWAIT < 1)
|
|||||||
|
|
||||||
$now_date_epoch = time();
|
$now_date_epoch = time();
|
||||||
$now_date = "$year-$mon-$mday $hour:$min:$sec";
|
$now_date = "$year-$mon-$mday $hour:$min:$sec";
|
||||||
print STDERR "\nXXXXXXXXXX VDAD transferred: start|stop $start_time|$now_date\n";
|
if ($AGILOG) {$agi_string = "XXXXXXXXXX VDAD transferred: start|stop $start_time|$now_date"; &agi_output;}
|
||||||
|
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
print STDERR "NNNNNNNNNN No agent record found!!!\n";
|
if ($AGILOG) {$agi_string = "NNNNNNNNNN No agent record found!!!"; &agi_output;}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
print STDERR "WWWWWWWW VDAD XFER REMOTE WAIT: |$rec_countWAIT|$VDADcampaign|$channel|$callerid|$uniqueid|\n";
|
if ($AGILOG) {$agi_string = "WWWWWWWW VDAD XFER REMOTE WAIT: |$rec_countWAIT|$VDADcampaign|$channel|$callerid|$uniqueid|"; &agi_output;}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
### sleep for 99 hundredths of a second
|
if ($drop_timer < 3)
|
||||||
usleep(1*990*1000);
|
{
|
||||||
|
### sleep for 44.5 hundredths of a second
|
||||||
|
usleep(1*445*1000);
|
||||||
|
|
||||||
$drop_timer++;
|
$drop_timer = ($drop_timer + 0.5);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
### sleep for 99 hundredths of a second
|
||||||
|
usleep(1*990*1000);
|
||||||
|
|
||||||
|
$drop_timer++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -489,7 +492,7 @@ if ($drop_seconds < 1)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
$stmtA = "SELECT voicemail_ext FROM vicidial_campaigns where campaign_id = '$VDADcampaign' limit 1;";
|
$stmtA = "SELECT voicemail_ext FROM vicidial_campaigns where campaign_id = '$VDADcampaign' limit 1;";
|
||||||
if($M){print STDERR "\n\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;}
|
||||||
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
||||||
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
||||||
$sthArows=$sthA->rows;
|
$sthArows=$sthA->rows;
|
||||||
@@ -512,7 +515,7 @@ if ($drop_seconds < 1)
|
|||||||
|
|
||||||
if (length($DROPexten)>0)
|
if (length($DROPexten)>0)
|
||||||
{ ### if DROP extension is defined then send the dropped call there instead of hangup
|
{ ### if DROP extension is defined then send the dropped call there instead of hangup
|
||||||
print STDERR "\nexiting the VDAD app, transferring call to $DROPexten\n";
|
if ($AGILOG) {$agi_string = "exiting the VDAD app, transferring call to $DROPexten"; &agi_output;}
|
||||||
print "SET CONTEXT $ext_context\n";
|
print "SET CONTEXT $ext_context\n";
|
||||||
checkresult($result);
|
checkresult($result);
|
||||||
print "SET EXTENSION $DROPexten\n";
|
print "SET EXTENSION $DROPexten\n";
|
||||||
@@ -523,25 +526,24 @@ if ($drop_seconds < 1)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
### insert a NEW record to the vicidial_manager table to be processed
|
### insert a NEW record to the vicidial_manager table to be processed
|
||||||
$stmtA = "INSERT INTO vicidial_manager values('','','$SQLdate','NEW','N','$server_ip','','Hangup','$VHqueryCID','Channel: $channel','','','','','','','','','')";
|
$stmtA = "INSERT INTO vicidial_manager values('','','$SQLdate','NEW','N','$VARserver_ip','','Hangup','$VHqueryCID','Channel: $channel','','','','','','','','','')";
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
if ($M) {print STDERR "-- VDAD call_hungup timout: |$VHqueryCID|$VDADconf_exten|$channel|insert to vicidial_manager\n";}
|
if ($AGILOG) {$agi_string = "-- VDAD call_hungup timout: |$VHqueryCID|$VDADconf_exten|$channel|insert to vicidial_manager"; &agi_output;}
|
||||||
}
|
}
|
||||||
|
|
||||||
$stmtA = "DELETE FROM vicidial_auto_calls where callerid='$callerid' order by call_time desc limit 1;";
|
$stmtA = "DELETE FROM vicidial_auto_calls where callerid='$callerid' order by call_time desc limit 1;";
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
if ($M) {print STDERR "-- VDAD vac record deleted: |$affected_rows| $VDADcampaign|$server_ip\n";}
|
if ($AGILOG) {$agi_string = "-- VDAD vac record deleted: |$affected_rows|$VDADcampaign|"; &agi_output;}
|
||||||
|
|
||||||
$stmtA = "UPDATE vicidial_log set status='DROP',end_epoch='$now_date_epoch',length_in_sec='$drop_seconds' where uniqueid = '$uniqueid';";
|
$stmtA = "UPDATE vicidial_log set status='DROP',end_epoch='$now_date_epoch',length_in_sec='$drop_seconds' where uniqueid = '$uniqueid';";
|
||||||
if($M){print STDERR "\n\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;}
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
if ($M) {print STDERR "-- VDAD vicidial_log update: |$affected_rows|$uniqueid\n";}
|
if ($AGILOG) {$agi_string = "-- VDAD vicidial_log update: |$affected_rows|$uniqueid"; &agi_output;}
|
||||||
|
|
||||||
$stmtA = "UPDATE vicidial_list set status='DROP' where lead_id = '$CIDlead_id';";
|
$stmtA = "UPDATE vicidial_list set status='DROP' where lead_id = '$CIDlead_id';";
|
||||||
if($M){print STDERR "\n\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;}
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
if ($M) {print STDERR "-- VDAD vicidial_list update: |$affected_rows|$CIDlead_id\n";}
|
if ($AGILOG) {$agi_string = "-- VDAD vicidial_list update: |$affected_rows|$CIDlead_id"; &agi_output;}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -578,3 +580,19 @@ sub leading_zero($) {
|
|||||||
s/^(\d\d)$/0$1/;
|
s/^(\d\d)$/0$1/;
|
||||||
return $_;
|
return $_;
|
||||||
} # End of the leading_zero() routine.
|
} # End of the leading_zero() routine.
|
||||||
|
|
||||||
|
sub agi_output
|
||||||
|
{
|
||||||
|
if ($AGILOG >=2)
|
||||||
|
{
|
||||||
|
### open the log file for writing ###
|
||||||
|
open(Lout, ">>$AGILOGfile")
|
||||||
|
|| die "Can't open $AGILOGfile: $!\n";
|
||||||
|
print Lout "$now_date|$script|$agi_string\n";
|
||||||
|
close(Lout);
|
||||||
|
}
|
||||||
|
### send to STDERR writing ###
|
||||||
|
if ( ($AGILOG == '1') || ($AGILOG == '3') )
|
||||||
|
{print STDERR "$now_date|$script|$agi_string\n";}
|
||||||
|
$agi_string='';
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/perl
|
#!/usr/bin/perl
|
||||||
#
|
#
|
||||||
# agi-VDAD_LO_transfer.agi version 0.4 *DBI-version*
|
# agi-VDAD_LO_transfer.agi version 0.5 *DBI-version*
|
||||||
# Overflow Balanced - when a call comes in on this server the script looks for an agent
|
# Overflow Balanced - when a call comes in on this server the script looks for an agent
|
||||||
# on this server to send call to. If none available it looks for the next available
|
# on this server to send call to. If none available it looks for the next available
|
||||||
# agent on any other server on the network on the same campaign to send call to.
|
# agent on any other server on the network on the same campaign to send call to.
|
||||||
@@ -32,13 +32,26 @@
|
|||||||
# 60503-1048 - Added safe harbor and drop second options from campaign
|
# 60503-1048 - Added safe harbor and drop second options from campaign
|
||||||
# 60731-1441 - changed to use DBI-DBD::mysql
|
# 60731-1441 - changed to use DBI-DBD::mysql
|
||||||
# - changed to use /etc/astguiclient.conf for configs
|
# - changed to use /etc/astguiclient.conf for configs
|
||||||
|
# 60816-1034 - added output options check from database
|
||||||
|
# - changed look for agent every 0.5 second for first 4 sec on hold
|
||||||
#
|
#
|
||||||
|
|
||||||
$V = 1; # set to 1 for verbose mode
|
$script = 'agi-VDAD_LO_transfer.agi';
|
||||||
$M = 1; # set to 1 for 2 line messages mode
|
|
||||||
|
|
||||||
$DROP_TIME = 10; # default number of seconds to wait until you drop a waiting call
|
$DROP_TIME = 10; # default number of seconds to wait until you drop a waiting call
|
||||||
|
|
||||||
|
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
|
||||||
|
$year = ($year + 1900);
|
||||||
|
$mon++;
|
||||||
|
if ($mon < 10) {$mon = "0$mon";}
|
||||||
|
if ($mday < 10) {$mday = "0$mday";}
|
||||||
|
if ($hour < 10) {$Fhour = "0$hour";}
|
||||||
|
if ($min < 10) {$min = "0$min";}
|
||||||
|
if ($sec < 10) {$sec = "0$sec";}
|
||||||
|
|
||||||
|
$now_date_epoch = time();
|
||||||
|
$now_date = "$year-$mon-$mday $hour:$min:$sec";
|
||||||
|
|
||||||
# default path to astguiclient configuration file:
|
# default path to astguiclient configuration file:
|
||||||
$PATHconf = '/etc/astguiclient.conf';
|
$PATHconf = '/etc/astguiclient.conf';
|
||||||
|
|
||||||
@@ -77,34 +90,51 @@ foreach(@conf)
|
|||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Customized Variables
|
|
||||||
$server_ip = $VARserver_ip; # Asterisk server IP
|
|
||||||
|
|
||||||
if (!$VARDB_port) {$VARDB_port='3306';}
|
if (!$VARDB_port) {$VARDB_port='3306';}
|
||||||
|
if (!$AGILOGfile) {$AGILOGfile = "$PATHlogs/agiout.$year-$mon-$mday";}
|
||||||
|
|
||||||
use DBI;
|
use DBI;
|
||||||
use Time::HiRes ('gettimeofday','usleep','sleep'); # necessary to have perl sleep command of less than one second
|
use Time::HiRes ('gettimeofday','usleep','sleep'); # necessary to have perl sleep command of less than one second
|
||||||
use Asterisk::AGI;
|
use Asterisk::AGI;
|
||||||
$AGI = new Asterisk::AGI;
|
$AGI = new Asterisk::AGI;
|
||||||
|
|
||||||
|
$dbhA = DBI->connect("DBI:mysql:$VARDB_database:$VARDB_server:$VARDB_port", "$VARDB_user", "$VARDB_pass")
|
||||||
|
or die "Couldn't connect to database: " . DBI->errstr;
|
||||||
|
|
||||||
|
### Grab Server values from the database
|
||||||
|
$stmtA = "SELECT voicemail_dump_exten,ext_context,answer_transfer_agent,local_gmt,asterisk_version,max_vicidial_trunks,agi_output FROM servers where server_ip = '$VARserver_ip';";
|
||||||
|
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
||||||
|
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
||||||
|
$sthArows=$sthA->rows;
|
||||||
|
$rec_count=0;
|
||||||
|
while ($sthArows > $rec_count)
|
||||||
|
{
|
||||||
|
@aryA = $sthA->fetchrow_array;
|
||||||
|
$DBvoicemail_dump_exten = "$aryA[0]";
|
||||||
|
$DBext_context = "$aryA[1]";
|
||||||
|
$DBanswer_transfer_agent = "$aryA[2]";
|
||||||
|
$DBSERVER_GMT = "$aryA[3]";
|
||||||
|
$DBasterisk_version = "$aryA[4]";
|
||||||
|
$DBmax_vicidial_trunks = "$aryA[5]";
|
||||||
|
$DBagi_output = "$aryA[6]";
|
||||||
|
if ($DBvoicemail_dump_exten) {$voicemail_dump_exten = $DBvoicemail_dump_exten;}
|
||||||
|
if ($DBext_context) {$ext_context = $DBext_context;}
|
||||||
|
if ($DBanswer_transfer_agent) {$answer_transfer_agent = $DBanswer_transfer_agent;}
|
||||||
|
if ($DBSERVER_GMT) {$SERVER_GMT = $DBSERVER_GMT;}
|
||||||
|
if ($DBasterisk_version) {$AST_ver = $DBasterisk_version;}
|
||||||
|
if ($DBmax_vicidial_trunks) {$max_vicidial_trunks = $DBmax_vicidial_trunks;}
|
||||||
|
if ($DBagi_output =~ /STDERR/) {$AGILOG = '1';}
|
||||||
|
if ($DBagi_output =~ /FILE/) {$AGILOG = '2';}
|
||||||
|
if ($DBagi_output =~ /BOTH/) {$AGILOG = '3';}
|
||||||
|
$rec_count++;
|
||||||
|
}
|
||||||
|
$sthA->finish();
|
||||||
|
|
||||||
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
|
|
||||||
$year = ($year + 1900);
|
|
||||||
$mon++;
|
|
||||||
if ($mon < 10) {$mon = "0$mon";}
|
|
||||||
if ($mday < 10) {$mday = "0$mday";}
|
|
||||||
if ($hour < 10) {$Fhour = "0$hour";}
|
|
||||||
if ($min < 10) {$min = "0$min";}
|
|
||||||
if ($sec < 10) {$sec = "0$sec";}
|
|
||||||
|
|
||||||
$now_date_epoch = time();
|
|
||||||
$now_date = "$year-$mon-$mday $hour:$min:$sec";
|
|
||||||
$start_time=$now_date;
|
$start_time=$now_date;
|
||||||
$CIDdate = "$mon$mday$hour$min$sec";
|
$CIDdate = "$mon$mday$hour$min$sec";
|
||||||
$tsSQLdate = "$year$mon$mday$hour$min$sec";
|
$tsSQLdate = "$year$mon$mday$hour$min$sec";
|
||||||
$SQLdate = "$year-$mon-$mday $hour:$min:$sec";
|
$SQLdate = "$year-$mon-$mday $hour:$min:$sec";
|
||||||
$SQLdateBEGIN = $SQLdate;
|
$SQLdateBEGIN = $SQLdate;
|
||||||
|
|
||||||
$BDtarget = ($secX - 5);
|
$BDtarget = ($secX - 5);
|
||||||
($Bsec,$Bmin,$Bhour,$Bmday,$Bmon,$Byear,$Bwday,$Byday,$Bisdst) = localtime($BDtarget);
|
($Bsec,$Bmin,$Bhour,$Bmday,$Bmon,$Byear,$Bwday,$Byday,$Bisdst) = localtime($BDtarget);
|
||||||
@@ -122,12 +152,12 @@ if ($Bsec < 10) {$Bsec = "0$Bsec";}
|
|||||||
### begin parsing run-time options ###
|
### begin parsing run-time options ###
|
||||||
if (length($ARGV[0])>1)
|
if (length($ARGV[0])>1)
|
||||||
{
|
{
|
||||||
if ($V) {print STDERR "Perl Environment Dump:\n";}
|
if ($AGILOG) {$agi_string = "Perl Environment Dump:"; &agi_output;}
|
||||||
$i=0;
|
$i=0;
|
||||||
while ($#ARGV >= $i)
|
while ($#ARGV >= $i)
|
||||||
{
|
{
|
||||||
$args = "$args $ARGV[$i]";
|
$args = "$args $ARGV[$i]";
|
||||||
if ($V) {print STDERR "$i|$ARGV[$i]|\n";}
|
if ($AGILOG) {$agi_string = "$i|$ARGV[$i]"; &agi_output;}
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -161,17 +191,13 @@ if ($V) {print STDERR "Perl Environment Dump:\n";}
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
if ($V) {print "no command line options set\n";}
|
|
||||||
}
|
|
||||||
|
|
||||||
$|=1;
|
$|=1;
|
||||||
while(<STDIN>)
|
while(<STDIN>)
|
||||||
{
|
{
|
||||||
chomp;
|
chomp;
|
||||||
last unless length($_);
|
last unless length($_);
|
||||||
if ($V)
|
if ($AGILOG)
|
||||||
{
|
{
|
||||||
if (/^agi_(\w+)\:\s+(.*)$/)
|
if (/^agi_(\w+)\:\s+(.*)$/)
|
||||||
{
|
{
|
||||||
@@ -195,8 +221,7 @@ if ( (length($callerid)>20) && ($callerid =~ /\"\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S
|
|||||||
### set the callerid to the ACQS value(calleridname)
|
### set the callerid to the ACQS value(calleridname)
|
||||||
print "SET CALLERID $callerid\n";
|
print "SET CALLERID $callerid\n";
|
||||||
checkresult($result);
|
checkresult($result);
|
||||||
print STDERR "callerID changed: $callerid\n";
|
if ($AGILOG) {$agi_string = "callerID changed: $callerid"; &agi_output;}
|
||||||
|
|
||||||
}
|
}
|
||||||
if ( (
|
if ( (
|
||||||
(length($calleridname)>5) && ( (!$callerid) or ($callerid =~ /unknown|private|00000000/i) or ($callerid =~ /5551212/) )
|
(length($calleridname)>5) && ( (!$callerid) or ($callerid =~ /unknown|private|00000000/i) or ($callerid =~ /5551212/) )
|
||||||
@@ -206,74 +231,42 @@ if ( (
|
|||||||
### set the callerid to the ACQS value(calleridname)
|
### set the callerid to the ACQS value(calleridname)
|
||||||
print "SET CALLERID $callerid\n";
|
print "SET CALLERID $callerid\n";
|
||||||
checkresult($result);
|
checkresult($result);
|
||||||
print STDERR "callerID changed: $callerid\n";
|
if ($AGILOG) {$agi_string = "callerID changed: $callerid"; &agi_output;}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if ($V)
|
if ($AGILOG) {$agi_string = "AGI Environment Dump:"; &agi_output;}
|
||||||
{
|
|
||||||
|
|
||||||
if ($V) {print STDERR "AGI Environment Dump:\n";}
|
foreach $i (sort keys %AGI)
|
||||||
foreach $i (sort keys %AGI) {
|
{
|
||||||
if ($V) {print STDERR " -- $i = $AGI{$i}\n";}
|
if ($AGILOG) {$agi_string = " -- $i = $AGI{$i}"; &agi_output;}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($AGILOG) {$agi_string = "AGI Variables: |$unique_id|$channel|$extension|$type|$callerid|$calleridname|$priority|"; &agi_output;}
|
||||||
|
|
||||||
$VDADcampaign='';
|
$VDADcampaign='';
|
||||||
$VDADphone='';
|
$VDADphone='';
|
||||||
$VDADphone_code='';
|
$VDADphone_code='';
|
||||||
|
|
||||||
if ($V) {print STDERR "AGI Environment Dump: |$unique_id|$channel|$extension|$type|$callerid|$calleridname|$priority|\n";}
|
|
||||||
|
|
||||||
|
|
||||||
$callerid =~ s/\"//gi;
|
$callerid =~ s/\"//gi;
|
||||||
$CIDlead_id = $callerid;
|
$CIDlead_id = $callerid;
|
||||||
$CIDlead_id = substr($CIDlead_id, 11, 9);
|
$CIDlead_id = substr($CIDlead_id, 11, 9);
|
||||||
$CIDlead_id = ($CIDlead_id + 0);
|
$CIDlead_id = ($CIDlead_id + 0);
|
||||||
|
|
||||||
if ($V) {print STDERR "\nCALL RECEIVED IN FROM VDAD: $callerid $channel $priority\n";}
|
if ($AGILOG) {$agi_string = "+++++ VDAD START : |$CIDlead_id|$now_date|$AST_ver|$priority|"; &agi_output;}
|
||||||
if ($M) {print STDERR "+++++ VDAD START : |$unique_id|$channel|$extension|$type|$callerid|$CIDlead_id|$now_date|$AST_ver|$priority|\n";}
|
|
||||||
|
|
||||||
if ( ($channel =~ /Local/i) && ($AST_ver !~ /^1\.0\.8|^1\.0\.9/) )
|
if ( ($channel =~ /Local/i) && ($AST_ver !~ /^1\.0\.8|^1\.0\.9/) )
|
||||||
{
|
{
|
||||||
if ($M) {print STDERR "+++++ VDAD START LOCAL CHANNEL: EXITING- $priority\n";}
|
if ($AGILOG) {$agi_string = "+++++ VDAD START LOCAL CHANNEL: EXITING- $priority"; &agi_output;}
|
||||||
if ($priority > 2) {sleep(1);}
|
if ($priority > 2) {sleep(1);}
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$dbhA = DBI->connect("DBI:mysql:$VARDB_database:$VARDB_server:$VARDB_port", "$VARDB_user", "$VARDB_pass")
|
|
||||||
or die "Couldn't connect to database: " . DBI->errstr;
|
|
||||||
|
|
||||||
### Grab Server values from the database
|
|
||||||
$stmtA = "SELECT voicemail_dump_exten,ext_context,answer_transfer_agent,local_gmt,asterisk_version,max_vicidial_trunks FROM servers where server_ip = '$server_ip';";
|
|
||||||
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
|
||||||
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
|
||||||
$sthArows=$sthA->rows;
|
|
||||||
$rec_count=0;
|
|
||||||
while ($sthArows > $rec_count)
|
|
||||||
{
|
|
||||||
@aryA = $sthA->fetchrow_array;
|
|
||||||
$DBvoicemail_dump_exten = "$aryA[0]";
|
|
||||||
$DBext_context = "$aryA[1]";
|
|
||||||
$DBanswer_transfer_agent = "$aryA[2]";
|
|
||||||
$DBSERVER_GMT = "$aryA[3]";
|
|
||||||
$DBasterisk_version = "$aryA[4]";
|
|
||||||
$DBmax_vicidial_trunks = "$aryA[5]";
|
|
||||||
if ($DBvoicemail_dump_exten) {$voicemail_dump_exten = $DBvoicemail_dump_exten;}
|
|
||||||
if ($DBext_context) {$ext_context = $DBext_context;}
|
|
||||||
if ($DBanswer_transfer_agent) {$answer_transfer_agent = $DBanswer_transfer_agent;}
|
|
||||||
if ($DBSERVER_GMT) {$SERVER_GMT = $DBSERVER_GMT;}
|
|
||||||
if ($DBasterisk_version) {$AST_ver = $DBasterisk_version;}
|
|
||||||
if ($DBmax_vicidial_trunks) {$max_vicidial_trunks = $DBmax_vicidial_trunks;}
|
|
||||||
$rec_count++;
|
|
||||||
}
|
|
||||||
$sthA->finish();
|
|
||||||
|
|
||||||
### Grab call parameters from vicidial_auto_calls table
|
### Grab call parameters from vicidial_auto_calls table
|
||||||
$stmtA = "UPDATE vicidial_auto_calls set uniqueid='$unique_id', channel='$channel',status='LIVE' where callerid='$callerid' order by call_time desc limit 1;";
|
$stmtA = "UPDATE vicidial_auto_calls set uniqueid='$unique_id', channel='$channel',status='LIVE' where callerid='$callerid' order by call_time desc limit 1;";
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
if ($M) {print STDERR "-- VDAD : |$affected_rows|update of vac table: $callerid\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "-- VDAD : |$affected_rows|update of vac table: $callerid\n|$stmtA|"; &agi_output;}
|
||||||
if ($affected_rows > 0)
|
if ($affected_rows > 0)
|
||||||
{
|
{
|
||||||
$stmtA = "SELECT campaign_id,phone_number,phone_code,lead_id,call_time FROM vicidial_auto_calls where callerid='$callerid' order by call_time desc limit 1;";
|
$stmtA = "SELECT campaign_id,phone_number,phone_code,lead_id,call_time FROM vicidial_auto_calls where callerid='$callerid' order by call_time desc limit 1;";
|
||||||
@@ -313,11 +306,10 @@ if ($affected_rows > 0)
|
|||||||
$sthA->finish();
|
$sthA->finish();
|
||||||
|
|
||||||
$stmtA = "INSERT INTO vicidial_log (uniqueid,lead_id,campaign_id,call_date,start_epoch,status,phone_code,phone_number,user,processed) values('$uniqueid','$CIDlead_id','$VDADcampaign','$SQLdate','$now_date_epoch','QUEUE','$VDADphone_code','$VDADphone','VDAD','N')";
|
$stmtA = "INSERT INTO vicidial_log (uniqueid,lead_id,campaign_id,call_date,start_epoch,status,phone_code,phone_number,user,processed) values('$uniqueid','$CIDlead_id','$VDADcampaign','$SQLdate','$now_date_epoch','QUEUE','$VDADphone_code','$VDADphone','VDAD','N')";
|
||||||
if($M){print STDERR "\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;}
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
|
|
||||||
if ($M) {print STDERR "-- VDAD : |$VDADlead_id|$CIDlead_id|insert to vicidial_log: $uniqueid\n";}
|
if ($AGILOG) {$agi_string = "-- VDAD : |$VDADlead_id|$CIDlead_id|insert to vicidial_log: $uniqueid"; &agi_output;}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$drop_timer=0;
|
$drop_timer=0;
|
||||||
@@ -330,7 +322,7 @@ while ($drop_timer <= $DROP_TIME)
|
|||||||
$channel_status = $AGI->channel_status("$channel");
|
$channel_status = $AGI->channel_status("$channel");
|
||||||
if ($channel_status < 1)
|
if ($channel_status < 1)
|
||||||
{
|
{
|
||||||
print STDERR "CHANNEL $channel DOWN $channel_status $DROP_TIME|$drop_timer CHECKING AGAIN...\n";
|
if ($AGILOG) {$agi_string = "CHANNEL $channel DOWN $channel_status $DROP_TIME|$drop_timer CHECKING AGAIN"; &agi_output;}
|
||||||
### sleep for 99 hundredths of a second
|
### sleep for 99 hundredths of a second
|
||||||
usleep(1*990*1000);
|
usleep(1*990*1000);
|
||||||
|
|
||||||
@@ -338,7 +330,7 @@ if ($channel_status < 1)
|
|||||||
|
|
||||||
if ($channel_status_DC < 1)
|
if ($channel_status_DC < 1)
|
||||||
{
|
{
|
||||||
print STDERR "CHANNEL $channel DOWN $channel_status $DROP_TIME|$drop_timer\n";
|
if ($AGILOG) {$agi_string = "CHANNEL $channel DOWN $channel_status $DROP_TIME|$drop_timer"; &agi_output;}
|
||||||
if ($drop_timer < $DROP_TIME) {$drop_seconds = $drop_timer;}
|
if ($drop_timer < $DROP_TIME) {$drop_seconds = $drop_timer;}
|
||||||
$drop_timer = ($drop_timer + $DROP_TIME);
|
$drop_timer = ($drop_timer + $DROP_TIME);
|
||||||
}
|
}
|
||||||
@@ -363,8 +355,8 @@ if ($CAMP_callorder =~ /oldest_call_finish/i) {$agent_call_order = 'order by las
|
|||||||
if ($CAMP_callorder =~ /random/i) {$agent_call_order = 'order by random_id';}
|
if ($CAMP_callorder =~ /random/i) {$agent_call_order = 'order by random_id';}
|
||||||
|
|
||||||
$rec_countWAIT=0;
|
$rec_countWAIT=0;
|
||||||
$stmtA = "SELECT count(*) FROM vicidial_auto_calls where status = 'LIVE' and server_ip='$server_ip' and campaign_id = '$VDADcampaign' and call_time < \"$VDADcall_time\" and lead_id != '$VDADlead_id';";
|
$stmtA = "SELECT count(*) FROM vicidial_auto_calls where status = 'LIVE' and server_ip='$VARserver_ip' and campaign_id = '$VDADcampaign' and call_time < \"$VDADcall_time\" and lead_id != '$VDADlead_id';";
|
||||||
if($M){print STDERR "\n\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;}
|
||||||
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
||||||
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
||||||
$sthArows=$sthA->rows;
|
$sthArows=$sthA->rows;
|
||||||
@@ -378,13 +370,13 @@ while ($sthArows > $rec_count)
|
|||||||
$sthA->finish();
|
$sthA->finish();
|
||||||
if ($rec_countWAIT < 1)
|
if ($rec_countWAIT < 1)
|
||||||
{
|
{
|
||||||
$stmtA = "UPDATE vicidial_live_agents set status='QUEUE',lead_id='$CIDlead_id',uniqueid='$unique_id', channel='$channel', call_server_ip='$server_ip', callerid='$callerid' where status = 'READY' and server_ip='$server_ip' and campaign_id='$VDADcampaign' and last_update_time > '$BDtsSQLdate' $agent_call_order limit 1;";
|
$stmtA = "UPDATE vicidial_live_agents set status='QUEUE',lead_id='$CIDlead_id',uniqueid='$unique_id', channel='$channel', call_server_ip='$VARserver_ip', callerid='$callerid' where status = 'READY' and server_ip='$VARserver_ip' and campaign_id='$VDADcampaign' and last_update_time > '$BDtsSQLdate' $agent_call_order limit 1;";
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
if ($M) {print STDERR "-- VDAD get agent: |$affected_rows|update of vla table: $VDADcampaign|$server_ip\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "-- VDAD get agent: |$affected_rows|update of vla table: $VDADcampaign|$VARserver_ip\n|$stmtA|"; &agi_output;}
|
||||||
if ($affected_rows > 0)
|
if ($affected_rows > 0)
|
||||||
{
|
{
|
||||||
$stmtA = "SELECT conf_exten,user,extension FROM vicidial_live_agents where status = 'QUEUE' and server_ip='$server_ip' and campaign_id='$VDADcampaign' and callerid='$callerid' and channel='$channel' order by last_call_time limit 1;";
|
$stmtA = "SELECT conf_exten,user,extension FROM vicidial_live_agents where status = 'QUEUE' and server_ip='$VARserver_ip' and campaign_id='$VDADcampaign' and callerid='$callerid' and channel='$channel' order by last_call_time limit 1;";
|
||||||
if($M){print STDERR "\n\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;}
|
||||||
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
||||||
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
||||||
$sthArows=$sthA->rows;
|
$sthArows=$sthA->rows;
|
||||||
@@ -401,11 +393,11 @@ if ($rec_countWAIT < 1)
|
|||||||
|
|
||||||
$stmtA = "UPDATE vicidial_auto_calls set status='XFER' where callerid='$callerid';";
|
$stmtA = "UPDATE vicidial_auto_calls set status='XFER' where callerid='$callerid';";
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
if ($M) {print STDERR "-- VDAD XFER : |$affected_rows|update of vac table: $callerid\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "-- VDAD XFER : |$affected_rows|update of vac table: $callerid\n|$stmtA|"; &agi_output;}
|
||||||
|
|
||||||
$dbhA->disconnect();
|
$dbhA->disconnect();
|
||||||
|
|
||||||
print STDERR "\nexiting the VDAD app, transferring call to $VDADconf_exten\n";
|
if ($AGILOG) {$agi_string = "exiting the VDAD app, transferring call to $VDADconf_exten"; &agi_output;}
|
||||||
print "SET CONTEXT $ext_context\n";
|
print "SET CONTEXT $ext_context\n";
|
||||||
checkresult($result);
|
checkresult($result);
|
||||||
print "SET EXTENSION $VDADconf_exten\n";
|
print "SET EXTENSION $VDADconf_exten\n";
|
||||||
@@ -424,26 +416,26 @@ if ($rec_countWAIT < 1)
|
|||||||
|
|
||||||
$now_date_epoch = time();
|
$now_date_epoch = time();
|
||||||
$now_date = "$year-$mon-$mday $hour:$min:$sec";
|
$now_date = "$year-$mon-$mday $hour:$min:$sec";
|
||||||
print STDERR "\nXXXXXXXXXX VDAD transferred: start|stop $start_time|$now_date\n";
|
if ($AGILOG) {$agi_string = "XXXXXXXXXX VDAD transferred: start|stop $start_time|$now_date"; &agi_output;}
|
||||||
|
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
print STDERR "NNNNNNNNNN No agent record found!!!\n";
|
if ($AGILOG) {$agi_string = "NNNNNNNNNN No agent record found!!!"; &agi_output;}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
print STDERR "WWWWWWWW VDAD XFER WAIT: |$rec_countWAIT|$VDADcampaign|$channel|$callerid|$uniqueid|\n";
|
if ($AGILOG) {$agi_string = "WWWWWWWW VDAD XFER WAIT: |$rec_countWAIT|$VDADcampaign|$channel|$callerid|$uniqueid|"; &agi_output;}
|
||||||
}
|
}
|
||||||
|
|
||||||
###################################################################################################
|
###################################################################################################
|
||||||
### noone found locally available, now check for someone on another server to take the call
|
### noone found locally available, now check for someone on another server to take the call
|
||||||
|
|
||||||
$rec_countWAITrem=0;
|
$rec_countWAITrem=0;
|
||||||
$stmtA = "SELECT count(*) FROM vicidial_auto_calls where status = 'LIVE' and server_ip!='$server_ip' and campaign_id = '$VDADcampaign' and call_time < \"$VDADcall_time\" and lead_id != '$VDADlead_id';";
|
$stmtA = "SELECT count(*) FROM vicidial_auto_calls where status = 'LIVE' and server_ip!='$VARserver_ip' and campaign_id = '$VDADcampaign' and call_time < \"$VDADcall_time\" and lead_id != '$VDADlead_id';";
|
||||||
if($M){print STDERR "\n\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;}
|
||||||
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
||||||
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
||||||
$sthArows=$sthA->rows;
|
$sthArows=$sthA->rows;
|
||||||
@@ -457,13 +449,13 @@ while ($sthArows > $rec_count)
|
|||||||
$sthA->finish();
|
$sthA->finish();
|
||||||
if ($rec_countWAITrem < 1)
|
if ($rec_countWAITrem < 1)
|
||||||
{
|
{
|
||||||
$stmtA = "UPDATE vicidial_live_agents set status='QUEUE',lead_id='$CIDlead_id',uniqueid='$unique_id', channel='$channel', call_server_ip='$server_ip', callerid='$callerid' where status = 'READY' and server_ip!='$server_ip' and campaign_id='$VDADcampaign' and last_update_time > '$BDtsSQLdate' $agent_call_order limit 1;";
|
$stmtA = "UPDATE vicidial_live_agents set status='QUEUE',lead_id='$CIDlead_id',uniqueid='$unique_id', channel='$channel', call_server_ip='$VARserver_ip', callerid='$callerid' where status = 'READY' and server_ip!='$VARserver_ip' and campaign_id='$VDADcampaign' and last_update_time > '$BDtsSQLdate' $agent_call_order limit 1;";
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
if ($M) {print STDERR "-- VDAD get agent: |$affected_rows|update of vla table: $VDADcampaign|$server_ip\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "-- VDAD get agent: |$affected_rows|update of vla table: $VDADcampaign|$VARserver_ip\n|$stmtA|"; &agi_output;}
|
||||||
if ($affected_rows > 0)
|
if ($affected_rows > 0)
|
||||||
{
|
{
|
||||||
$stmtA = "SELECT conf_exten,user,extension,server_ip FROM vicidial_live_agents where status = 'QUEUE' and server_ip!='$server_ip' and campaign_id='$VDADcampaign' and callerid='$callerid' and channel='$channel' order by last_call_time limit 1;";
|
$stmtA = "SELECT conf_exten,user,extension,server_ip FROM vicidial_live_agents where status = 'QUEUE' and server_ip!='$VARserver_ip' and campaign_id='$VDADcampaign' and callerid='$callerid' and channel='$channel' order by last_call_time limit 1;";
|
||||||
if($M){print STDERR "\n\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;}
|
||||||
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
||||||
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
||||||
$sthArows=$sthA->rows;
|
$sthArows=$sthA->rows;
|
||||||
@@ -481,7 +473,7 @@ if ($rec_countWAITrem < 1)
|
|||||||
|
|
||||||
$stmtA = "UPDATE vicidial_auto_calls set status='XFER' where callerid='$callerid';";
|
$stmtA = "UPDATE vicidial_auto_calls set status='XFER' where callerid='$callerid';";
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
if ($M) {print STDERR "-- VDAD XFER REMOTE: |$affected_rows|update of vac table: $callerid\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "-- VDAD XFER REMOTE: |$affected_rows|update of vac table: $callerid\n|$stmtA|"; &agi_output;}
|
||||||
|
|
||||||
$dbhA->disconnect();
|
$dbhA->disconnect();
|
||||||
|
|
||||||
@@ -497,7 +489,7 @@ if ($rec_countWAITrem < 1)
|
|||||||
}
|
}
|
||||||
$VDADremDIALstr .= "$VDADconf_exten";
|
$VDADremDIALstr .= "$VDADconf_exten";
|
||||||
|
|
||||||
print STDERR "\nexiting the VDAD app, transferring call to $VDADremDIALstr\n";
|
if ($AGILOG) {$agi_string = "exiting the VDAD app, transferring call to $VDADremDIALstr"; &agi_output;}
|
||||||
print "SET CONTEXT $ext_context\n";
|
print "SET CONTEXT $ext_context\n";
|
||||||
checkresult($result);
|
checkresult($result);
|
||||||
print "SET EXTENSION $VDADremDIALstr\n";
|
print "SET EXTENSION $VDADremDIALstr\n";
|
||||||
@@ -516,25 +508,35 @@ if ($rec_countWAITrem < 1)
|
|||||||
|
|
||||||
$now_date_epoch = time();
|
$now_date_epoch = time();
|
||||||
$now_date = "$year-$mon-$mday $hour:$min:$sec";
|
$now_date = "$year-$mon-$mday $hour:$min:$sec";
|
||||||
print STDERR "\nXXXXXXXXXX VDAD transferred: start|stop $start_time|$now_date\n";
|
if ($AGILOG) {$agi_string = "XXXXXXXXXX VDAD transferred: start|stop $start_time|$now_date"; &agi_output;}
|
||||||
|
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
print STDERR "NNNNNNNNNN No agent record found!!!\n";
|
if ($AGILOG) {$agi_string = "NNNNNNNNNN No agent record found!!!"; &agi_output;}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
print STDERR "WWWWWWWW VDAD XFER REMOTE WAIT: |$rec_countWAITrem|$VDADcampaign|$channel|$callerid|$uniqueid|\n";
|
if ($AGILOG) {$agi_string = "WWWWWWWW VDAD XFER REMOTE WAIT: |$rec_countWAIT|$VDADcampaign|$channel|$callerid|$uniqueid|"; &agi_output;}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
### sleep for 99 hundredths of a second
|
if ($drop_timer < 3)
|
||||||
usleep(1*990*1000);
|
{
|
||||||
|
### sleep for 44.5 hundredths of a second
|
||||||
|
usleep(1*445*1000);
|
||||||
|
|
||||||
$drop_timer++;
|
$drop_timer = ($drop_timer + 0.5);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
### sleep for 99 hundredths of a second
|
||||||
|
usleep(1*990*1000);
|
||||||
|
|
||||||
|
$drop_timer++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -568,7 +570,7 @@ if ($drop_seconds < 1)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
$stmtA = "SELECT voicemail_ext FROM vicidial_campaigns where campaign_id = '$VDADcampaign' limit 1;";
|
$stmtA = "SELECT voicemail_ext FROM vicidial_campaigns where campaign_id = '$VDADcampaign' limit 1;";
|
||||||
if($M){print STDERR "\n\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;}
|
||||||
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
||||||
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
||||||
$sthArows=$sthA->rows;
|
$sthArows=$sthA->rows;
|
||||||
@@ -591,7 +593,7 @@ if ($drop_seconds < 1)
|
|||||||
|
|
||||||
if (length($DROPexten)>0)
|
if (length($DROPexten)>0)
|
||||||
{ ### if DROP extension is defined then send the dropped call there instead of hangup
|
{ ### if DROP extension is defined then send the dropped call there instead of hangup
|
||||||
print STDERR "\nexiting the VDAD app, transferring call to $DROPexten\n";
|
if ($AGILOG) {$agi_string = "exiting the VDAD app, transferring call to $DROPexten"; &agi_output;}
|
||||||
print "SET CONTEXT $ext_context\n";
|
print "SET CONTEXT $ext_context\n";
|
||||||
checkresult($result);
|
checkresult($result);
|
||||||
print "SET EXTENSION $DROPexten\n";
|
print "SET EXTENSION $DROPexten\n";
|
||||||
@@ -602,25 +604,24 @@ if ($drop_seconds < 1)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
### insert a NEW record to the vicidial_manager table to be processed
|
### insert a NEW record to the vicidial_manager table to be processed
|
||||||
$stmtA = "INSERT INTO vicidial_manager values('','','$SQLdate','NEW','N','$server_ip','','Hangup','$VHqueryCID','Channel: $channel','','','','','','','','','')";
|
$stmtA = "INSERT INTO vicidial_manager values('','','$SQLdate','NEW','N','$VARserver_ip','','Hangup','$VHqueryCID','Channel: $channel','','','','','','','','','')";
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
if ($M) {print STDERR "-- VDAD call_hungup timout: |$VHqueryCID|$VDADconf_exten|$channel|insert to vicidial_manager\n";}
|
if ($AGILOG) {$agi_string = "-- VDAD call_hungup timout: |$VHqueryCID|$VDADconf_exten|$channel|insert to vicidial_manager"; &agi_output;}
|
||||||
}
|
}
|
||||||
|
|
||||||
$stmtA = "DELETE FROM vicidial_auto_calls where callerid='$callerid' order by call_time desc limit 1;";
|
$stmtA = "DELETE FROM vicidial_auto_calls where callerid='$callerid' order by call_time desc limit 1;";
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
if ($M) {print STDERR "-- VDAD vac record deleted: |$affected_rows| $VDADcampaign|$server_ip\n";}
|
if ($AGILOG) {$agi_string = "-- VDAD vac record deleted: |$affected_rows|$VDADcampaign|"; &agi_output;}
|
||||||
|
|
||||||
$stmtA = "UPDATE vicidial_log set status='DROP',end_epoch='$now_date_epoch',length_in_sec='$drop_seconds' where uniqueid = '$uniqueid';";
|
$stmtA = "UPDATE vicidial_log set status='DROP',end_epoch='$now_date_epoch',length_in_sec='$drop_seconds' where uniqueid = '$uniqueid';";
|
||||||
if($M){print STDERR "\n\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;}
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
if ($M) {print STDERR "-- VDAD vicidial_log update: |$affected_rows|$uniqueid\n";}
|
if ($AGILOG) {$agi_string = "-- VDAD vicidial_log update: |$affected_rows|$uniqueid"; &agi_output;}
|
||||||
|
|
||||||
$stmtA = "UPDATE vicidial_list set status='DROP' where lead_id = '$CIDlead_id';";
|
$stmtA = "UPDATE vicidial_list set status='DROP' where lead_id = '$CIDlead_id';";
|
||||||
if($M){print STDERR "\n\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;}
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
if ($M) {print STDERR "-- VDAD vicidial_list update: |$affected_rows|$CIDlead_id\n";}
|
if ($AGILOG) {$agi_string = "-- VDAD vicidial_list update: |$affected_rows|$CIDlead_id"; &agi_output;}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -657,3 +658,19 @@ sub leading_zero($) {
|
|||||||
s/^(\d\d)$/0$1/;
|
s/^(\d\d)$/0$1/;
|
||||||
return $_;
|
return $_;
|
||||||
} # End of the leading_zero() routine.
|
} # End of the leading_zero() routine.
|
||||||
|
|
||||||
|
sub agi_output
|
||||||
|
{
|
||||||
|
if ($AGILOG >=2)
|
||||||
|
{
|
||||||
|
### open the log file for writing ###
|
||||||
|
open(Lout, ">>$AGILOGfile")
|
||||||
|
|| die "Can't open $AGILOGfile: $!\n";
|
||||||
|
print Lout "$now_date|$script|$agi_string\n";
|
||||||
|
close(Lout);
|
||||||
|
}
|
||||||
|
### send to STDERR writing ###
|
||||||
|
if ( ($AGILOG == '1') || ($AGILOG == '3') )
|
||||||
|
{print STDERR "$now_date|$script|$agi_string\n";}
|
||||||
|
$agi_string='';
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/perl
|
#!/usr/bin/perl
|
||||||
#
|
#
|
||||||
# agi-VDADtransfer.agi version 0.5 *DBI-version*
|
# agi-VDADtransfer.agi version 0.6 *DBI-version*
|
||||||
#
|
#
|
||||||
# runs when a call comes in from the VICIDIAL_auto_dialer. This script will
|
# runs when a call comes in from the VICIDIAL_auto_dialer. This script will
|
||||||
# send the calls out to the reps that are logged in.
|
# send the calls out to the reps that are logged in.
|
||||||
@@ -22,13 +22,26 @@
|
|||||||
# 60503-1054 - Added safe harbor and drop second options from campaign
|
# 60503-1054 - Added safe harbor and drop second options from campaign
|
||||||
# 60731-1441 - changed to use DBI-DBD::mysql
|
# 60731-1441 - changed to use DBI-DBD::mysql
|
||||||
# - changed to use /etc/astguiclient.conf for configs
|
# - changed to use /etc/astguiclient.conf for configs
|
||||||
|
# 60816-1036 - added output options check from database
|
||||||
|
# - changed look for agent every 0.5 second for first 4 sec on hold
|
||||||
#
|
#
|
||||||
|
|
||||||
$V = 1; # set to 1 for verbose mode
|
$script = 'agi-VDADtransfer.agi';
|
||||||
$M = 1; # set to 1 for 2 line messages mode
|
|
||||||
|
|
||||||
$DROP_TIME = 10; # default number of seconds to wait until you drop a waiting call
|
$DROP_TIME = 10; # default number of seconds to wait until you drop a waiting call
|
||||||
|
|
||||||
|
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
|
||||||
|
$year = ($year + 1900);
|
||||||
|
$mon++;
|
||||||
|
if ($mon < 10) {$mon = "0$mon";}
|
||||||
|
if ($mday < 10) {$mday = "0$mday";}
|
||||||
|
if ($hour < 10) {$Fhour = "0$hour";}
|
||||||
|
if ($min < 10) {$min = "0$min";}
|
||||||
|
if ($sec < 10) {$sec = "0$sec";}
|
||||||
|
|
||||||
|
$now_date_epoch = time();
|
||||||
|
$now_date = "$year-$mon-$mday $hour:$min:$sec";
|
||||||
|
|
||||||
# default path to astguiclient configuration file:
|
# default path to astguiclient configuration file:
|
||||||
$PATHconf = '/etc/astguiclient.conf';
|
$PATHconf = '/etc/astguiclient.conf';
|
||||||
|
|
||||||
@@ -67,34 +80,51 @@ foreach(@conf)
|
|||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Customized Variables
|
|
||||||
$server_ip = $VARserver_ip; # Asterisk server IP
|
|
||||||
|
|
||||||
if (!$VARDB_port) {$VARDB_port='3306';}
|
if (!$VARDB_port) {$VARDB_port='3306';}
|
||||||
|
if (!$AGILOGfile) {$AGILOGfile = "$PATHlogs/agiout.$year-$mon-$mday";}
|
||||||
|
|
||||||
use DBI;
|
use DBI;
|
||||||
use Time::HiRes ('gettimeofday','usleep','sleep'); # necessary to have perl sleep command of less than one second
|
use Time::HiRes ('gettimeofday','usleep','sleep'); # necessary to have perl sleep command of less than one second
|
||||||
use Asterisk::AGI;
|
use Asterisk::AGI;
|
||||||
$AGI = new Asterisk::AGI;
|
$AGI = new Asterisk::AGI;
|
||||||
|
|
||||||
|
$dbhA = DBI->connect("DBI:mysql:$VARDB_database:$VARDB_server:$VARDB_port", "$VARDB_user", "$VARDB_pass")
|
||||||
|
or die "Couldn't connect to database: " . DBI->errstr;
|
||||||
|
|
||||||
|
### Grab Server values from the database
|
||||||
|
$stmtA = "SELECT voicemail_dump_exten,ext_context,answer_transfer_agent,local_gmt,asterisk_version,max_vicidial_trunks,agi_output FROM servers where server_ip = '$VARserver_ip';";
|
||||||
|
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
||||||
|
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
||||||
|
$sthArows=$sthA->rows;
|
||||||
|
$rec_count=0;
|
||||||
|
while ($sthArows > $rec_count)
|
||||||
|
{
|
||||||
|
@aryA = $sthA->fetchrow_array;
|
||||||
|
$DBvoicemail_dump_exten = "$aryA[0]";
|
||||||
|
$DBext_context = "$aryA[1]";
|
||||||
|
$DBanswer_transfer_agent = "$aryA[2]";
|
||||||
|
$DBSERVER_GMT = "$aryA[3]";
|
||||||
|
$DBasterisk_version = "$aryA[4]";
|
||||||
|
$DBmax_vicidial_trunks = "$aryA[5]";
|
||||||
|
$DBagi_output = "$aryA[6]";
|
||||||
|
if ($DBvoicemail_dump_exten) {$voicemail_dump_exten = $DBvoicemail_dump_exten;}
|
||||||
|
if ($DBext_context) {$ext_context = $DBext_context;}
|
||||||
|
if ($DBanswer_transfer_agent) {$answer_transfer_agent = $DBanswer_transfer_agent;}
|
||||||
|
if ($DBSERVER_GMT) {$SERVER_GMT = $DBSERVER_GMT;}
|
||||||
|
if ($DBasterisk_version) {$AST_ver = $DBasterisk_version;}
|
||||||
|
if ($DBmax_vicidial_trunks) {$max_vicidial_trunks = $DBmax_vicidial_trunks;}
|
||||||
|
if ($DBagi_output =~ /STDERR/) {$AGILOG = '1';}
|
||||||
|
if ($DBagi_output =~ /FILE/) {$AGILOG = '2';}
|
||||||
|
if ($DBagi_output =~ /BOTH/) {$AGILOG = '3';}
|
||||||
|
$rec_count++;
|
||||||
|
}
|
||||||
|
$sthA->finish();
|
||||||
|
|
||||||
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
|
|
||||||
$year = ($year + 1900);
|
|
||||||
$mon++;
|
|
||||||
if ($mon < 10) {$mon = "0$mon";}
|
|
||||||
if ($mday < 10) {$mday = "0$mday";}
|
|
||||||
if ($hour < 10) {$Fhour = "0$hour";}
|
|
||||||
if ($min < 10) {$min = "0$min";}
|
|
||||||
if ($sec < 10) {$sec = "0$sec";}
|
|
||||||
|
|
||||||
$now_date_epoch = time();
|
|
||||||
$now_date = "$year-$mon-$mday $hour:$min:$sec";
|
|
||||||
$start_time=$now_date;
|
$start_time=$now_date;
|
||||||
$CIDdate = "$mon$mday$hour$min$sec";
|
$CIDdate = "$mon$mday$hour$min$sec";
|
||||||
$tsSQLdate = "$year$mon$mday$hour$min$sec";
|
$tsSQLdate = "$year$mon$mday$hour$min$sec";
|
||||||
$SQLdate = "$year-$mon-$mday $hour:$min:$sec";
|
$SQLdate = "$year-$mon-$mday $hour:$min:$sec";
|
||||||
$SQLdateBEGIN = $SQLdate;
|
$SQLdateBEGIN = $SQLdate;
|
||||||
|
|
||||||
$BDtarget = ($secX - 5);
|
$BDtarget = ($secX - 5);
|
||||||
($Bsec,$Bmin,$Bhour,$Bmday,$Bmon,$Byear,$Bwday,$Byday,$Bisdst) = localtime($BDtarget);
|
($Bsec,$Bmin,$Bhour,$Bmday,$Bmon,$Byear,$Bwday,$Byday,$Bisdst) = localtime($BDtarget);
|
||||||
@@ -112,12 +142,12 @@ if ($Bsec < 10) {$Bsec = "0$Bsec";}
|
|||||||
### begin parsing run-time options ###
|
### begin parsing run-time options ###
|
||||||
if (length($ARGV[0])>1)
|
if (length($ARGV[0])>1)
|
||||||
{
|
{
|
||||||
if ($V) {print STDERR "Perl Environment Dump:\n";}
|
if ($AGILOG) {$agi_string = "Perl Environment Dump:"; &agi_output;}
|
||||||
$i=0;
|
$i=0;
|
||||||
while ($#ARGV >= $i)
|
while ($#ARGV >= $i)
|
||||||
{
|
{
|
||||||
$args = "$args $ARGV[$i]";
|
$args = "$args $ARGV[$i]";
|
||||||
if ($V) {print STDERR "$i|$ARGV[$i]|\n";}
|
if ($AGILOG) {$agi_string = "$i|$ARGV[$i]"; &agi_output;}
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -151,17 +181,13 @@ if ($V) {print STDERR "Perl Environment Dump:\n";}
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
if ($V) {print "no command line options set\n";}
|
|
||||||
}
|
|
||||||
|
|
||||||
$|=1;
|
$|=1;
|
||||||
while(<STDIN>)
|
while(<STDIN>)
|
||||||
{
|
{
|
||||||
chomp;
|
chomp;
|
||||||
last unless length($_);
|
last unless length($_);
|
||||||
if ($V)
|
if ($AGILOG)
|
||||||
{
|
{
|
||||||
if (/^agi_(\w+)\:\s+(.*)$/)
|
if (/^agi_(\w+)\:\s+(.*)$/)
|
||||||
{
|
{
|
||||||
@@ -185,8 +211,7 @@ if ( (length($callerid)>20) && ($callerid =~ /\"\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S
|
|||||||
### set the callerid to the ACQS value(calleridname)
|
### set the callerid to the ACQS value(calleridname)
|
||||||
print "SET CALLERID $callerid\n";
|
print "SET CALLERID $callerid\n";
|
||||||
checkresult($result);
|
checkresult($result);
|
||||||
print STDERR "callerID changed: $callerid\n";
|
if ($AGILOG) {$agi_string = "callerID changed: $callerid"; &agi_output;}
|
||||||
|
|
||||||
}
|
}
|
||||||
if ( (
|
if ( (
|
||||||
(length($calleridname)>5) && ( (!$callerid) or ($callerid =~ /unknown|private|00000000/i) or ($callerid =~ /5551212/) )
|
(length($calleridname)>5) && ( (!$callerid) or ($callerid =~ /unknown|private|00000000/i) or ($callerid =~ /5551212/) )
|
||||||
@@ -196,74 +221,42 @@ if ( (
|
|||||||
### set the callerid to the ACQS value(calleridname)
|
### set the callerid to the ACQS value(calleridname)
|
||||||
print "SET CALLERID $callerid\n";
|
print "SET CALLERID $callerid\n";
|
||||||
checkresult($result);
|
checkresult($result);
|
||||||
print STDERR "callerID changed: $callerid\n";
|
if ($AGILOG) {$agi_string = "callerID changed: $callerid"; &agi_output;}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if ($V)
|
if ($AGILOG) {$agi_string = "AGI Environment Dump:"; &agi_output;}
|
||||||
{
|
|
||||||
|
|
||||||
if ($V) {print STDERR "AGI Environment Dump:\n";}
|
foreach $i (sort keys %AGI)
|
||||||
foreach $i (sort keys %AGI) {
|
{
|
||||||
if ($V) {print STDERR " -- $i = $AGI{$i}\n";}
|
if ($AGILOG) {$agi_string = " -- $i = $AGI{$i}"; &agi_output;}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($AGILOG) {$agi_string = "AGI Variables: |$unique_id|$channel|$extension|$type|$callerid|$calleridname|$priority|"; &agi_output;}
|
||||||
|
|
||||||
$VDADcampaign='';
|
$VDADcampaign='';
|
||||||
$VDADphone='';
|
$VDADphone='';
|
||||||
$VDADphone_code='';
|
$VDADphone_code='';
|
||||||
|
|
||||||
if ($V) {print STDERR "AGI Environment Dump: |$unique_id|$channel|$extension|$type|$callerid|$calleridname|$priority|\n";}
|
|
||||||
|
|
||||||
|
|
||||||
$callerid =~ s/\"//gi;
|
$callerid =~ s/\"//gi;
|
||||||
$CIDlead_id = $callerid;
|
$CIDlead_id = $callerid;
|
||||||
$CIDlead_id = substr($CIDlead_id, 11, 9);
|
$CIDlead_id = substr($CIDlead_id, 11, 9);
|
||||||
$CIDlead_id = ($CIDlead_id + 0);
|
$CIDlead_id = ($CIDlead_id + 0);
|
||||||
|
|
||||||
if ($V) {print STDERR "\nCALL RECEIVED IN FROM VDAD: $callerid $channel $priority\n";}
|
if ($AGILOG) {$agi_string = "+++++ VDAD START : |$CIDlead_id|$now_date|$AST_ver|$priority|"; &agi_output;}
|
||||||
if ($M) {print STDERR "+++++ VDAD START : |$unique_id|$channel|$extension|$type|$callerid|$CIDlead_id|$now_date|$AST_ver|$priority|\n";}
|
|
||||||
|
|
||||||
if ( ($channel =~ /Local/i) && ($AST_ver !~ /^1\.0\.8|^1\.0\.9/) )
|
if ( ($channel =~ /Local/i) && ($AST_ver !~ /^1\.0\.8|^1\.0\.9/) )
|
||||||
{
|
{
|
||||||
if ($M) {print STDERR "+++++ VDAD START LOCAL CHANNEL: EXITING- $priority\n";}
|
if ($AGILOG) {$agi_string = "+++++ VDAD START LOCAL CHANNEL: EXITING- $priority"; &agi_output;}
|
||||||
if ($priority > 2) {sleep(1);}
|
if ($priority > 2) {sleep(1);}
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$dbhA = DBI->connect("DBI:mysql:$VARDB_database:$VARDB_server:$VARDB_port", "$VARDB_user", "$VARDB_pass")
|
|
||||||
or die "Couldn't connect to database: " . DBI->errstr;
|
|
||||||
|
|
||||||
### Grab Server values from the database
|
|
||||||
$stmtA = "SELECT voicemail_dump_exten,ext_context,answer_transfer_agent,local_gmt,asterisk_version,max_vicidial_trunks FROM servers where server_ip = '$server_ip';";
|
|
||||||
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
|
||||||
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
|
||||||
$sthArows=$sthA->rows;
|
|
||||||
$rec_count=0;
|
|
||||||
while ($sthArows > $rec_count)
|
|
||||||
{
|
|
||||||
@aryA = $sthA->fetchrow_array;
|
|
||||||
$DBvoicemail_dump_exten = "$aryA[0]";
|
|
||||||
$DBext_context = "$aryA[1]";
|
|
||||||
$DBanswer_transfer_agent = "$aryA[2]";
|
|
||||||
$DBSERVER_GMT = "$aryA[3]";
|
|
||||||
$DBasterisk_version = "$aryA[4]";
|
|
||||||
$DBmax_vicidial_trunks = "$aryA[5]";
|
|
||||||
if ($DBvoicemail_dump_exten) {$voicemail_dump_exten = $DBvoicemail_dump_exten;}
|
|
||||||
if ($DBext_context) {$ext_context = $DBext_context;}
|
|
||||||
if ($DBanswer_transfer_agent) {$answer_transfer_agent = $DBanswer_transfer_agent;}
|
|
||||||
if ($DBSERVER_GMT) {$SERVER_GMT = $DBSERVER_GMT;}
|
|
||||||
if ($DBasterisk_version) {$AST_ver = $DBasterisk_version;}
|
|
||||||
if ($DBmax_vicidial_trunks) {$max_vicidial_trunks = $DBmax_vicidial_trunks;}
|
|
||||||
$rec_count++;
|
|
||||||
}
|
|
||||||
$sthA->finish();
|
|
||||||
|
|
||||||
### Grab call parameters from vicidial_auto_calls table
|
### Grab call parameters from vicidial_auto_calls table
|
||||||
$stmtA = "UPDATE vicidial_auto_calls set uniqueid='$unique_id', channel='$channel',status='LIVE' where callerid='$callerid' order by call_time desc limit 1;";
|
$stmtA = "UPDATE vicidial_auto_calls set uniqueid='$unique_id', channel='$channel',status='LIVE' where callerid='$callerid' order by call_time desc limit 1;";
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
if ($M) {print STDERR "-- VDAD : |$affected_rows|update of vac table: $callerid\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "-- VDAD : |$affected_rows|update of vac table: $callerid\n|$stmtA|"; &agi_output;}
|
||||||
if ($affected_rows > 0)
|
if ($affected_rows > 0)
|
||||||
{
|
{
|
||||||
$stmtA = "SELECT campaign_id,phone_number,phone_code,lead_id,call_time FROM vicidial_auto_calls where callerid='$callerid' order by call_time desc limit 1;";
|
$stmtA = "SELECT campaign_id,phone_number,phone_code,lead_id,call_time FROM vicidial_auto_calls where callerid='$callerid' order by call_time desc limit 1;";
|
||||||
@@ -303,11 +296,10 @@ if ($affected_rows > 0)
|
|||||||
$sthA->finish();
|
$sthA->finish();
|
||||||
|
|
||||||
$stmtA = "INSERT INTO vicidial_log (uniqueid,lead_id,campaign_id,call_date,start_epoch,status,phone_code,phone_number,user,processed) values('$uniqueid','$CIDlead_id','$VDADcampaign','$SQLdate','$now_date_epoch','QUEUE','$VDADphone_code','$VDADphone','VDAD','N')";
|
$stmtA = "INSERT INTO vicidial_log (uniqueid,lead_id,campaign_id,call_date,start_epoch,status,phone_code,phone_number,user,processed) values('$uniqueid','$CIDlead_id','$VDADcampaign','$SQLdate','$now_date_epoch','QUEUE','$VDADphone_code','$VDADphone','VDAD','N')";
|
||||||
if($M){print STDERR "\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;}
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
|
|
||||||
if ($M) {print STDERR "-- VDAD : |$VDADlead_id|$CIDlead_id|insert to vicidial_log: $uniqueid\n";}
|
if ($AGILOG) {$agi_string = "-- VDAD : |$VDADlead_id|$CIDlead_id|insert to vicidial_log: $uniqueid"; &agi_output;}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$drop_timer=0;
|
$drop_timer=0;
|
||||||
@@ -320,7 +312,7 @@ while ($drop_timer <= $DROP_TIME)
|
|||||||
$channel_status = $AGI->channel_status("$channel");
|
$channel_status = $AGI->channel_status("$channel");
|
||||||
if ($channel_status < 1)
|
if ($channel_status < 1)
|
||||||
{
|
{
|
||||||
print STDERR "CHANNEL $channel DOWN $channel_status $DROP_TIME|$drop_timer CHECKING AGAIN...\n";
|
if ($AGILOG) {$agi_string = "CHANNEL $channel DOWN $channel_status $DROP_TIME|$drop_timer CHECKING AGAIN"; &agi_output;}
|
||||||
### sleep for 99 hundredths of a second
|
### sleep for 99 hundredths of a second
|
||||||
usleep(1*990*1000);
|
usleep(1*990*1000);
|
||||||
|
|
||||||
@@ -328,7 +320,7 @@ if ($channel_status < 1)
|
|||||||
|
|
||||||
if ($channel_status_DC < 1)
|
if ($channel_status_DC < 1)
|
||||||
{
|
{
|
||||||
print STDERR "CHANNEL $channel DOWN $channel_status $DROP_TIME|$drop_timer\n";
|
if ($AGILOG) {$agi_string = "CHANNEL $channel DOWN $channel_status $DROP_TIME|$drop_timer"; &agi_output;}
|
||||||
if ($drop_timer < $DROP_TIME) {$drop_seconds = $drop_timer;}
|
if ($drop_timer < $DROP_TIME) {$drop_seconds = $drop_timer;}
|
||||||
$drop_timer = ($drop_timer + $DROP_TIME);
|
$drop_timer = ($drop_timer + $DROP_TIME);
|
||||||
}
|
}
|
||||||
@@ -353,8 +345,8 @@ if ($CAMP_callorder =~ /oldest_call_finish/i) {$agent_call_order = 'order by las
|
|||||||
if ($CAMP_callorder =~ /random/i) {$agent_call_order = 'order by random_id';}
|
if ($CAMP_callorder =~ /random/i) {$agent_call_order = 'order by random_id';}
|
||||||
|
|
||||||
$rec_countWAIT=0;
|
$rec_countWAIT=0;
|
||||||
$stmtA = "SELECT count(*) FROM vicidial_auto_calls where status = 'LIVE' and server_ip='$server_ip' and campaign_id = '$VDADcampaign' and call_time < \"$VDADcall_time\" and lead_id != '$VDADlead_id';";
|
$stmtA = "SELECT count(*) FROM vicidial_auto_calls where status = 'LIVE' and server_ip='$VARserver_ip' and campaign_id = '$VDADcampaign' and call_time < \"$VDADcall_time\" and lead_id != '$VDADlead_id';";
|
||||||
if($M){print STDERR "\n\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;}
|
||||||
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
||||||
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
||||||
$sthArows=$sthA->rows;
|
$sthArows=$sthA->rows;
|
||||||
@@ -368,13 +360,13 @@ while ($sthArows > $rec_count)
|
|||||||
$sthA->finish();
|
$sthA->finish();
|
||||||
if ($rec_countWAIT < 1)
|
if ($rec_countWAIT < 1)
|
||||||
{
|
{
|
||||||
$stmtA = "UPDATE vicidial_live_agents set status='QUEUE',lead_id='$CIDlead_id',uniqueid='$unique_id', channel='$channel', callerid='$callerid' where status = 'READY' and server_ip='$server_ip' and campaign_id='$VDADcampaign' and last_update_time > '$BDtsSQLdate' $agent_call_order limit 1;";
|
$stmtA = "UPDATE vicidial_live_agents set status='QUEUE',lead_id='$CIDlead_id',uniqueid='$unique_id', channel='$channel', callerid='$callerid' where status = 'READY' and server_ip='$VARserver_ip' and campaign_id='$VDADcampaign' and last_update_time > '$BDtsSQLdate' $agent_call_order limit 1;";
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
if ($M) {print STDERR "-- VDAD get agent: |$affected_rows|update of vla table: $VDADcampaign|$server_ip\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "-- VDAD get agent: |$affected_rows|update of vla table: $VDADcampaign|$VARserver_ip\n|$stmtA|"; &agi_output;}
|
||||||
if ($affected_rows > 0)
|
if ($affected_rows > 0)
|
||||||
{
|
{
|
||||||
$stmtA = "SELECT conf_exten,user,extension FROM vicidial_live_agents where status = 'QUEUE' and server_ip='$server_ip' and campaign_id='$VDADcampaign' and callerid='$callerid' and channel='$channel' order by last_call_time limit 1;";
|
$stmtA = "SELECT conf_exten,user,extension FROM vicidial_live_agents where status = 'QUEUE' and server_ip='$VARserver_ip' and campaign_id='$VDADcampaign' and callerid='$callerid' and channel='$channel' order by last_call_time limit 1;";
|
||||||
if($M){print STDERR "\n\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;}
|
||||||
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
||||||
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
||||||
$sthArows=$sthA->rows;
|
$sthArows=$sthA->rows;
|
||||||
@@ -391,11 +383,11 @@ if ($rec_countWAIT < 1)
|
|||||||
|
|
||||||
$stmtA = "UPDATE vicidial_auto_calls set status='XFER' where callerid='$callerid';";
|
$stmtA = "UPDATE vicidial_auto_calls set status='XFER' where callerid='$callerid';";
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
if ($M) {print STDERR "-- VDAD XFER : |$affected_rows|update of vac table: $callerid\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "-- VDAD XFER : |$affected_rows|update of vac table: $callerid\n|$stmtA|"; &agi_output;}
|
||||||
|
|
||||||
$dbhA->disconnect();
|
$dbhA->disconnect();
|
||||||
|
|
||||||
print STDERR "\nexiting the VDAD app, transferring call to $VDADconf_exten\n";
|
if ($AGILOG) {$agi_string = "exiting the VDAD app, transferring call to $VDADconf_exten"; &agi_output;}
|
||||||
print "SET CONTEXT $ext_context\n";
|
print "SET CONTEXT $ext_context\n";
|
||||||
checkresult($result);
|
checkresult($result);
|
||||||
print "SET EXTENSION $VDADconf_exten\n";
|
print "SET EXTENSION $VDADconf_exten\n";
|
||||||
@@ -414,24 +406,35 @@ if ($rec_countWAIT < 1)
|
|||||||
|
|
||||||
$now_date_epoch = time();
|
$now_date_epoch = time();
|
||||||
$now_date = "$year-$mon-$mday $hour:$min:$sec";
|
$now_date = "$year-$mon-$mday $hour:$min:$sec";
|
||||||
print STDERR "\nXXXXXXXXXX VDAD transferred: start|stop $start_time|$now_date\n";
|
if ($AGILOG) {$agi_string = "XXXXXXXXXX VDAD transferred: start|stop $start_time|$now_date"; &agi_output;}
|
||||||
|
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
print STDERR "NNNNNNNNNN No agent record found!!!\n";
|
if ($AGILOG) {$agi_string = "NNNNNNNNNN No agent record found!!!"; &agi_output;}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
print STDERR "WWWWWWWW VDAD XFER WAIT: |$rec_countWAIT|$VDADcampaign|$channel|$callerid|$uniqueid|\n";
|
if ($AGILOG) {$agi_string = "WWWWWWWW VDAD XFER WAIT: |$rec_countWAIT|$VDADcampaign|$channel|$callerid|$uniqueid|"; &agi_output;}
|
||||||
}
|
}
|
||||||
|
|
||||||
### sleep for 99 hundredths of a second
|
|
||||||
usleep(1*990*1000);
|
|
||||||
|
|
||||||
$drop_timer++;
|
if ($drop_timer < 3)
|
||||||
|
{
|
||||||
|
### sleep for 44.5 hundredths of a second
|
||||||
|
usleep(1*445*1000);
|
||||||
|
|
||||||
|
$drop_timer = ($drop_timer + 0.5);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
### sleep for 99 hundredths of a second
|
||||||
|
usleep(1*990*1000);
|
||||||
|
|
||||||
|
$drop_timer++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -465,7 +468,7 @@ if ($drop_seconds < 1)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
$stmtA = "SELECT voicemail_ext FROM vicidial_campaigns where campaign_id = '$VDADcampaign' limit 1;";
|
$stmtA = "SELECT voicemail_ext FROM vicidial_campaigns where campaign_id = '$VDADcampaign' limit 1;";
|
||||||
if($M){print STDERR "\n\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;}
|
||||||
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
||||||
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
||||||
$sthArows=$sthA->rows;
|
$sthArows=$sthA->rows;
|
||||||
@@ -488,7 +491,7 @@ if ($drop_seconds < 1)
|
|||||||
|
|
||||||
if (length($DROPexten)>0)
|
if (length($DROPexten)>0)
|
||||||
{ ### if DROP extension is defined then send the dropped call there instead of hangup
|
{ ### if DROP extension is defined then send the dropped call there instead of hangup
|
||||||
print STDERR "\nexiting the VDAD app, transferring call to $DROPexten\n";
|
if ($AGILOG) {$agi_string = "exiting the VDAD app, transferring call to $DROPexten"; &agi_output;}
|
||||||
print "SET CONTEXT $ext_context\n";
|
print "SET CONTEXT $ext_context\n";
|
||||||
checkresult($result);
|
checkresult($result);
|
||||||
print "SET EXTENSION $DROPexten\n";
|
print "SET EXTENSION $DROPexten\n";
|
||||||
@@ -499,25 +502,24 @@ if ($drop_seconds < 1)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
### insert a NEW record to the vicidial_manager table to be processed
|
### insert a NEW record to the vicidial_manager table to be processed
|
||||||
$stmtA = "INSERT INTO vicidial_manager values('','','$SQLdate','NEW','N','$server_ip','','Hangup','$VHqueryCID','Channel: $channel','','','','','','','','','')";
|
$stmtA = "INSERT INTO vicidial_manager values('','','$SQLdate','NEW','N','$VARserver_ip','','Hangup','$VHqueryCID','Channel: $channel','','','','','','','','','')";
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
if ($M) {print STDERR "-- VDAD call_hungup timout: |$VHqueryCID|$VDADconf_exten|$channel|insert to vicidial_manager\n";}
|
if ($AGILOG) {$agi_string = "-- VDAD call_hungup timout: |$VHqueryCID|$VDADconf_exten|$channel|insert to vicidial_manager"; &agi_output;}
|
||||||
}
|
}
|
||||||
|
|
||||||
$stmtA = "DELETE FROM vicidial_auto_calls where callerid='$callerid' order by call_time desc limit 1;";
|
$stmtA = "DELETE FROM vicidial_auto_calls where callerid='$callerid' order by call_time desc limit 1;";
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
if ($M) {print STDERR "-- VDAD vac record deleted: |$affected_rows| $VDADcampaign|$server_ip\n";}
|
if ($AGILOG) {$agi_string = "-- VDAD vac record deleted: |$affected_rows|$VDADcampaign|"; &agi_output;}
|
||||||
|
|
||||||
$stmtA = "UPDATE vicidial_log set status='DROP',end_epoch='$now_date_epoch',length_in_sec='$drop_seconds' where uniqueid = '$uniqueid';";
|
$stmtA = "UPDATE vicidial_log set status='DROP',end_epoch='$now_date_epoch',length_in_sec='$drop_seconds' where uniqueid = '$uniqueid';";
|
||||||
if($M){print STDERR "\n\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;}
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
if ($M) {print STDERR "-- VDAD vicidial_log update: |$affected_rows|$uniqueid\n";}
|
if ($AGILOG) {$agi_string = "-- VDAD vicidial_log update: |$affected_rows|$uniqueid"; &agi_output;}
|
||||||
|
|
||||||
$stmtA = "UPDATE vicidial_list set status='DROP' where lead_id = '$CIDlead_id';";
|
$stmtA = "UPDATE vicidial_list set status='DROP' where lead_id = '$CIDlead_id';";
|
||||||
if($M){print STDERR "\n\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;}
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
if ($M) {print STDERR "-- VDAD vicidial_list update: |$affected_rows|$CIDlead_id\n";}
|
if ($AGILOG) {$agi_string = "-- VDAD vicidial_list update: |$affected_rows|$CIDlead_id"; &agi_output;}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -547,3 +549,21 @@ sub checkresult {
|
|||||||
$fail++;
|
$fail++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
sub agi_output
|
||||||
|
{
|
||||||
|
if ($AGILOG >=2)
|
||||||
|
{
|
||||||
|
### open the log file for writing ###
|
||||||
|
open(Lout, ">>$AGILOGfile")
|
||||||
|
|| die "Can't open $AGILOGfile: $!\n";
|
||||||
|
print Lout "$now_date|$script|$agi_string\n";
|
||||||
|
close(Lout);
|
||||||
|
}
|
||||||
|
### send to STDERR writing ###
|
||||||
|
if ( ($AGILOG == '1') || ($AGILOG == '3') )
|
||||||
|
{print STDERR "$now_date|$script|$agi_string\n";}
|
||||||
|
$agi_string='';
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/perl
|
#!/usr/bin/perl
|
||||||
#
|
#
|
||||||
# agi-VDADtransferSURVEY.agi version 0.6 *DBI-version*
|
# agi-VDADtransferSURVEY.agi version 0.7 *DBI-version*
|
||||||
#
|
#
|
||||||
# runs when a call comes in from the VICIDIAL auto_dialer. This script will
|
# runs when a call comes in from the VICIDIAL auto_dialer. This script will
|
||||||
# send the calls out to the reps that are logged in if called person presses key.
|
# send the calls out to the reps that are logged in if called person presses key.
|
||||||
@@ -21,13 +21,26 @@
|
|||||||
# 60503-1100 - Added safe harbor and drop second options from campaign
|
# 60503-1100 - Added safe harbor and drop second options from campaign
|
||||||
# 60731-1441 - changed to use DBI-DBD::mysql
|
# 60731-1441 - changed to use DBI-DBD::mysql
|
||||||
# - changed to use /etc/astguiclient.conf for configs
|
# - changed to use /etc/astguiclient.conf for configs
|
||||||
|
# 60816-1034 - added output options check from database
|
||||||
|
# - changed look for agent every 0.5 second for first 4 sec on hold
|
||||||
#
|
#
|
||||||
|
|
||||||
$V = 1; # set to 1 for verbose mode
|
$script = 'agi-VDADtransferSURVEY.agi';
|
||||||
$M = 1; # set to 1 for 2 line messages mode
|
|
||||||
|
|
||||||
$DROP_TIME = 10; # default number of seconds to wait until you drop a waiting call
|
$DROP_TIME = 10; # default number of seconds to wait until you drop a waiting call
|
||||||
|
|
||||||
|
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
|
||||||
|
$year = ($year + 1900);
|
||||||
|
$mon++;
|
||||||
|
if ($mon < 10) {$mon = "0$mon";}
|
||||||
|
if ($mday < 10) {$mday = "0$mday";}
|
||||||
|
if ($hour < 10) {$Fhour = "0$hour";}
|
||||||
|
if ($min < 10) {$min = "0$min";}
|
||||||
|
if ($sec < 10) {$sec = "0$sec";}
|
||||||
|
|
||||||
|
$now_date_epoch = time();
|
||||||
|
$now_date = "$year-$mon-$mday $hour:$min:$sec";
|
||||||
|
|
||||||
# default path to astguiclient configuration file:
|
# default path to astguiclient configuration file:
|
||||||
$PATHconf = '/etc/astguiclient.conf';
|
$PATHconf = '/etc/astguiclient.conf';
|
||||||
|
|
||||||
@@ -66,10 +79,8 @@ foreach(@conf)
|
|||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Customized Variables
|
|
||||||
$server_ip = $VARserver_ip; # Asterisk server IP
|
|
||||||
|
|
||||||
if (!$VARDB_port) {$VARDB_port='3306';}
|
if (!$VARDB_port) {$VARDB_port='3306';}
|
||||||
|
if (!$AGILOGfile) {$AGILOGfile = "$PATHlogs/agiout.$year-$mon-$mday";}
|
||||||
|
|
||||||
use DBI;
|
use DBI;
|
||||||
use Time::HiRes ('gettimeofday','usleep','sleep'); # necessary to have perl sleep command of less than one second
|
use Time::HiRes ('gettimeofday','usleep','sleep'); # necessary to have perl sleep command of less than one second
|
||||||
@@ -77,23 +88,43 @@ use Asterisk::AGI;
|
|||||||
$AGI = new Asterisk::AGI;
|
$AGI = new Asterisk::AGI;
|
||||||
|
|
||||||
|
|
||||||
|
$dbhA = DBI->connect("DBI:mysql:$VARDB_database:$VARDB_server:$VARDB_port", "$VARDB_user", "$VARDB_pass")
|
||||||
|
or die "Couldn't connect to database: " . DBI->errstr;
|
||||||
|
|
||||||
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
|
### Grab Server values from the database
|
||||||
$year = ($year + 1900);
|
$stmtA = "SELECT voicemail_dump_exten,ext_context,answer_transfer_agent,local_gmt,asterisk_version,max_vicidial_trunks,agi_output FROM servers where server_ip = '$VARserver_ip';";
|
||||||
$mon++;
|
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
||||||
if ($mon < 10) {$mon = "0$mon";}
|
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
||||||
if ($mday < 10) {$mday = "0$mday";}
|
$sthArows=$sthA->rows;
|
||||||
if ($hour < 10) {$Fhour = "0$hour";}
|
$rec_count=0;
|
||||||
if ($min < 10) {$min = "0$min";}
|
while ($sthArows > $rec_count)
|
||||||
if ($sec < 10) {$sec = "0$sec";}
|
{
|
||||||
|
@aryA = $sthA->fetchrow_array;
|
||||||
|
$DBvoicemail_dump_exten = "$aryA[0]";
|
||||||
|
$DBext_context = "$aryA[1]";
|
||||||
|
$DBanswer_transfer_agent = "$aryA[2]";
|
||||||
|
$DBSERVER_GMT = "$aryA[3]";
|
||||||
|
$DBasterisk_version = "$aryA[4]";
|
||||||
|
$DBmax_vicidial_trunks = "$aryA[5]";
|
||||||
|
$DBagi_output = "$aryA[6]";
|
||||||
|
if ($DBvoicemail_dump_exten) {$voicemail_dump_exten = $DBvoicemail_dump_exten;}
|
||||||
|
if ($DBext_context) {$ext_context = $DBext_context;}
|
||||||
|
if ($DBanswer_transfer_agent) {$answer_transfer_agent = $DBanswer_transfer_agent;}
|
||||||
|
if ($DBSERVER_GMT) {$SERVER_GMT = $DBSERVER_GMT;}
|
||||||
|
if ($DBasterisk_version) {$AST_ver = $DBasterisk_version;}
|
||||||
|
if ($DBmax_vicidial_trunks) {$max_vicidial_trunks = $DBmax_vicidial_trunks;}
|
||||||
|
if ($DBagi_output =~ /STDERR/) {$AGILOG = '1';}
|
||||||
|
if ($DBagi_output =~ /FILE/) {$AGILOG = '2';}
|
||||||
|
if ($DBagi_output =~ /BOTH/) {$AGILOG = '3';}
|
||||||
|
$rec_count++;
|
||||||
|
}
|
||||||
|
$sthA->finish();
|
||||||
|
|
||||||
$now_date_epoch = time();
|
|
||||||
$now_date = "$year-$mon-$mday $hour:$min:$sec";
|
|
||||||
$start_time=$now_date;
|
$start_time=$now_date;
|
||||||
$CIDdate = "$mon$mday$hour$min$sec";
|
$CIDdate = "$mon$mday$hour$min$sec";
|
||||||
$tsSQLdate = "$year$mon$mday$hour$min$sec";
|
$tsSQLdate = "$year$mon$mday$hour$min$sec";
|
||||||
$SQLdate = "$year-$mon-$mday $hour:$min:$sec";
|
$SQLdate = "$year-$mon-$mday $hour:$min:$sec";
|
||||||
$SQLdateBEGIN = $SQLdate;
|
$SQLdateBEGIN = $SQLdate;
|
||||||
|
|
||||||
$BDtarget = ($secX - 5);
|
$BDtarget = ($secX - 5);
|
||||||
($Bsec,$Bmin,$Bhour,$Bmday,$Bmon,$Byear,$Bwday,$Byday,$Bisdst) = localtime($BDtarget);
|
($Bsec,$Bmin,$Bhour,$Bmday,$Bmon,$Byear,$Bwday,$Byday,$Bisdst) = localtime($BDtarget);
|
||||||
@@ -111,12 +142,12 @@ if ($Bsec < 10) {$Bsec = "0$Bsec";}
|
|||||||
### begin parsing run-time options ###
|
### begin parsing run-time options ###
|
||||||
if (length($ARGV[0])>1)
|
if (length($ARGV[0])>1)
|
||||||
{
|
{
|
||||||
if ($V) {print STDERR "Perl Environment Dump:\n";}
|
if ($AGILOG) {$agi_string = "Perl Environment Dump:"; &agi_output;}
|
||||||
$i=0;
|
$i=0;
|
||||||
while ($#ARGV >= $i)
|
while ($#ARGV >= $i)
|
||||||
{
|
{
|
||||||
$args = "$args $ARGV[$i]";
|
$args = "$args $ARGV[$i]";
|
||||||
if ($V) {print STDERR "$i|$ARGV[$i]|\n";}
|
if ($AGILOG) {$agi_string = "$i|$ARGV[$i]"; &agi_output;}
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -150,16 +181,12 @@ if ($V) {print STDERR "Perl Environment Dump:\n";}
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
if ($V) {print "no command line options set\n";}
|
|
||||||
}
|
|
||||||
|
|
||||||
$|=1;
|
$|=1;
|
||||||
while(<STDIN>) {
|
while(<STDIN>) {
|
||||||
chomp;
|
chomp;
|
||||||
last unless length($_);
|
last unless length($_);
|
||||||
if ($V)
|
if ($AGILOG)
|
||||||
{
|
{
|
||||||
if (/^agi_(\w+)\:\s+(.*)$/)
|
if (/^agi_(\w+)\:\s+(.*)$/)
|
||||||
{
|
{
|
||||||
@@ -183,8 +210,7 @@ if ( (length($callerid)>20) && ($callerid =~ /\"\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S
|
|||||||
### set the callerid to the ACQS value(calleridname)
|
### set the callerid to the ACQS value(calleridname)
|
||||||
print "SET CALLERID $callerid\n";
|
print "SET CALLERID $callerid\n";
|
||||||
checkresult($result);
|
checkresult($result);
|
||||||
print STDERR "callerID changed: $callerid\n";
|
if ($AGILOG) {$agi_string = "callerID changed: $callerid"; &agi_output;}
|
||||||
|
|
||||||
}
|
}
|
||||||
if ( (
|
if ( (
|
||||||
(length($calleridname)>5) && ( (!$callerid) or ($callerid =~ /unknown|private|00000000/i) or ($callerid =~ /5551212/) )
|
(length($calleridname)>5) && ( (!$callerid) or ($callerid =~ /unknown|private|00000000/i) or ($callerid =~ /5551212/) )
|
||||||
@@ -194,82 +220,49 @@ if ( (
|
|||||||
### set the callerid to the ACQS value(calleridname)
|
### set the callerid to the ACQS value(calleridname)
|
||||||
print "SET CALLERID $callerid\n";
|
print "SET CALLERID $callerid\n";
|
||||||
checkresult($result);
|
checkresult($result);
|
||||||
print STDERR "callerID changed: $callerid\n";
|
if ($AGILOG) {$agi_string = "callerID changed: $callerid"; &agi_output;}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if ($V)
|
if ($AGILOG) {$agi_string = "AGI Environment Dump:"; &agi_output;}
|
||||||
{
|
|
||||||
|
|
||||||
if ($V) {print STDERR "AGI Environment Dump:\n";}
|
foreach $i (sort keys %AGI)
|
||||||
foreach $i (sort keys %AGI) {
|
{
|
||||||
if ($V) {print STDERR " -- $i = $AGI{$i}\n";}
|
if ($AGILOG) {$agi_string = " -- $i = $AGI{$i}"; &agi_output;}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($AGILOG) {$agi_string = "AGI Variables: |$unique_id|$channel|$extension|$type|$callerid|$calleridname|$priority|"; &agi_output;}
|
||||||
|
|
||||||
$VDADcampaign='';
|
$VDADcampaign='';
|
||||||
$VDADphone='';
|
$VDADphone='';
|
||||||
$VDADphone_code='';
|
$VDADphone_code='';
|
||||||
|
|
||||||
if ($V) {print STDERR "AGI Environment Dump: |$unique_id|$channel|$extension|$type|$callerid|$priority|\n";}
|
|
||||||
|
|
||||||
|
|
||||||
$callerid =~ s/\"//gi;
|
$callerid =~ s/\"//gi;
|
||||||
$CIDlead_id = $callerid;
|
$CIDlead_id = $callerid;
|
||||||
$CIDlead_id = substr($CIDlead_id, 11, 9);
|
$CIDlead_id = substr($CIDlead_id, 11, 9);
|
||||||
$CIDlead_id = ($CIDlead_id + 0);
|
$CIDlead_id = ($CIDlead_id + 0);
|
||||||
|
|
||||||
if ($V) {print STDERR "\nCALL RECEIVED IN FROM VDAD: $callerid $channel $priority\n";}
|
if ($AGILOG) {$agi_string = "+++++ VDAD START : |$CIDlead_id|$now_date|$AST_ver|$priority|"; &agi_output;}
|
||||||
if ($M) {print STDERR "+++++ VDAD START : |$unique_id|$channel|$extension|$type|$callerid|$CIDlead_id|$now_date|$priority|\n";}
|
|
||||||
|
|
||||||
if ( ($channel =~ /Local/i) && ($AST_ver !~ /^1\.0\.8|^1\.0\.9/) )
|
if ( ($channel =~ /Local/i) && ($AST_ver !~ /^1\.0\.8|^1\.0\.9/) )
|
||||||
{
|
{
|
||||||
if ($M) {print STDERR "+++++ VDAD START LOCAL CHANNEL: EXITING- $priority\n";}
|
if ($AGILOG) {$agi_string = "+++++ VDAD START LOCAL CHANNEL: EXITING- $priority"; &agi_output;}
|
||||||
if ($priority > 2) {sleep(1);}
|
if ($priority > 2) {sleep(1);}
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$AGI->stream_file('beep');
|
$AGI->stream_file('beep');
|
||||||
|
|
||||||
$dbhA = DBI->connect("DBI:mysql:$VARDB_database:$VARDB_server:$VARDB_port", "$VARDB_user", "$VARDB_pass")
|
|
||||||
or die "Couldn't connect to database: " . DBI->errstr;
|
|
||||||
|
|
||||||
### Grab Server values from the database
|
|
||||||
$stmtA = "SELECT voicemail_dump_exten,ext_context,answer_transfer_agent,local_gmt,asterisk_version,max_vicidial_trunks FROM servers where server_ip = '$server_ip';";
|
|
||||||
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
|
||||||
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
|
||||||
$sthArows=$sthA->rows;
|
|
||||||
$rec_count=0;
|
|
||||||
while ($sthArows > $rec_count)
|
|
||||||
{
|
|
||||||
@aryA = $sthA->fetchrow_array;
|
|
||||||
$DBvoicemail_dump_exten = "$aryA[0]";
|
|
||||||
$DBext_context = "$aryA[1]";
|
|
||||||
$DBanswer_transfer_agent = "$aryA[2]";
|
|
||||||
$DBSERVER_GMT = "$aryA[3]";
|
|
||||||
$DBasterisk_version = "$aryA[4]";
|
|
||||||
$DBmax_vicidial_trunks = "$aryA[5]";
|
|
||||||
if ($DBvoicemail_dump_exten) {$voicemail_dump_exten = $DBvoicemail_dump_exten;}
|
|
||||||
if ($DBext_context) {$ext_context = $DBext_context;}
|
|
||||||
if ($DBanswer_transfer_agent) {$answer_transfer_agent = $DBanswer_transfer_agent;}
|
|
||||||
if ($DBSERVER_GMT) {$SERVER_GMT = $DBSERVER_GMT;}
|
|
||||||
if ($DBasterisk_version) {$AST_ver = $DBasterisk_version;}
|
|
||||||
if ($DBmax_vicidial_trunks) {$max_vicidial_trunks = $DBmax_vicidial_trunks;}
|
|
||||||
$rec_count++;
|
|
||||||
}
|
|
||||||
$sthA->finish();
|
|
||||||
|
|
||||||
$stmtA = "UPDATE vicidial_list set status='PU' where lead_id = '$CIDlead_id';";
|
$stmtA = "UPDATE vicidial_list set status='PU' where lead_id = '$CIDlead_id';";
|
||||||
if($M){print STDERR "\n\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;}
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
if ($M) {print STDERR "-- VDAD vicidial_list update: |$affected_rows|$CIDlead_id|XFER\n";}
|
if ($AGILOG) {$agi_string = "-- VDAD vicidial_list update: |$affected_rows|$CIDlead_id|XFER"; &agi_output;}
|
||||||
|
|
||||||
&enter_pin_number;
|
&enter_pin_number;
|
||||||
|
|
||||||
if ($V) {print STDERR "+++++ VDAD STATUS : pressed $pin|$unique_id|$channel|$extension|$type|$callerid|$CIDlead_id|$now_date\n";}
|
if ($AGILOG) {$agi_string = "+++++ VDAD STATUS : pressed $pin|$unique_id|$channel|$extension|$type|$callerid|$CIDlead_id|$now_date"; &agi_output;}
|
||||||
|
|
||||||
if ($pin !~ /^1|^2|^3|^8|^0/) {exit;}
|
if ($pin !~ /^1|^2|^3|^8|^0/) {exit;}
|
||||||
|
|
||||||
@@ -289,9 +282,9 @@ if ($pin == "3") {$voter = 'INDEPENDANT';}
|
|||||||
if ($pin == "0") {$voter = 'OPERATOR';}
|
if ($pin == "0") {$voter = 'OPERATOR';}
|
||||||
|
|
||||||
$stmtA = "UPDATE vicidial_list set security_phrase='$voter' where lead_id = '$CIDlead_id';";
|
$stmtA = "UPDATE vicidial_list set security_phrase='$voter' where lead_id = '$CIDlead_id';";
|
||||||
if($M){print STDERR "\n\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;}
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
if ($M) {print STDERR "-- VDAD vicidial_list VOTER update: |$affected_rows|$CIDlead_id|$voter\n";}
|
if ($AGILOG) {$agi_string = "-- VDAD vicidial_list VOTER update: |$affected_rows|$CIDlead_id|$voter"; &agi_output;}
|
||||||
|
|
||||||
# Thank you for your response, we would now like to transfer you to a poll-taker for just a few more questions. Please stay on the line.
|
# Thank you for your response, we would now like to transfer you to a poll-taker for just a few more questions. Please stay on the line.
|
||||||
|
|
||||||
@@ -300,7 +293,7 @@ $AGI->stream_file('US_pol_survey_transfer');
|
|||||||
### Grab call parameters from vicidial_auto_calls table
|
### Grab call parameters from vicidial_auto_calls table
|
||||||
$stmtA = "UPDATE vicidial_auto_calls set uniqueid='$unique_id', channel='$channel',status='LIVE' where callerid='$callerid' order by call_time desc limit 1;";
|
$stmtA = "UPDATE vicidial_auto_calls set uniqueid='$unique_id', channel='$channel',status='LIVE' where callerid='$callerid' order by call_time desc limit 1;";
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
if ($M) {print STDERR "-- VDAD : |$affected_rows|update of vac table: $callerid\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "-- VDAD : |$affected_rows|update of vac table: $callerid\n|$stmtA|"; &agi_output;}
|
||||||
if ($affected_rows > 0)
|
if ($affected_rows > 0)
|
||||||
{
|
{
|
||||||
$stmtA = "SELECT campaign_id,phone_number,phone_code,lead_id,call_time FROM vicidial_auto_calls where callerid='$callerid' order by call_time desc limit 1;";
|
$stmtA = "SELECT campaign_id,phone_number,phone_code,lead_id,call_time FROM vicidial_auto_calls where callerid='$callerid' order by call_time desc limit 1;";
|
||||||
@@ -340,11 +333,10 @@ if ($affected_rows > 0)
|
|||||||
$sthA->finish();
|
$sthA->finish();
|
||||||
|
|
||||||
$stmtA = "INSERT INTO vicidial_log (uniqueid,lead_id,campaign_id,call_date,start_epoch,status,phone_code,phone_number,user,processed) values('$uniqueid','$CIDlead_id','$VDADcampaign','$SQLdate','$now_date_epoch','QUEUE','$VDADphone_code','$VDADphone','VDAD','N')";
|
$stmtA = "INSERT INTO vicidial_log (uniqueid,lead_id,campaign_id,call_date,start_epoch,status,phone_code,phone_number,user,processed) values('$uniqueid','$CIDlead_id','$VDADcampaign','$SQLdate','$now_date_epoch','QUEUE','$VDADphone_code','$VDADphone','VDAD','N')";
|
||||||
if($M){print STDERR "\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;}
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
|
|
||||||
if ($M) {print STDERR "-- VDAD : |$VDADlead_id|$CIDlead_id|insert to vicidial_log: $uniqueid\n";}
|
if ($AGILOG) {$agi_string = "-- VDAD : |$VDADlead_id|$CIDlead_id|insert to vicidial_log: $uniqueid"; &agi_output;}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$drop_timer=0;
|
$drop_timer=0;
|
||||||
@@ -357,7 +349,7 @@ while ($drop_timer <= $DROP_TIME)
|
|||||||
$channel_status = $AGI->channel_status("$channel");
|
$channel_status = $AGI->channel_status("$channel");
|
||||||
if ($channel_status < 1)
|
if ($channel_status < 1)
|
||||||
{
|
{
|
||||||
print STDERR "CHANNEL $channel DOWN $channel_status $DROP_TIME|$drop_timer CHECKING AGAIN...\n";
|
if ($AGILOG) {$agi_string = "CHANNEL $channel DOWN $channel_status $DROP_TIME|$drop_timer CHECKING AGAIN"; &agi_output;}
|
||||||
### sleep for 99 hundredths of a second
|
### sleep for 99 hundredths of a second
|
||||||
usleep(1*990*1000);
|
usleep(1*990*1000);
|
||||||
|
|
||||||
@@ -365,113 +357,111 @@ if ($channel_status < 1)
|
|||||||
|
|
||||||
if ($channel_status_DC < 1)
|
if ($channel_status_DC < 1)
|
||||||
{
|
{
|
||||||
print STDERR "CHANNEL $channel DOWN $channel_status $DROP_TIME|$drop_timer\n";
|
if ($AGILOG) {$agi_string = "CHANNEL $channel DOWN $channel_status $DROP_TIME|$drop_timer"; &agi_output;}
|
||||||
if ($drop_timer < $DROP_TIME) {$drop_seconds = $drop_timer;}
|
if ($drop_timer < $DROP_TIME) {$drop_seconds = $drop_timer;}
|
||||||
$drop_timer = ($drop_timer + $DROP_TIME);
|
$drop_timer = ($drop_timer + $DROP_TIME);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$stmtA = "SELECT next_agent_call FROM vicidial_campaigns where campaign_id='$VDADcampaign';";
|
$stmtA = "SELECT next_agent_call FROM vicidial_campaigns where campaign_id='$VDADcampaign';";
|
||||||
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
||||||
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
||||||
$sthArows=$sthA->rows;
|
$sthArows=$sthA->rows;
|
||||||
$rec_count=0;
|
$rec_count=0;
|
||||||
while ($sthArows > $rec_count)
|
while ($sthArows > $rec_count)
|
||||||
{
|
{
|
||||||
@aryA = $sthA->fetchrow_array;
|
@aryA = $sthA->fetchrow_array;
|
||||||
$CAMP_callorder = "$aryA[0]";
|
$CAMP_callorder = "$aryA[0]";
|
||||||
$rec_count++;
|
$rec_count++;
|
||||||
}
|
}
|
||||||
$sthA->finish();
|
$sthA->finish();
|
||||||
|
|
||||||
$agent_call_order='';
|
$agent_call_order='';
|
||||||
if ($CAMP_callorder =~ /overall_user_level/i) {$agent_call_order = 'order by user_level desc,last_call_finish';}
|
if ($CAMP_callorder =~ /overall_user_level/i) {$agent_call_order = 'order by user_level desc,last_call_finish';}
|
||||||
if ($CAMP_callorder =~ /oldest_call_start/i) {$agent_call_order = 'order by last_call_time';}
|
if ($CAMP_callorder =~ /oldest_call_start/i) {$agent_call_order = 'order by last_call_time';}
|
||||||
if ($CAMP_callorder =~ /oldest_call_finish/i) {$agent_call_order = 'order by last_call_finish';}
|
if ($CAMP_callorder =~ /oldest_call_finish/i) {$agent_call_order = 'order by last_call_finish';}
|
||||||
if ($CAMP_callorder =~ /random/i) {$agent_call_order = 'order by random_id';}
|
if ($CAMP_callorder =~ /random/i) {$agent_call_order = 'order by random_id';}
|
||||||
|
|
||||||
$rec_countWAIT=0;
|
$rec_countWAIT=0;
|
||||||
$stmtA = "SELECT count(*) FROM vicidial_auto_calls where status = 'LIVE' and server_ip='$server_ip' and campaign_id = '$VDADcampaign' and call_time < \"$VDADcall_time\" and lead_id != '$VDADlead_id';";
|
$stmtA = "SELECT count(*) FROM vicidial_auto_calls where status = 'LIVE' and server_ip='$VARserver_ip' and campaign_id = '$VDADcampaign' and call_time < \"$VDADcall_time\" and lead_id != '$VDADlead_id';";
|
||||||
if($M){print STDERR "\n\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;}
|
||||||
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
||||||
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
||||||
$sthArows=$sthA->rows;
|
$sthArows=$sthA->rows;
|
||||||
$rec_count=0;
|
$rec_count=0;
|
||||||
while ($sthArows > $rec_count)
|
while ($sthArows > $rec_count)
|
||||||
|
{
|
||||||
|
@aryA = $sthA->fetchrow_array;
|
||||||
|
$rec_countWAIT = "$aryA[0]";
|
||||||
|
$rec_count++;
|
||||||
|
}
|
||||||
|
$sthA->finish();
|
||||||
|
if ($rec_countWAIT < 1)
|
||||||
|
{
|
||||||
|
$stmtA = "UPDATE vicidial_live_agents set status='QUEUE',lead_id='$CIDlead_id',uniqueid='$unique_id', channel='$channel', callerid='$callerid' where status = 'READY' and server_ip='$VARserver_ip' and campaign_id='$VDADcampaign' and last_update_time > '$BDtsSQLdate' $agent_call_order limit 1;";
|
||||||
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
|
if ($AGILOG) {$agi_string = "-- VDAD get agent: |$affected_rows|update of vla table: $VDADcampaign|$VARserver_ip\n|$stmtA|"; &agi_output;}
|
||||||
|
if ($affected_rows > 0)
|
||||||
{
|
{
|
||||||
@aryA = $sthA->fetchrow_array;
|
$stmtA = "SELECT conf_exten,user,extension FROM vicidial_live_agents where status = 'QUEUE' and server_ip='$VARserver_ip' and campaign_id='$VDADcampaign' and callerid='$callerid' and channel='$channel' order by last_call_time limit 1;";
|
||||||
$rec_countWAIT = "$aryA[0]";
|
if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;}
|
||||||
$rec_count++;
|
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
||||||
}
|
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
||||||
$sthA->finish();
|
$sthArows=$sthA->rows;
|
||||||
if ($rec_countWAIT < 1)
|
$rec_count=0;
|
||||||
{
|
while ($sthArows > $rec_count)
|
||||||
$stmtA = "UPDATE vicidial_live_agents set status='QUEUE',lead_id='$CIDlead_id',uniqueid='$unique_id', channel='$channel', callerid='$callerid' where status = 'READY' and server_ip='$server_ip' and campaign_id='$VDADcampaign' and last_update_time > '$BDtsSQLdate' $agent_call_order limit 1;";
|
{
|
||||||
|
@aryA = $sthA->fetchrow_array;
|
||||||
|
$VDADconf_exten = "$aryA[0]";
|
||||||
|
$VDADuser = "$aryA[1]";
|
||||||
|
$VDADextension = "$aryA[2]";
|
||||||
|
$rec_count++;
|
||||||
|
}
|
||||||
|
$sthA->finish();
|
||||||
|
|
||||||
|
$stmtA = "UPDATE vicidial_auto_calls set status='XFER' where callerid='$callerid';";
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
if ($M) {print STDERR "-- VDAD get agent: |$affected_rows|update of vla table: $VDADcampaign|$server_ip\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "-- VDAD XFER : |$affected_rows|update of vac table: $callerid\n|$stmtA|"; &agi_output;}
|
||||||
if ($affected_rows > 0)
|
|
||||||
{
|
|
||||||
$stmtA = "SELECT conf_exten,user,extension FROM vicidial_live_agents where status = 'QUEUE' and server_ip='$server_ip' and campaign_id='$VDADcampaign' and callerid='$callerid' and channel='$channel' order by last_call_time limit 1;";
|
|
||||||
if($M){print STDERR "\n\n|$stmtA|\n";}
|
|
||||||
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
|
||||||
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
|
||||||
$sthArows=$sthA->rows;
|
|
||||||
$rec_count=0;
|
|
||||||
while ($sthArows > $rec_count)
|
|
||||||
{
|
|
||||||
@aryA = $sthA->fetchrow_array;
|
|
||||||
$VDADconf_exten = "$aryA[0]";
|
|
||||||
$VDADuser = "$aryA[1]";
|
|
||||||
$VDADextension = "$aryA[2]";
|
|
||||||
$rec_count++;
|
|
||||||
}
|
|
||||||
$sthA->finish();
|
|
||||||
|
|
||||||
$stmtA = "UPDATE vicidial_auto_calls set status='XFER' where callerid='$callerid';";
|
$stmtA = "UPDATE vicidial_list set status='XFER' where lead_id = '$CIDlead_id';";
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;}
|
||||||
if ($M) {print STDERR "-- VDAD XFER : |$affected_rows|update of vac table: $callerid\n|$stmtA|\n";}
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
|
if ($AGILOG) {$agi_string = "-- VDAD vicidial_list update: |$affected_rows|$CIDlead_id|XFER\n|$stmtA|"; &agi_output;}
|
||||||
|
|
||||||
$stmtA = "UPDATE vicidial_list set status='XFER' where lead_id = '$CIDlead_id';";
|
$dbhA->disconnect();
|
||||||
if($M){print STDERR "\n\n|$stmtA|\n";}
|
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
|
||||||
if ($M) {print STDERR "-- VDAD vicidial_list update: |$affected_rows|$CIDlead_id|XFER\n";}
|
|
||||||
|
|
||||||
$dbhA->disconnect();
|
if ($AGILOG) {$agi_string = "exiting the VDAD app, transferring call to $VDADconf_exten"; &agi_output;}
|
||||||
|
print "SET CONTEXT $ext_context\n";
|
||||||
|
checkresult($result);
|
||||||
|
print "SET EXTENSION $VDADconf_exten\n";
|
||||||
|
checkresult($result);
|
||||||
|
print "SET PRIORITY 1\n";
|
||||||
|
checkresult($result);
|
||||||
|
|
||||||
print STDERR "\nexiting the VDAD app, transferring call to $VDADconf_exten\n";
|
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
|
||||||
print "SET CONTEXT $ext_context\n";
|
$year = ($year + 1900);
|
||||||
checkresult($result);
|
$mon++;
|
||||||
print "SET EXTENSION $VDADconf_exten\n";
|
if ($mon < 10) {$mon = "0$mon";}
|
||||||
checkresult($result);
|
if ($mday < 10) {$mday = "0$mday";}
|
||||||
print "SET PRIORITY 1\n";
|
if ($hour < 10) {$Fhour = "0$hour";}
|
||||||
checkresult($result);
|
if ($min < 10) {$min = "0$min";}
|
||||||
|
if ($sec < 10) {$sec = "0$sec";}
|
||||||
|
|
||||||
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
|
$now_date_epoch = time();
|
||||||
$year = ($year + 1900);
|
$now_date = "$year-$mon-$mday $hour:$min:$sec";
|
||||||
$mon++;
|
if ($AGILOG) {$agi_string = "XXXXXXXXXX VDAD transferred: start|stop $start_time|$now_date"; &agi_output;}
|
||||||
if ($mon < 10) {$mon = "0$mon";}
|
|
||||||
if ($mday < 10) {$mday = "0$mday";}
|
exit;
|
||||||
if ($hour < 10) {$Fhour = "0$hour";}
|
|
||||||
if ($min < 10) {$min = "0$min";}
|
|
||||||
if ($sec < 10) {$sec = "0$sec";}
|
|
||||||
|
|
||||||
$now_date_epoch = time();
|
|
||||||
$now_date = "$year-$mon-$mday $hour:$min:$sec";
|
|
||||||
print STDERR "\nXXXXXXXXXX VDAD transferred: start|stop $start_time|$now_date\n";
|
|
||||||
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
print STDERR "NNNNNNNNNN No agent record found!!!\n";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
print STDERR "WWWWWWWW VDAD XFER WAIT: |$rec_countWAIT|$VDADcampaign|$channel|$callerid|$uniqueid|\n";
|
if ($AGILOG) {$agi_string = "NNNNNNNNNN No agent record found!!!"; &agi_output;}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ($AGILOG) {$agi_string = "WWWWWWWW VDAD XFER WAIT: |$rec_countWAIT|$VDADcampaign|$channel|$callerid|$uniqueid|"; &agi_output;}
|
||||||
|
}
|
||||||
|
|
||||||
### sleep for 99 hundredths of a second
|
|
||||||
usleep(1*990*1000);
|
|
||||||
|
|
||||||
if ($hold_message_counter > 30)
|
if ($hold_message_counter > 30)
|
||||||
{
|
{
|
||||||
@@ -486,7 +476,20 @@ if ($hold_tone_counter > 3)
|
|||||||
}
|
}
|
||||||
else {$hold_tone_counter++;}
|
else {$hold_tone_counter++;}
|
||||||
|
|
||||||
$drop_timer++;
|
if ($drop_timer < 3)
|
||||||
|
{
|
||||||
|
### sleep for 44.5 hundredths of a second
|
||||||
|
usleep(1*445*1000);
|
||||||
|
|
||||||
|
$drop_timer = ($drop_timer + 0.5);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
### sleep for 99 hundredths of a second
|
||||||
|
usleep(1*990*1000);
|
||||||
|
|
||||||
|
$drop_timer++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -520,7 +523,7 @@ if ($drop_seconds < 1)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
$stmtA = "SELECT voicemail_ext FROM vicidial_campaigns where campaign_id = '$VDADcampaign' limit 1;";
|
$stmtA = "SELECT voicemail_ext FROM vicidial_campaigns where campaign_id = '$VDADcampaign' limit 1;";
|
||||||
if($M){print STDERR "\n\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;}
|
||||||
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
|
||||||
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
|
||||||
$sthArows=$sthA->rows;
|
$sthArows=$sthA->rows;
|
||||||
@@ -543,7 +546,7 @@ if ($drop_seconds < 1)
|
|||||||
|
|
||||||
if (length($DROPexten)>0)
|
if (length($DROPexten)>0)
|
||||||
{ ### if DROP extension is defined then send the dropped call there instead of hangup
|
{ ### if DROP extension is defined then send the dropped call there instead of hangup
|
||||||
print STDERR "\nexiting the VDAD app, transferring call to $DROPexten\n";
|
if ($AGILOG) {$agi_string = "exiting the VDAD app, transferring call to $DROPexten"; &agi_output;}
|
||||||
print "SET CONTEXT $ext_context\n";
|
print "SET CONTEXT $ext_context\n";
|
||||||
checkresult($result);
|
checkresult($result);
|
||||||
print "SET EXTENSION $DROPexten\n";
|
print "SET EXTENSION $DROPexten\n";
|
||||||
@@ -554,25 +557,24 @@ if ($drop_seconds < 1)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
### insert a NEW record to the vicidial_manager table to be processed
|
### insert a NEW record to the vicidial_manager table to be processed
|
||||||
$stmtA = "INSERT INTO vicidial_manager values('','','$SQLdate','NEW','N','$server_ip','','Hangup','$VHqueryCID','Channel: $channel','','','','','','','','','')";
|
$stmtA = "INSERT INTO vicidial_manager values('','','$SQLdate','NEW','N','$VARserver_ip','','Hangup','$VHqueryCID','Channel: $channel','','','','','','','','','')";
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
if ($M) {print STDERR "-- VDAD call_hungup timout: |$VHqueryCID|$VDADconf_exten|$channel|insert to vicidial_manager\n";}
|
if ($AGILOG) {$agi_string = "-- VDAD call_hungup timout: |$VHqueryCID|$VDADconf_exten|$channel|insert to vicidial_manager"; &agi_output;}
|
||||||
}
|
}
|
||||||
|
|
||||||
$stmtA = "DELETE FROM vicidial_auto_calls where callerid='$callerid' order by call_time desc limit 1;";
|
$stmtA = "DELETE FROM vicidial_auto_calls where callerid='$callerid' order by call_time desc limit 1;";
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
if ($M) {print STDERR "-- VDAD vac record deleted: |$affected_rows| $VDADcampaign|$server_ip\n";}
|
if ($AGILOG) {$agi_string = "-- VDAD vac record deleted: |$affected_rows|$VDADcampaign|"; &agi_output;}
|
||||||
|
|
||||||
$stmtA = "UPDATE vicidial_log set status='DROP',end_epoch='$now_date_epoch',length_in_sec='$drop_seconds' where uniqueid = '$uniqueid';";
|
$stmtA = "UPDATE vicidial_log set status='DROP',end_epoch='$now_date_epoch',length_in_sec='$drop_seconds' where uniqueid = '$uniqueid';";
|
||||||
if($M){print STDERR "\n\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;}
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
if ($M) {print STDERR "-- VDAD vicidial_log update: |$affected_rows|$uniqueid\n";}
|
if ($AGILOG) {$agi_string = "-- VDAD vicidial_log update: |$affected_rows|$uniqueid"; &agi_output;}
|
||||||
|
|
||||||
$stmtA = "UPDATE vicidial_list set status='DROP' where lead_id = '$CIDlead_id';";
|
$stmtA = "UPDATE vicidial_list set status='DROP' where lead_id = '$CIDlead_id';";
|
||||||
if($M){print STDERR "\n\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;}
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
if ($M) {print STDERR "-- VDAD vicidial_list update: |$affected_rows|$CIDlead_id\n";}
|
if ($AGILOG) {$agi_string = "-- VDAD vicidial_list update: |$affected_rows|$CIDlead_id"; &agi_output;}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} ### end if pressed 1,2,3 or 0
|
} ### end if pressed 1,2,3 or 0
|
||||||
@@ -588,17 +590,17 @@ $AGI->stream_file('US_thanks_no_contact');
|
|||||||
|
|
||||||
$stmtA = "DELETE FROM vicidial_auto_calls where callerid='$callerid' order by call_time desc limit 1;";
|
$stmtA = "DELETE FROM vicidial_auto_calls where callerid='$callerid' order by call_time desc limit 1;";
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
if ($M) {print STDERR "-- VDAD vac record deleted: |$affected_rows| $VDADcampaign|$server_ip\n";}
|
if ($AGILOG) {$agi_string = "-- VDAD vac record deleted: |$affected_rows|$VDADcampaign|"; &agi_output;}
|
||||||
|
|
||||||
$stmtA = "UPDATE vicidial_log set status='DNC',end_epoch='$now_date_epoch',length_in_sec='$drop_seconds' where uniqueid = '$uniqueid';";
|
$stmtA = "UPDATE vicidial_log set status='DNC',end_epoch='$now_date_epoch',length_in_sec='$drop_seconds' where uniqueid = '$uniqueid';";
|
||||||
if($M){print STDERR "\n\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;}
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
if ($M) {print STDERR "-- VDAD vicidial_log update: DNC|$affected_rows|$uniqueid\n";}
|
if ($AGILOG) {$agi_string = "-- VDAD vicidial_log update: DNC|$affected_rows|$uniqueid"; &agi_output;}
|
||||||
|
|
||||||
$stmtA = "UPDATE vicidial_list set status='DNC' where lead_id = '$CIDlead_id';";
|
$stmtA = "UPDATE vicidial_list set status='DNC' where lead_id = '$CIDlead_id';";
|
||||||
if($M){print STDERR "\n\n|$stmtA|\n";}
|
if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;}
|
||||||
$affected_rows = $dbhA->do($stmtA);
|
$affected_rows = $dbhA->do($stmtA);
|
||||||
if ($M) {print STDERR "-- VDAD vicidial_list update: DNC|$affected_rows|$CIDlead_id\n";}
|
if ($AGILOG) {$agi_string = "-- VDAD vicidial_list update: DNC|$affected_rows|$CIDlead_id"; &agi_output;}
|
||||||
|
|
||||||
|
|
||||||
exit;
|
exit;
|
||||||
@@ -621,7 +623,7 @@ undef $interrupt_digit;
|
|||||||
|
|
||||||
$interrupt_digit = $AGI->stream_file('US_pol_survey_hello','123456789');
|
$interrupt_digit = $AGI->stream_file('US_pol_survey_hello','123456789');
|
||||||
|
|
||||||
print STDERR "interrupt_digit |$interrupt_digit|\n";
|
if ($AGILOG) {$agi_string = "interrupt_digit |$interrupt_digit|"; &agi_output;}
|
||||||
|
|
||||||
$digits_being_entered=1;
|
$digits_being_entered=1;
|
||||||
$digit_loop_counter=0;
|
$digit_loop_counter=0;
|
||||||
@@ -650,7 +652,7 @@ while ($digit_loop_counter < 1)
|
|||||||
if ($digit =~ /\d/)
|
if ($digit =~ /\d/)
|
||||||
{
|
{
|
||||||
$totalDTMF = "$totalDTMF$digit";
|
$totalDTMF = "$totalDTMF$digit";
|
||||||
print STDERR "digit |$digit| TotalDTMF |$totalDTMF|\n";
|
if ($AGILOG) {$agi_string = "digit |$digit| TotalDTMF |$totalDTMF|"; &agi_output;}
|
||||||
# $AGI->say_digits("$digit");
|
# $AGI->say_digits("$digit");
|
||||||
undef $digit;
|
undef $digit;
|
||||||
}
|
}
|
||||||
@@ -664,7 +666,10 @@ while ($digit_loop_counter < 1)
|
|||||||
|
|
||||||
$totalDTMF =~ s/\D//gi;
|
$totalDTMF =~ s/\D//gi;
|
||||||
$pin = $totalDTMF;
|
$pin = $totalDTMF;
|
||||||
if ($totalDTMF) {print STDERR "digit |$digit| TotalDTMF |$totalDTMF|\n";}
|
if ($totalDTMF)
|
||||||
|
{
|
||||||
|
if ($AGILOG) {$agi_string = "digit |$digit| TotalDTMF |$totalDTMF|"; &agi_output;}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -693,3 +698,21 @@ sub checkresult {
|
|||||||
|
|
||||||
|
|
||||||
### Hello, you've been chosen to receive a great deal on travel to Florida, if you are insterested please press one on your phone now,,,,,If you would not like to be contacted again please press 2
|
### Hello, you've been chosen to receive a great deal on travel to Florida, if you are insterested please press one on your phone now,,,,,If you would not like to be contacted again please press 2
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
sub agi_output
|
||||||
|
{
|
||||||
|
if ($AGILOG >=2)
|
||||||
|
{
|
||||||
|
### open the log file for writing ###
|
||||||
|
open(Lout, ">>$AGILOGfile")
|
||||||
|
|| die "Can't open $AGILOGfile: $!\n";
|
||||||
|
print Lout "$now_date|$script|$agi_string\n";
|
||||||
|
close(Lout);
|
||||||
|
}
|
||||||
|
### send to STDERR writing ###
|
||||||
|
if ( ($AGILOG == '1') || ($AGILOG == '3') )
|
||||||
|
{print STDERR "$now_date|$script|$agi_string\n";}
|
||||||
|
$agi_string='';
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user