2006-04-14_snapshot

git-svn-id: svn://192.168.202.10@3 3d104415-ff17-0410-8863-d5cf3c621b8a
This commit is contained in:
mattf
2006-07-07 15:08:33 +00:00
parent e99b4ba4c3
commit 23592859ca
18 changed files with 1259 additions and 299 deletions
+4 -2
View File
@@ -29,6 +29,7 @@
#
# 51021-1058 Added quotes around CLI executed commands
# 51122-1458 Added soxmix binary path check
# 60318-0921 Added ability to mix gsm audio files
#
@@ -77,14 +78,15 @@ foreach(@FILES)
$size2 = (-s "$dir1/$FILES[$i]");
if ($v) {print "$FILES[$i] $size2\n\n";}
if ( ($FILES[$i] !~ /out\.wav/i) && ($size1 eq $size2) && (length($FILES[$i]) > 4))
if ( ($FILES[$i] !~ /out\.wav|out\.gsm/i) && ($size1 eq $size2) && (length($FILES[$i]) > 4))
{
$INfile = $FILES[$i];
$OUTfile = $FILES[$i];
$OUTfile =~ s/-in\.wav/-out.wav/gi;
$OUTfile =~ s/-in\.gsm/-out.gsm/gi;
$ALLfile = $FILES[$i];
$ALLfile =~ s/-in\.wav/-all.wav/gi;
$ALLfile =~ s/-in\.gsm/-all.gsm/gi;
if ($v) {print "|$INfile| |$OUTfile| |$ALLfile|\n\n";}
@@ -29,6 +29,7 @@
#
# 51021-1058 Added quotes around CLI executed commands
# 51122-1456 Added soxmix binary path check
# 60318-0921 Added ability to mix gsm audio files
#
@@ -69,13 +70,15 @@ foreach(@FILES)
if ($v) {print "$FILES[$i] $size2\n\n";}
if ( ($FILES[$i] !~ /out\.wav/i) && ($size1 eq $size2) && (length($FILES[$i]) > 4))
if ( ($FILES[$i] !~ /out\.wav|out\.gsm/i) && ($size1 eq $size2) && (length($FILES[$i]) > 4))
{
$INfile = $FILES[$i];
$OUTfile = $FILES[$i];
$OUTfile =~ s/-in\.wav/-out.wav/gi;
$OUTfile =~ s/-in\.gsm/-out.gsm/gi;
$ALLfile = $FILES[$i];
$ALLfile =~ s/-in\.wav/-all.wav/gi;
$ALLfile =~ s/-in\.gsm/-all.gsm/gi;
if ($v) {print "|$INfile| |$OUTfile| |$ALLfile|\n\n";}
+61 -12
View File
@@ -1,6 +1,6 @@
#!/usr/bin/perl
#
# AST_VDhopper.pl version 0.4
# AST_VDhopper.pl version 0.5
#
# DESCRIPTION:
# uses Net::MySQL to update the VICIDIAL leads hopper for the new streamlined
@@ -29,6 +29,8 @@
# 60215-1106 - Added Scheduled Callback release functionality
# 60228-1623 - Change Callback activation to set the called_since_last_reset=N
# 60228-1735 - Added hopper gmt validation to remove gmt outside of time range
# 60320-0932 - Added inactive lead list hopper deletion (Thanks Vic Jolin)
# 60322-1030 - Added super debug output
#
# constants
@@ -60,7 +62,7 @@ if (length($ARGV[0])>1)
if ($args =~ /--help/i)
{
print "allowed run time options(must stay in this order):\n [--debug] = debug\n [--dbgmt] = show GMT offset of records as they are inserted into hopper\n [-t] = test\n [--level=XXX] = force a hopper_level of XXX\n [--campaign=XXX] = run for campaign XXX only\n\n";
print "allowed run time options(must stay in this order):\n [--debug] = debug\n [--debugX] = super debug\n [--dbgmt] = show GMT offset of records as they are inserted into hopper\n [-t] = test\n [--level=XXX] = force a hopper_level of XXX\n [--campaign=XXX] = run for campaign XXX only\n\n";
}
else
{
@@ -85,7 +87,12 @@ if (length($ARGV[0])>1)
if ($args =~ /--debug/i)
{
$DB=1;
print "\n-----DEBUG -----\n\n";
print "\n----- DEBUG -----\n\n";
}
if ($args =~ /--debugX/i)
{
$DBX=1;
print "\n----- SUPER DEBUG -----\n\n";
}
if ($args =~ /--dbgmt/i)
{
@@ -131,7 +138,7 @@ if ($dbhA->has_selected_record)
while ( $record = $iter->each)
{
$DBSERVER_GMT = "$record->[0]";
if ($DBSERVER_GMT) {$SERVER_GMT = $DBSERVER_GMT;}
if (length($DBSERVER_GMT)>0) {$SERVER_GMT = $DBSERVER_GMT;}
}
}
@@ -168,6 +175,34 @@ if ($wipe_hopper_clean)
exit;
}
### Delete leads from inactive lists if there are any
$stmtA = "SELECT * FROM vicidial_lists where active='N';";
if ($DB) {print $stmtA;}
$inactive_lists='';
$inactive_lists_count=0;
$dbhA->query("$stmtA");
if ($dbhA->has_selected_record)
{
$iter=$dbhA->create_record_iterator;
while ( $record = $iter->each)
{
$inactive_list = $record->[0];
$inactive_lists .= "'$inactive_list',";
$inactive_lists_count++;
}
}
if ($DB) {print "Inactive Lists: $inactive_lists_count\n";}
if ($inactive_lists_count > 0)
{
chop($inactive_lists);
$stmtA = "DELETE from vicidial_hopper where list_id IN($inactive_lists);";
$dbhA->query("$stmtA");
my $affected_rows = $dbhA->get_affected_rows_length;
if ($DB) {print "Inactive List Leads Deleted: $affected_rows |$stmtA|\n";}
$event_string = "|INACTIVE LIST DEL|$affected_rows|";
&event_logger;
}
### BEGIN Change CBHOLD status leads to CALLBK if their vicidial_callbacks time has passed
@@ -332,22 +367,26 @@ foreach(@campaign_id)
$GMT_allowed .= "'99'";
if ($DB) {print "Starting hopper run for $campaign_id[$i] campaign: GMT: $local_call_time[$1] $GMT_allowed HOPPER: $hopper_level[$i] \n";}
if ($DB) {print "Starting hopper run for $campaign_id[$i] campaign- GMT: $local_call_time[$1] $GMT_allowed HOPPER: $hopper_level[$i] \n";}
### Delete the DONE leads if there are any
$stmtA = "DELETE from vicidial_hopper where campaign_id='$campaign_id[$i]' and status IN('DONE');";
$dbhA->query("$stmtA");
my $affected_rows = $dbhA->get_affected_rows_length;
if ($DB) {print " hopper DONE cleared: $affected_rows\n";}
if ($DBX) {print " |$stmtA|\n";}
### Delete the leads that are out of GMT time range if there are any
$stmtA = "DELETE from vicidial_hopper where campaign_id='$campaign_id[$i]' and gmt_offset_now NOT IN($GMT_allowed);";
$dbhA->query("$stmtA");
my $affected_rows = $dbhA->get_affected_rows_length;
if ($DB) {print " hopper GMT BAD cleared: $affected_rows\n";}
if ($DBX) {print " |$stmtA|\n";}
### Find out how many leads are in the hopper from a specific campaign
$hopper_ready_count=0;
$dbhA->query("SELECT count(*) from vicidial_hopper where campaign_id='$campaign_id[$i]' and status='READY';");
$stmtA = "SELECT count(*) from vicidial_hopper where campaign_id='$campaign_id[$i]' and status='READY';";
$dbhA->query("$stmtA");
if ($dbhA->has_selected_record)
{
$iter=$dbhA->create_record_iterator;
@@ -356,6 +395,7 @@ foreach(@campaign_id)
{
$hopper_ready_count = $record->[0];
if ($DB) {print " hopper READY count: $hopper_ready_count\n";}
if ($DBX) {print " |$stmtA|\n";}
$rec_countA++;
}
}
@@ -367,7 +407,8 @@ foreach(@campaign_id)
{
if ($DB) {print " hopper too low ($hopper_ready_count|$hopper_level[$i]) starting hopper dump\n";}
$dbhA->query("SELECT list_id FROM vicidial_lists where campaign_id='$campaign_id[$i]' and active='Y';");
$stmtA = "SELECT list_id FROM vicidial_lists where campaign_id='$campaign_id[$i]' and active='Y';";
$dbhA->query("$stmtA");
if ($dbhA->has_selected_record)
{
$iter=$dbhA->create_record_iterator;
@@ -381,8 +422,10 @@ foreach(@campaign_id)
chop($camp_lists);
}
if ($DB) {print " campaign lists count: $rec_countLISTS | $camp_lists\n";}
if ($DBX) {print " |$stmtA|\n";}
$dbhA->query("SELECT count(*) FROM vicidial_list where called_since_last_reset='N' and status IN('$dial_status_a[$i]','$dial_status_b[$i]','$dial_status_c[$i]','$dial_status_d[$i]','$dial_status_e[$i]') and list_id IN($camp_lists) and gmt_offset_now IN($GMT_allowed)");
$stmtA = "SELECT count(*) FROM vicidial_list where called_since_last_reset='N' and status IN('$dial_status_a[$i]','$dial_status_b[$i]','$dial_status_c[$i]','$dial_status_d[$i]','$dial_status_e[$i]') and list_id IN($camp_lists) and gmt_offset_now IN($GMT_allowed);";
$dbhA->query("$stmtA");
$campaign_leads_to_call=0;
if ($dbhA->has_selected_record)
{
@@ -391,11 +434,13 @@ foreach(@campaign_id)
{
$campaign_leads_to_call = "$record->[0]";
if ($DB) {print " leads to call count: $campaign_leads_to_call\n";}
if ($DBX) {print " |$stmtA|\n";}
}
}
if ( ($lead_order[$i] eq "DOWN COUNT 2nd NEW") or ($lead_order[$i] eq "DOWN COUNT 3rd NEW") or ($lead_order[$i] eq "DOWN COUNT 4th NEW") )
{
$dbhA->query("SELECT count(*) FROM vicidial_list where called_since_last_reset='N' and status IN('NEW') and list_id IN($camp_lists) and gmt_offset_now IN($GMT_allowed)");
$stmtA = "SELECT count(*) FROM vicidial_list where called_since_last_reset='N' and status IN('NEW') and list_id IN($camp_lists) and gmt_offset_now IN($GMT_allowed);";
$dbhA->query("$stmtA");
$NEW_campaign_leads_to_call=0;
if ($dbhA->has_selected_record)
{
@@ -404,6 +449,7 @@ foreach(@campaign_id)
{
$NEW_campaign_leads_to_call = "$record->[0]";
if ($DB) {print " NEW leads to call count: $NEW_campaign_leads_to_call\n";}
if ($DBX) {print " |$stmtA|\n";}
}
}
}
@@ -423,7 +469,10 @@ foreach(@campaign_id)
else
{
if ($DB) {print " Getting Leads to add to hopper\n";}
$dbhA->query("SELECT lead_id FROM vicidial_hopper where campaign_id='$campaign_id[$i]';");
### grab leads already in hopper so we don't duplicate
$stmtA = "SELECT lead_id FROM vicidial_hopper where campaign_id='$campaign_id[$i]';";
if ($DBX) {print " |$stmtA|\n";}
$dbhA->query("$stmtA");
$rec_countLISTS=0;
$lead_id_lists = '';
if ($dbhA->has_selected_record)
@@ -461,7 +510,7 @@ foreach(@campaign_id)
if ($DB) {print " looking for $NEW_level NEW leads mixed in with $OTHER_level other leads\n";}
$stmtA = "SELECT lead_id,list_id,gmt_offset_now,phone_number,state FROM vicidial_list where called_since_last_reset='N' and status IN('NEW') and list_id IN($camp_lists) and lead_id NOT IN($lead_id_lists) and gmt_offset_now IN($GMT_allowed) $order_stmt limit $NEW_level;";
# if ($DB) {print " STMT |$stmtA|\n";}
if ($DBX) {print " |$stmtA|\n";}
$dbhA->query("$stmtA");
if ($dbhA->has_selected_record)
{
@@ -487,7 +536,7 @@ foreach(@campaign_id)
if ($DB) {print " lead call order: $order_stmt\n";}
$stmtA = "SELECT lead_id,list_id,gmt_offset_now,phone_number,state FROM vicidial_list where called_since_last_reset='N' and status IN('$dial_status_a[$i]','$dial_status_b[$i]','$dial_status_c[$i]','$dial_status_d[$i]','$dial_status_e[$i]') and list_id IN($camp_lists) and lead_id NOT IN($lead_id_lists) and gmt_offset_now IN($GMT_allowed) $order_stmt limit $OTHER_level;";
# if ($DB) {print " STMT |$stmtA|\n";}
if ($DBX) {print " |$stmtA|\n";}
$dbhA->query("$stmtA");
if ($dbhA->has_selected_record)
{
+70 -2
View File
@@ -1,6 +1,6 @@
#!/usr/bin/perl
#
# AST_manager_listen.pl version 1.1.9 build 51222-1553
# AST_manager_listen.pl version 1.1.11 build 60403-1230
#
# Part of the Asterisk Central Queue System (ACQS)
#
@@ -39,6 +39,7 @@
# 50824-1606 Altered CVS/1.2 support for different output
# 50901-2359 Another CVS/1.2 output parsing fix
# 51222-1553 fixed parentheses bug in manager output
# 60403-1230 Added SVN/1.2.6 support for different output
#
# constants
@@ -257,7 +258,7 @@ while($one_day_interval > 0)
if ($input_lines[$ILcount] =~ /Event: Hangup/)
{
if ( ($command_line[2] =~ /^Channel: /i) && ($command_line[3] =~ /^Uniqueid: /i) ) ### post 2005-08-07 CVS
if ( ($command_line[2] =~ /^Channel: /i) && ($command_line[3] =~ /^Uniqueid: /i) ) ### post 2005-08-07 CVS -- added Privilege line
{
$channel = $command_line[2];
$channel =~ s/Channel: |\s*$//gi;
@@ -265,6 +266,21 @@ while($one_day_interval > 0)
$uniqueid =~ s/Uniqueid: |\s*$//gi;
$stmtA = "UPDATE vicidial_manager set status='DEAD', channel='$channel' where server_ip = '$server_ip' and uniqueid = '$uniqueid'";
print STDERR "|$stmtA|\n";
$dbhA->query("$stmtA");
my $affected_rows = $dbhA->get_affected_rows_length;
if($DB){print "|$affected_rows HANGUPS updated|\n";}
}
else
{
if ( ($command_line[3] =~ /^Channel: /i) && ($command_line[4] =~ /^Uniqueid: /i) ) ### post 2006-03-20 SVN -- Added Timestamp line
{
$channel = $command_line[3];
$channel =~ s/Channel: |\s*$//gi;
$uniqueid = $command_line[4];
$uniqueid =~ s/Uniqueid: |\s*$//gi;
$stmtA = "UPDATE vicidial_manager set status='DEAD', channel='$channel' where server_ip = '$server_ip' and uniqueid = '$uniqueid'";
print STDERR "|$stmtA|\n";
$dbhA->query("$stmtA");
my $affected_rows = $dbhA->get_affected_rows_length;
@@ -284,6 +300,7 @@ while($one_day_interval > 0)
if($DB){print "|$affected_rows HANGUPS updated|\n";}
}
}
}
if ($input_lines[$ILcount] =~ /State: Dialing/)
{
@@ -332,6 +349,21 @@ while($one_day_interval > 0)
my $affected_rows = $dbhA->get_affected_rows_length;
if($DB){print "|$affected_rows DIALINGs updated|\n";}
}
if ( ($command_line[3] =~ /^Channel: /i) && ($command_line[6] =~ /^CalleridName: /i) ) ### post 2006-03-20 -- Added Timestamp line
{
$channel = $command_line[3];
$channel =~ s/Channel: |\s*$//gi;
$callid = $command_line[6];
$callid =~ s/CalleridName: |\s*$//gi;
$callid =~ s/^\"//gi; $callid =~ s/\".*$//gi;
$uniqueid = $command_line[7];
$uniqueid =~ s/Uniqueid: |\s*$//gi;
$stmtA = "UPDATE vicidial_manager set status='SENT', channel='$channel', uniqueid = '$uniqueid' where server_ip = '$server_ip' and callerid = '$callid'";
print STDERR "|$stmtA|\n";
$dbhA->query("$stmtA");
my $affected_rows = $dbhA->get_affected_rows_length;
if($DB){print "|$affected_rows DIALINGs updated|\n";}
}
}
if ($input_lines[$ILcount] =~ /State: Ringing|State: Up/)
{
@@ -389,6 +421,24 @@ while($one_day_interval > 0)
if($DB){print "|$affected_rows RINGINGs updated|\n";}
}
}
if ( ($command_line[3] =~ /^Channel: /i) && ($command_line[6] =~ /^CalleridName: /i) ) ### post 2006-03-20 SVN -- Added Timestamp line
{
$channel = $command_line[3];
$channel =~ s/Channel: |\s*$//gi;
$callid = $command_line[6];
$callid =~ s/CalleridName: |\s*$//gi;
$callid =~ s/^\"//gi; $callid =~ s/\".*$//gi;
$uniqueid = $command_line[7];
$uniqueid =~ s/Uniqueid: |\s*$//gi;
$stmtA = "UPDATE vicidial_manager set status='UPDATED', channel='$channel', uniqueid = '$uniqueid' where server_ip = '$server_ip' and callerid = '$callid'";
if ($channel !~ /local/i)
{
print STDERR "|$stmtA|\n";
$dbhA->query("$stmtA");
my $affected_rows = $dbhA->get_affected_rows_length;
if($DB){print "|$affected_rows RINGINGs updated|\n";}
}
}
}
if ($input_lines[$ILcount] =~ /Event: Newcallerid/)
@@ -411,6 +461,24 @@ while($one_day_interval > 0)
if($DB){print "|$affected_rows RINGINGs updated|\n";}
}
}
if ( ($command_line[3] =~ /^Channel: /i) && ($command_line[6] =~ /^Uniqueid: /i) ) ### post 2006-03-20 SVN -- Added Timestamp line
{
$channel = $command_line[3];
$channel =~ s/Channel: |\s*$//gi;
$callid = $command_line[5];
$callid =~ s/Callerid: |\s*$//gi;
$callid =~ s/^\"//gi; $callid =~ s/\".*$//gi;
$uniqueid = $command_line[6];
$uniqueid =~ s/Uniqueid: |\s*$//gi;
$stmtA = "UPDATE vicidial_manager set status='UPDATED', channel='$channel', uniqueid = '$uniqueid' where server_ip = '$server_ip' and callerid = '$callid'";
if ($channel =~ /local/i)
{
print STDERR "|$stmtA|\n";
$dbhA->query("$stmtA");
my $affected_rows = $dbhA->get_affected_rows_length;
if($DB){print "|$affected_rows RINGINGs updated|\n";}
}
}
}
}
+13 -2
View File
@@ -1,6 +1,6 @@
#!/usr/bin/perl
#
# AST_update.pl version 1.1.9 (build 60117-1202)
# AST_update.pl version 1.1.11 (build 60411-1032)
#
# DESCRIPTION:
# uses the Asterisk Manager interface and Net::MySQL to update the live_channels
@@ -47,9 +47,10 @@
# 50829-1134 - Added processor percentage usage to stat collection
# 51229-1355 - Added ability to take ! as delimited for 1.2 show channels concise
# 60117-1202 - Changed IAX2 client phone channel to reflect change to '-' iteration
# 60411-1032 - Fixed bug in test section that caused crash with ** in extension
#
$build = '60117-1202';
$build = '60411-1032';
# constants
$SYSPERF=0; # system performance logging to MySQL server_performance table every 5 seconds
@@ -324,9 +325,19 @@ if (!$telnet_port) {$telnet_port = '5038';}
$test_channels[$s] =~ s/^\s*|\s*$//gi;
$test_channels[$s] =~ s/\(.*\)//gi;
}
else
{
$EXcount = 0;
$EXcount = @{[$test_channels[$s] =~ /\!/g]};
if ($EXcount > 10)
{
@test_chan_12 = split(/\!/, $test_channels[$s]);
}
else
{
@test_chan_12 = split(/:/, $test_channels[$s]);
}
# @test_chan_12 = split(/:/, $test_channels[$s]);
if (length($test_chan_12[6])<2) {$test_chan_12[6] = 'SIP/ring';}
$test_channels[$s] = "$test_chan_12[0] $test_chan_12[6]";
}
+21 -7
View File
@@ -234,7 +234,7 @@ status VARCHAR(6),
user VARCHAR(20),
vendor_lead_code VARCHAR(20),
source_id VARCHAR(6),
list_id INT(8) UNSIGNED,
list_id BIGINT(14) UNSIGNED,
gmt_offset_now DECIMAL(4,2) DEFAULT '0.00',
called_since_last_reset ENUM('Y','N'),
phone_code VARCHAR(10),
@@ -271,7 +271,7 @@ lead_id INT(9) UNSIGNED NOT NULL,
campaign_id VARCHAR(8),
status ENUM('READY','QUEUE','INCALL','DONE') default 'READY',
user VARCHAR(20),
list_id INT(9) UNSIGNED NOT NULL,
list_id BIGINT(14) UNSIGNED NOT NULL,
gmt_offset_now DECIMAL(4,2) DEFAULT '0.00',
index (lead_id)
);
@@ -321,7 +321,7 @@ index (call_time)
CREATE TABLE vicidial_log (
uniqueid DOUBLE(18,7) PRIMARY KEY UNIQUE NOT NULL,
lead_id INT(9) UNSIGNED NOT NULL,
list_id INT(8) UNSIGNED,
list_id BIGINT(14) UNSIGNED,
campaign_id VARCHAR(8),
call_date DATETIME,
start_epoch INT(10) UNSIGNED,
@@ -340,7 +340,7 @@ index (call_date)
CREATE TABLE vicidial_closer_log (
closecallid INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY UNIQUE NOT NULL,
lead_id INT(9) UNSIGNED NOT NULL,
list_id INT(8) UNSIGNED,
list_id BIGINT(14) UNSIGNED,
campaign_id VARCHAR(20),
call_date DATETIME,
start_epoch INT(10) UNSIGNED,
@@ -359,7 +359,7 @@ index (call_date)
CREATE TABLE vicidial_xfer_log (
xfercallid INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY UNIQUE NOT NULL,
lead_id INT(9) UNSIGNED NOT NULL,
list_id INT(8) UNSIGNED,
list_id BIGINT(14) UNSIGNED,
campaign_id VARCHAR(20),
call_date DATETIME,
phone_code VARCHAR(10),
@@ -450,7 +450,7 @@ xferconf_b_number VARCHAR(50)
);
CREATE TABLE vicidial_lists (
list_id INT(8) UNSIGNED PRIMARY KEY UNIQUE NOT NULL,
list_id BIGINT(14) UNSIGNED PRIMARY KEY UNIQUE NOT NULL,
list_name VARCHAR(30),
campaign_id VARCHAR(8),
active ENUM('Y','N')
@@ -618,7 +618,7 @@ extensions_list TEXT
CREATE TABLE vicidial_callbacks (
callback_id INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
lead_id INT(9) UNSIGNED,
list_id INT(8) UNSIGNED,
list_id BIGINT(14) UNSIGNED,
campaign_id VARCHAR(8),
status VARCHAR(10),
entry_time DATETIME,
@@ -631,3 +631,17 @@ index (lead_id),
index (status),
index (callback_time)
);
CREATE TABLE vicidial_list_pins (
pins_id INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
entry_time DATETIME,
phone_number VARCHAR(10),
lead_id INT(9) UNSIGNED,
campaign_id VARCHAR(20),
product_code VARCHAR(20),
user VARCHAR(20),
digits VARCHAR(20),
index (lead_id),
index (phone_number),
index (entry_time)
);
@@ -132,7 +132,7 @@ if ($DB) {echo "$stmt\n";}
$row=mysql_fetch_row($rslt);
$USEDram = sprintf("%10s", $row[0]);
$stmt="select count(*),SUM(length_in_min) from call_log where extension NOT IN('8365') and start_time <= '$query_date_END' and start_time >= '$query_date_BEGIN' and server_ip='$group';";
$stmt="select count(*),SUM(length_in_min) from call_log where extension NOT IN('8365','8366','8367') and start_time <= '$query_date_END' and start_time >= '$query_date_BEGIN' and server_ip='$group';";
$rslt=mysql_query($stmt, $link);
if ($DB) {echo "$stmt\n";}
$row=mysql_fetch_row($rslt);
@@ -30,7 +30,7 @@ $STARTtime = date("U");
$epochSIXhoursAGO = ($STARTtime - 21600);
$timeSIXhoursAGO = date("Y-m-d H:i:s",$epochSIXhoursAGO);
$stmt="select campaign_id from vicidial_campaigns;";
$stmt="select campaign_id from vicidial_campaigns where active='Y';";
$rslt=mysql_query($stmt, $link);
if ($DB) {echo "$stmt\n";}
$groups_to_print = mysql_num_rows($rslt);
+124 -60
View File
@@ -131,11 +131,14 @@ $agent_choose_ingroups=$_GET["agent_choose_ingroups"]; if (!$agent_choose_ingrou
### 60213-1100 - Added several vicidial_users permissions fields
### 60215-1319 - Added On-hold CallBacks display and links
### 60227-1226 - Fixed vicidial_inbound_groups insert bug
### 60413-1308 - Fixed list display to have 1 row/status: count and time zone tables
### - Added status name in selected dial statuses in campaign screen
###
### make sure you have added a user to the vicidial_users MySQL table with at least user_level 8 to access this page the first time
$version = '1.1.10-5';
$build = '60227-1226';
$version = '1.1.10-6';
$build = '60413-1308';
$STARTtime = date("U");
@@ -2697,6 +2700,7 @@ echo "<tr bgcolor=#B6D3FC><td align=right>Dial status 1: </td><td align=left><se
while ($statuses_to_print > $o) {
$rowx=mysql_fetch_row($rsltx);
$statuses_list .= "<option value=\"$rowx[0]\">$rowx[0] - $rowx[1]</option>\n";
$statname_list["$rowx[0]"] = "$rowx[1]";
if (eregi("Y",$rowx[2]))
{$HKstatuses_list .= "<option value=\"$rowx[0]-----$rowx[1]\">$rowx[0] - $rowx[1]</option>\n";}
$o++;
@@ -2710,29 +2714,29 @@ echo "<tr bgcolor=#B6D3FC><td align=right>Dial status 1: </td><td align=left><se
while ($Cstatuses_to_print > $o) {
$rowx=mysql_fetch_row($rsltx);
$statuses_list .= "<option value=\"$rowx[0]\">$rowx[0] - $rowx[1]</option>\n";
$statname_list["$rowx[0]"] = "$rowx[1]";
if (eregi("Y",$rowx[2]))
{$HKstatuses_list .= "<option value=\"$rowx[0]-----$rowx[1]\">$rowx[0] - $rowx[1]</option>\n";}
$o++;
}
echo "$statuses_list";
echo "<option SELECTED>$dial_status_a</option>\n";
echo "<option value=\"$dial_status_a\" SELECTED>$dial_status_a - $statname_list[$dial_status_a]</option>\n";
echo "</select>$NWB#vicidial_campaigns-dial_status$NWE</td></tr>\n";
echo "<tr bgcolor=#B6D3FC><td align=right>Dial status 2: </td><td align=left><select size=1 name=dial_status_b>\n";
echo "$statuses_list";
echo "<option SELECTED>$dial_status_b</option>\n";
echo "<option value=\"$dial_status_b\" SELECTED>$dial_status_b - $statname_list[$dial_status_b]</option>\n";
echo "</select>$NWB#vicidial_campaigns-dial_status$NWE</td></tr>\n";
echo "<tr bgcolor=#B6D3FC><td align=right>Dial status 3: </td><td align=left><select size=1 name=dial_status_c>\n";
echo "$statuses_list";
echo "<option SELECTED>$dial_status_c</option>\n";
echo "<option value=\"$dial_status_c\" SELECTED>$dial_status_c - $statname_list[$dial_status_c]</option>\n";
echo "</select>$NWB#vicidial_campaigns-dial_status$NWE</td></tr>\n";
echo "<tr bgcolor=#B6D3FC><td align=right>Dial status 4: </td><td align=left><select size=1 name=dial_status_d>\n";
echo "$statuses_list";
echo "<option SELECTED>$dial_status_d</option>\n";
echo "<option value=\"$dial_status_d\" SELECTED>$dial_status_d - $statname_list[$dial_status_d]</option>\n";
echo "</select>$NWB#vicidial_campaigns-dial_status$NWE</td></tr>\n";
echo "<tr bgcolor=#B6D3FC><td align=right>Dial status 5: </td><td align=left><select size=1 name=dial_status_e>\n";
echo "$statuses_list";
echo "<option SELECTED>$dial_status_e</option>\n";
echo "<option value=\"$dial_status_e\" SELECTED>$dial_status_e - $statname_list[$dial_status_e]</option>\n";
echo "</select>$NWB#vicidial_campaigns-dial_status$NWE</td></tr>\n";
echo "<tr bgcolor=#B6D3FC><td align=right>List Order: </td><td align=left><select size=1 name=lead_order><option>DOWN</option><option>UP</option><option>UP PHONE</option><option>DOWN PHONE</option><option>UP LAST NAME</option><option>DOWN LAST NAME</option><option>UP COUNT</option><option>DOWN COUNT</option><option>DOWN COUNT 2nd NEW</option><option>DOWN COUNT 3rd NEW</option><option>DOWN COUNT 4th NEW</option><option SELECTED>$lead_order</option></select>$NWB#vicidial_campaigns-lead_order$NWE</td></tr>\n";
@@ -3068,6 +3072,7 @@ echo "<tr bgcolor=#B6D3FC><td align=right>Dial status 1: </td><td align=left><se
while ($statuses_to_print > $o) {
$rowx=mysql_fetch_row($rsltx);
$statuses_list .= "<option value=\"$rowx[0]\">$rowx[0] - $rowx[1]</option>\n";
$statname_list["$rowx[0]"] = "$rowx[1]";
$o++;
}
@@ -3079,27 +3084,27 @@ echo "<tr bgcolor=#B6D3FC><td align=right>Dial status 1: </td><td align=left><se
while ($Cstatuses_to_print > $o) {
$rowx=mysql_fetch_row($rsltx);
$statuses_list .= "<option value=\"$rowx[0]\">$rowx[0] - $rowx[1]</option>\n";
$statname_list["$rowx[0]"] = "$rowx[1]";
$o++;
}
echo "$statuses_list";
echo "<option SELECTED>$dial_status_a</option>\n";
echo "<option value=\"$dial_status_a\" SELECTED>$dial_status_a - $statname_list[$dial_status_a]</option>\n";
echo "</select>$NWB#vicidial_campaigns-dial_status$NWE</td></tr>\n";
echo "<tr bgcolor=#B6D3FC><td align=right>Dial status 2: </td><td align=left><select size=1 name=dial_status_b>\n";
echo "$statuses_list";
echo "<option SELECTED>$dial_status_b</option>\n";
echo "<option value=\"$dial_status_b\" SELECTED>$dial_status_b - $statname_list[$dial_status_b]</option>\n";
echo "</select>$NWB#vicidial_campaigns-dial_status$NWE</td></tr>\n";
echo "<tr bgcolor=#B6D3FC><td align=right>Dial status 3: </td><td align=left><select size=1 name=dial_status_c>\n";
echo "$statuses_list";
echo "<option SELECTED>$dial_status_c</option>\n";
echo "<option value=\"$dial_status_c\" SELECTED>$dial_status_c - $statname_list[$dial_status_c]</option>\n";
echo "</select>$NWB#vicidial_campaigns-dial_status$NWE</td></tr>\n";
echo "<tr bgcolor=#B6D3FC><td align=right>Dial status 4: </td><td align=left><select size=1 name=dial_status_d>\n";
echo "$statuses_list";
echo "<option SELECTED>$dial_status_d</option>\n";
echo "<option value=\"$dial_status_d\" SELECTED>$dial_status_d - $statname_list[$dial_status_d]</option>\n";
echo "</select>$NWB#vicidial_campaigns-dial_status$NWE</td></tr>\n";
echo "<tr bgcolor=#B6D3FC><td align=right>Dial status 5: </td><td align=left><select size=1 name=dial_status_e>\n";
echo "$statuses_list";
echo "<option SELECTED>$dial_status_e</option>\n";
echo "<option value=\"$dial_status_e\" SELECTED>$dial_status_e - $statname_list[$dial_status_e]</option>\n";
echo "</select>$NWB#vicidial_campaigns-dial_status$NWE</td></tr>\n";
echo "<tr bgcolor=#B6D3FC><td align=right>List Order: </td><td align=left><select size=1 name=lead_order><option>DOWN</option><option>UP</option><option>UP PHONE</option><option>DOWN PHONE</option><option>UP LAST NAME</option><option>DOWN LAST NAME</option><option>UP COUNT</option><option>DOWN COUNT</option><option>DOWN COUNT 2nd NEW</option><option>DOWN COUNT 3rd NEW</option><option>DOWN COUNT 4th NEW</option><option SELECTED>$lead_order</option></select>$NWB#vicidial_campaigns-lead_order$NWE</td></tr>\n";
@@ -3277,6 +3282,31 @@ if ($ADD==311)
$campaign_id = $row[2];
$active = $row[3];
# grab names of global statuses and statuses in the selected campaign
$stmt="SELECT * from vicidial_statuses order by status";
$rsltx=mysql_query($stmt, $link);
$statuses_to_print = mysql_num_rows($rsltx);
$o=0;
while ($statuses_to_print > $o) {
$rowx=mysql_fetch_row($rsltx);
$statuses_list["$rowx[0]"] = "$rowx[1]";
$o++;
}
$stmt="SELECT * from vicidial_campaign_statuses where campaign_id='$campaign_id' order by status";
$rsltx=mysql_query($stmt, $link);
$Cstatuses_to_print = mysql_num_rows($rsltx);
$o=0;
while ($Cstatuses_to_print > $o) {
$rowx=mysql_fetch_row($rsltx);
$statuses_list["$rowx[0]"] = "$rowx[1]";
$o++;
}
# end grab status names
echo "<br>MODIFY A LISTS RECORD: $row[0]<form action=$PHP_SELF method=POST>\n";
echo "<input type=hidden name=ADD value=411>\n";
echo "<input type=hidden name=list_id value=\"$row[0]\">\n";
@@ -3307,8 +3337,8 @@ echo "</TABLE></center>\n";
echo "<center>\n";
echo "<br><b>STATUSES WITHIN THIS LIST:</b><br>\n";
echo "<TABLE width=400 cellspacing=3>\n";
echo "<tr><td>STATUS</td><td>CALLED</td><td>NOT CALLED</td></tr>\n";
echo "<TABLE width=500 cellspacing=3>\n";
echo "<tr><td>STATUS</td><td>STATUS NAME</td><td>CALLED</td><td>NOT CALLED</td></tr>\n";
$leads_in_list = 0;
$leads_in_list_N = 0;
@@ -3318,17 +3348,44 @@ echo "<tr><td>STATUS</td><td>CALLED</td><td>NOT CALLED</td></tr>\n";
$statuses_to_print = mysql_num_rows($rsltx);
$o=0;
$lead_list['count'] = 0;
$lead_list['Y_count'] = 0;
$lead_list['N_count'] = 0;
while ($statuses_to_print > $o)
{
$rowx=mysql_fetch_row($rsltx);
$leads_in_list = ($leads_in_list + $rowx[2]);
$lead_list['count'] = ($lead_list['count'] + $rowx[2]);
if ($rowx[1] == 'N')
{
$since_reset = 'N';
$since_resetX = 'Y';
}
else
{
$since_reset = 'Y';
$since_resetX = 'N';
}
$lead_list[$since_reset][$rowx[0]] = $rowx[2];
$lead_list[$since_reset.'_count'] = ($lead_list[$since_reset.'_count'] + $rowx[2]);
#If opposite side is not set, it may not in the future so give it a value of zero
if (!isset($lead_list[$since_resetX][$rowx[0]]))
{
$lead_list[$since_resetX][$rowx[0]]=0;
}
$o++;
}
$o=0;
while (list($dispo,) = each($lead_list[$since_reset]))
{
if (eregi("1$|3$|5$|7$|9$", $o))
{$bgcolor='bgcolor="#B9CBFD"';}
else
{$bgcolor='bgcolor="#9BB9FB"';}
if ($rowx[0] == 'CBHOLD')
if ($dispo == 'CBHOLD')
{
$CLB="<a href=\"$PHP_SELF?ADD=811&list_id=$list_id\">";
$CLE="</a>";
@@ -3339,25 +3396,15 @@ echo "<tr><td>STATUS</td><td>CALLED</td><td>NOT CALLED</td></tr>\n";
$CLE='';
}
if ($rowx[1] == 'N')
{
$leads_in_list_N = ($leads_in_list_N + $rowx[2]);
echo "<tr $bgcolor><td><font size=1>$CLB$rowx[0]$CLE</td><td><font size=1> </td><td><font size=1>$rowx[2]</td></tr>\n";
}
else
{
$leads_in_list_Y = ($leads_in_list_Y + $rowx[2]);
echo "<tr $bgcolor><td><font size=1>$CLB$rowx[0]$CLE</td><td><font size=1>$rowx[2]</td><td><font size=1> </td></tr>\n";
}
echo "<tr $bgcolor><td><font size=1>$CLB$dispo$CLE</td><td><font size=1>$statuses_list[$dispo]</td><td><font size=1>".$lead_list['Y'][$dispo]."</td><td><font size=1>".$lead_list['N'][$dispo]." </td></tr>\n";
$o++;
}
echo "<tr><td><font size=1>SUBTOTALS</td><td><font size=1>$leads_in_list_Y</td><td><font size=1>$leads_in_list_N</td></tr>\n";
echo "<tr bgcolor=\"#9BB9FB\"><td><font size=1>TOTAL</td><td colspan=2 align=center><font size=1>$leads_in_list</td></tr>\n";
echo "<tr><td colspan=2><font size=1>SUBTOTALS</td><td><font size=1>$lead_list[Y_count]</td><td><font size=1>$lead_list[N_count]</td></tr>\n";
echo "<tr bgcolor=\"#9BB9FB\"><td><font size=1>TOTAL</td><td colspan=3 align=center><font size=1>$lead_list[count]</td></tr>\n";
echo "</table></center><br>\n";
unset($lead_list);
@@ -3368,47 +3415,59 @@ echo "<br><b>TIME ZONES WITHIN THIS LIST:</b><br>\n";
echo "<TABLE width=500 cellspacing=3>\n";
echo "<tr><td>GMT OFFSET NOW (local time)</td><td>CALLED</td><td>NOT CALLED</td></tr>\n";
$leads_in_list = 0;
$leads_in_list_N = 0;
$leads_in_list_Y = 0;
$stmt="SELECT gmt_offset_now,called_since_last_reset,count(*) from vicidial_list where list_id='$list_id' group by gmt_offset_now,called_since_last_reset order by gmt_offset_now,called_since_last_reset";
$rsltx=mysql_query($stmt, $link);
$statuses_to_print = mysql_num_rows($rsltx);
$o=0;
$plus='+';
while ($statuses_to_print > $o) {
$lead_list['count'] = 0;
$lead_list['Y_count'] = 0;
$lead_list['N_count'] = 0;
while ($statuses_to_print > $o)
{
$rowx=mysql_fetch_row($rsltx);
$leads_in_list = ($leads_in_list + $rowx[2]);
$LOCALzone=3600 * $rowx[0];
$lead_list['count'] = ($lead_list['count'] + $rowx[2]);
if ($rowx[1] == 'N')
{
$since_reset = 'N';
$since_resetX = 'Y';
}
else
{
$since_reset = 'Y';
$since_resetX = 'N';
}
$lead_list[$since_reset][$rowx[0]] = $rowx[2];
$lead_list[$since_reset.'_count'] = ($lead_list[$since_reset.'_count'] + $rowx[2]);
#If opposite side is not set, it may not in the future so give it a value of zero
if (!isset($lead_list[$since_resetX][$rowx[0]]))
{
$lead_list[$since_resetX][$rowx[0]]=0;
}
$o++;
}
while (list($tzone,) = each($lead_list[$since_reset]))
{
$LOCALzone=3600 * $tzone;
$LOCALdate=gmdate("D M Y H:i", time() + $LOCALzone);
if ($rowx[0] >= 0) {$rowx[0] = "$plus$rowx[0]";}
if ($tzone >= 0) {$tzone = "$plus$tzone";}
if (eregi("1$|3$|5$|7$|9$", $o))
{$bgcolor='bgcolor="#B9CBFD"';}
else
{$bgcolor='bgcolor="#9BB9FB"';}
if ($rowx[1] == 'N')
{
$leads_in_list_N = ($leads_in_list_N + $rowx[2]);
echo "<tr $bgcolor><td><font size=1>$rowx[0] &nbsp; &nbsp; ($LOCALdate)</td><td><font size=1> </td><td><font size=1>$rowx[2]</td></tr>\n";
}
else
{
$leads_in_list_Y = ($leads_in_list_Y + $rowx[2]);
echo "<tr $bgcolor><td><font size=1>$rowx[0] &nbsp; &nbsp; ($LOCALdate)</td><td><font size=1>$rowx[2]</td><td><font size=1> </td></tr>\n";
echo "<tr $bgcolor><td><font size=1>".$tzone." &nbsp; &nbsp; ($LOCALdate)</td><td><font size=1>".$lead_list['Y'][$tzone]."</td><td><font size=1>".$lead_list['N'][$tzone]."</td></tr>\n";
}
$o++;
}
echo "<tr><td><font size=1>SUBTOTALS</td><td><font size=1>$leads_in_list_Y</td><td><font size=1>$leads_in_list_N</td></tr>\n";
echo "<tr bgcolor=\"#9BB9FB\"><td><font size=1>TOTAL</td><td colspan=2 align=center><font size=1>$leads_in_list</td></tr>\n";
echo "<tr><td><font size=1>SUBTOTALS</td><td><font size=1>$lead_list[Y_count]</td><td><font size=1>$lead_list[N_count]</td></tr>\n";
echo "<tr bgcolor=\"#9BB9FB\"><td><font size=1>TOTAL</td><td colspan=2 align=center><font size=1>$lead_list[count]</td></tr>\n";
echo "</table></center><br>\n";
unset($lead_list);
@@ -3458,11 +3517,13 @@ echo "</table></center><br>\n";
echo "<center>\n";
echo "<br><b>CALLED COUNTS WITHIN THIS LIST:</b><br>\n";
echo "<TABLE width=500 cellspacing=1>\n";
echo "<tr><td align=center><font size=1>STATUS</td>";
echo "<tr><td align=left><font size=1>STATUS</td><td align=center><font size=1>STATUS NAME</td>";
$first = $all_called_first;
while ($first <= $all_called_last)
{
echo "<td align=center><font size=1>$first</td>";
if (eregi("1$|3$|5$|7$|9$", $first)) {$AB='bgcolor="#AFEEEE"';}
else{$AB='bgcolor="#E0FFFF"';}
echo "<td align=center $AB><font size=1>$first</td>";
$first++;
}
echo "<td align=center><font size=1>SUBTOTAL</td></tr>\n";
@@ -3471,13 +3532,14 @@ echo "<td align=center><font size=1>SUBTOTAL</td></tr>\n";
$statuses_called_to_print = count($status);
while ($statuses_called_to_print > $sts)
{
$Pstatus = $status[$sts];
if (eregi("1$|3$|5$|7$|9$", $sts))
{$bgcolor='bgcolor="#B9CBFD"'; $AB='bgcolor="#9BB9FB"';}
else
{$bgcolor='bgcolor="#9BB9FB"'; $AB='bgcolor="#B9CBFD"';}
# echo "$status[$sts]|$status_called_first[$sts]|$status_called_last[$sts]|$leads_in_sts[$sts]|\n";
# echo "$status[$sts]|";
echo "<tr $bgcolor><td><font size=1>$status[$sts]</td>";
echo "<tr $bgcolor><td><font size=1>$Pstatus</td><td><font size=1>$statuses_list[$Pstatus]</td>";
$first = $all_called_first;
while ($first <= $all_called_last)
@@ -3497,7 +3559,7 @@ echo "<td align=center><font size=1>SUBTOTAL</td></tr>\n";
$o=0;
while ($status_called_to_print > $o)
{
if ( ($count_statuses[$o] == "$status[$sts]") and ($count_called[$o] == "$first") )
if ( ($count_statuses[$o] == "$Pstatus") and ($count_called[$o] == "$first") )
{
$called_printed++;
echo "<td $AB><font size=1> $count_count[$o]</td>";
@@ -3515,11 +3577,13 @@ echo "<td align=center><font size=1>SUBTOTAL</td></tr>\n";
$sts++;
}
echo "<tr><td align=center><b><font size=1>TOTAL</td>";
echo "<tr><td align=center colspan=2><b><font size=1>TOTAL</td>";
$first = $all_called_first;
while ($first <= $all_called_last)
{
echo "<td align=center><b><font size=1>$all_called_count[$first]</td>";
if (eregi("1$|3$|5$|7$|9$", $first)) {$AB='bgcolor="#AFEEEE"';}
else{$AB='bgcolor="#E0FFFF"';}
echo "<td align=center $AB><b><font size=1>$all_called_count[$first]</td>";
$first++;
}
echo "<td align=center><b><font size=1>$leads_in_list</td></tr>\n";
+7 -3
View File
@@ -25,6 +25,7 @@
# 50503-1236 added session_name checking for extra security
# 50610-1158 Added NULL check on MySQL results to reduced errors
# 50711-1202 removed HTTP authentication in favor of user/pass vars
# 60323-1550 added option for showing different number dialed in log
#
@@ -45,9 +46,11 @@ $protocol=$_GET["protocol"]; if (!$protocol) {$protocol=$_POST["protocol"];}
if (!$format) {$format="text";}
if (!$in_limit) {$in_limit="100";}
if (!$out_limit) {$out_limit="100";}
$number_dialed = 'number_dialed';
#$number_dialed = 'extension';
$version = '0.0.5';
$build = '50711-1202';
$version = '0.0.6';
$build = '60323-1550';
$StarTtime = date("U");
$NOW_DATE = date("Y-m-d");
$NOW_TIME = date("Y-m-d H:i:s");
@@ -114,7 +117,7 @@ echo "<BODY BGCOLOR=white marginheight=0 marginwidth=0 leftmargin=0 topmargin=0>
else
{
##### print outbound calls from the call_log table
$stmt="SELECT uniqueid,start_time,number_dialed,length_in_sec FROM call_log where server_ip = '$server_ip' and channel LIKE \"$protocol/$exten%\" order by start_time desc limit $out_limit;";
$stmt="SELECT uniqueid,start_time,$number_dialed,length_in_sec FROM call_log where server_ip = '$server_ip' and channel LIKE \"$protocol/$exten%\" order by start_time desc limit $out_limit;";
if ($format=='debug') {echo "\n<!-- $stmt -->";}
$rslt=mysql_query($stmt, $link);
if ($rslt) {$out_calls_count = mysql_num_rows($rslt);}
@@ -134,6 +137,7 @@ echo "<BODY BGCOLOR=white marginheight=0 marginwidth=0 leftmargin=0 topmargin=0>
if ($call_time_SEC < 10) {$call_time_SEC = "0$call_time_SEC";}
$call_time_MS = "$call_time_M_int:$call_time_SEC";
if ($number_dialed == 'extension') {$row[2] = substr($row[2],-10);}
echo "$row[0] ~$row[1] ~$row[2] ~$call_time_MS|";
}
echo "\n";
+33 -1
View File
@@ -28,6 +28,7 @@
# 50706-1525 Added date-time display for vicidial client display
# 50816-1500 Added random update to vicidial_live_agents table for vdc users
# 51121-1353 Altered echo statements for several small PHP speed optimizations
# 60410-1424 Added ability to grab calls-being-placed and agent status
#
require("dbconnect.php");
@@ -45,6 +46,7 @@ $client=$_GET["client"]; if (!$client) {$client=$_POST["client"];}
$conf_exten=$_GET["conf_exten"]; if (!$conf_exten) {$conf_exten=$_POST["conf_exten"];}
$exten=$_GET["exten"]; if (!$exten) {$exten=$_POST["exten"];}
$auto_dial_level=$_GET["auto_dial_level"]; if (!$auto_dial_level) {$auto_dial_level=$_POST["auto_dial_level"];}
$campagentstdisp=$_GET["campagentstdisp"]; if (!$campagentstdisp) {$campagentstdisp=$_POST["campagentstdisp"];}
# default optional vars if not set
if (!$format) {$format="text";}
@@ -132,9 +134,39 @@ echo "<BODY BGCOLOR=white marginheight=0 marginwidth=0 leftmargin=0 topmargin=0>
$stmt="UPDATE vicidial_live_agents set random_id='$random' where user='$user' and server_ip='$server_ip';";
if ($format=='debug') {echo "\n<!-- $stmt -->";}
$rslt=mysql_query($stmt, $link);
if ($campagentstdisp == 'YES')
{
### grab the status of this agent to display
$stmt="SELECT status,campaign_id from vicidial_live_agents where user='$user' and server_ip='$server_ip';";
if ($DB) {echo "|$stmt|\n";}
$rslt=mysql_query($stmt, $link);
$row=mysql_fetch_row($rslt);
$Astatus=$row[0];
$Acampaign=$row[1];
### grab the number of calls being placed from this server and campaign
$stmt="SELECT count(*) from vicidial_auto_calls where server_ip='$server_ip' and status NOT IN('XFER') and campaign_id='$Acampaign';";
if ($DB) {echo "|$stmt|\n";}
$rslt=mysql_query($stmt, $link);
$row=mysql_fetch_row($rslt);
$RingCalls=$row[0];
}
else
{
$Astatus='N';
$RingCalls='N';
}
}
else
{
$Astatus='N';
$RingCalls='N';
}
echo 'DateTime: ' . $NOW_TIME . '|UnixTime: ' . $StarTtime . "|\n";
echo 'DateTime: ' . $NOW_TIME . '|UnixTime: ' . $StarTtime . '|Status: ' . $Astatus . '|CampCalls: ' . $RingCalls . "|\n";
}
$total_conf=0;
+93 -3
View File
@@ -13,7 +13,7 @@
### - $pass
### optional variables:
### - $format - ('text','debug')
### - $ACTION - ('regCLOSER','manDiaLnextCALL','manDiaLskip','manDiaLonly','manDiaLlookCALL','manDiaLlogCALL','userLOGout','updateDISPO','VDADpause','VDADready','VDADcheckINCOMING','UpdatEFavoritEs')
### - $ACTION - ('regCLOSER','manDiaLnextCALL','manDiaLskip','manDiaLonly','manDiaLlookCALL','manDiaLlogCALL','userLOGout','updateDISPO','VDADpause','VDADready','VDADcheckINCOMING','UpdatEFavoritEs','CalLBacKLisT','CalLBacKCounT')
### - $stage - ('start','finish')
### - $closer_choice - ('CL_TESTCAMP_L CL_OUT123_L -')
### - $conf_exten - ('8600011',...)
@@ -92,10 +92,13 @@
# 60208-1617 Added dtmf buttons output per call
# 60213-1521 Added closer_campaigns update to vicidial_users
# 60215-1036 Added Callback date-time entry into vicidial_callbacks table
# 60413-1541 Added USERONLY Callback listings output - CalLBacKLisT
# Added USERONLY Callback count output - CalLBacKCounT
# 60414-1140 Added Callback lead lookup for manual dialing
#
$version = '0.0.26';
$build = '60215-1036';
$version = '0.0.28';
$build = '60414-1140';
require("dbconnect.php");
@@ -161,6 +164,7 @@ $agent_log=$_GET["agent_log"]; if (!$agent_log) {$agent_log=$_POST["agent_log"
$favorites_list=$_GET["favorites_list"]; if (!$favorites_list) {$favorites_list=$_POST["favorites_list"];}
$CallBackDatETimE=$_GET["CallBackDatETimE"]; if (!$CallBackDatETimE) {$CallBackDatETimE=$_POST["CallBackDatETimE"];}
$recipient=$_GET["recipient"]; if (!$recipient) {$recipient=$_POST["recipient"];}
$callback_id=$_GET["callback_id"]; if (!$callback_id) {$callback_id=$_POST["callback_id"];}
# default optional vars if not set
@@ -172,6 +176,7 @@ $StarTtime = date("U");
$NOW_DATE = date("Y-m-d");
$NOW_TIME = date("Y-m-d H:i:s");
$CIDdate = date("mdHis");
$ENTRYdate = date("YmdHis");
if (!$query_date) {$query_date = $NOW_DATE;}
$MT[0]='';
@@ -285,6 +290,30 @@ if ($ACTION == 'manDiaLnextCaLL')
echo "Conf Exten $conf_exten or campaign $campaign or ext_context $ext_context is not valid\n";
exit;
}
else
{
### check if this is a callback, if it is, skip the grabbing of a new lead and mark the callback as INACTIVE
if ( (strlen($callback_id)>0) && (strlen($lead_id)>0) )
{
$affected_rows=1;
$CBleadIDset=1;
$stmt = "UPDATE vicidial_callbacks set status='INACTIVE' where callback_id='$callback_id';";
if ($DB) {echo "$stmt\n";}
$rslt=mysql_query($stmt, $link);
}
else
{
if (strlen($phone_number)>3)
{
### grab the next lead in the hopper for this campaign and reserve it for the user
$stmt = "INSERT INTO vicidial_list SET phone_code='$phone_code',phone_number='$phone_number',list_id='$list_id',status='QUEUE',user='$user',called_since_last_reset='Y',entry_date='$ENTRYdate';";
if ($DB) {echo "$stmt\n";}
$rslt=mysql_query($stmt, $link);
$affected_rows = mysql_affected_rows($link);
$lead_id = mysql_insert_id();
$CBleadIDset=1;
}
else
{
### grab the next lead in the hopper for this campaign and reserve it for the user
@@ -292,8 +321,12 @@ if ($ACTION == 'manDiaLnextCaLL')
if ($DB) {echo "$stmt\n";}
$rslt=mysql_query($stmt, $link);
$affected_rows = mysql_affected_rows($link);
}
}
if ($affected_rows > 0)
{
if (!$CBleadIDset)
{
##### grab the lead_id of the reserved user in vicidial_hopper
$stmt="SELECT lead_id FROM vicidial_hopper where campaign_id='$campaign' and status='QUEUE' and user='$user' LIMIT 1;";
@@ -305,6 +338,7 @@ if ($ACTION == 'manDiaLnextCaLL')
$row=mysql_fetch_row($rslt);
$lead_id =$row[0];
}
}
##### grab the data from vicidial_list for the lead_id
$stmt="SELECT * FROM vicidial_list where lead_id='$lead_id' LIMIT 1;";
@@ -350,10 +384,13 @@ if ($ACTION == 'manDiaLnextCaLL')
if ($DB) {echo "$stmt\n";}
$rslt=mysql_query($stmt, $link);
if (!$CBleadIDset)
{
### delete the lead from the hopper
$stmt = "DELETE FROM vicidial_hopper where lead_id='$lead_id';";
if ($DB) {echo "$stmt\n";}
$rslt=mysql_query($stmt, $link);
}
$stmt="UPDATE vicidial_agent_log set lead_id='$lead_id' where agent_log_id='$agent_log_id';";
if ($format=='debug') {echo "\n<!-- $stmt -->";}
@@ -1274,6 +1311,59 @@ if ($ACTION == 'UpdatEFavoritEs')
}
################################################################################
### CalLBacKLisT - List the USERONLY callbacks for an agent
################################################################################
if ($ACTION == 'CalLBacKLisT')
{
$stmt = "select callback_id,lead_id,campaign_id,status,entry_time,callback_time,comments from vicidial_callbacks where recipient='USERONLY' and user='$user' and status NOT IN('INACTIVE','DEAD') order by callback_time;";
if ($DB) {echo "$stmt\n";}
$rslt=mysql_query($stmt, $link);
if ($rslt) {$callbacks_count = mysql_num_rows($rslt);}
echo "$callbacks_count\n";
$loop_count=0;
while ($callbacks_count>$loop_count)
{
$row=mysql_fetch_row($rslt);
$callback_id[$loop_count] = $row[0];
$lead_id[$loop_count] = $row[1];
$campaign_id[$loop_count] = $row[2];
$status[$loop_count] = $row[3];
$entry_time[$loop_count] = $row[4];
$callback_time[$loop_count] = $row[5];
$comments[$loop_count] = $row[6];
$loop_count++;
}
$loop_count=0;
while ($callbacks_count>$loop_count)
{
$stmt = "select first_name,last_name,phone_number from vicidial_list where lead_id='$lead_id[$loop_count]';";
if ($DB) {echo "$stmt\n";}
$rslt=mysql_query($stmt, $link);
$row=mysql_fetch_row($rslt);
echo "$row[0] ~$row[1] ~$row[2] ~$callback_id[$loop_count] ~$lead_id[$loop_count] ~$campaign_id[$loop_count] ~$status[$loop_count] ~$entry_time[$loop_count] ~$callback_time[$loop_count] ~$comments[$loop_count]\n";
$loop_count++;
}
}
################################################################################
### CalLBacKCounT - send the count of the USERONLY callbacks for an agent
################################################################################
if ($ACTION == 'CalLBacKCounT')
{
$stmt = "select count(*) from vicidial_callbacks where recipient='USERONLY' and user='$user' and status NOT IN('INACTIVE','DEAD');";
if ($DB) {echo "$stmt\n";}
$rslt=mysql_query($stmt, $link);
$row=mysql_fetch_row($rslt);
$cbcount=$row[0];
echo "$cbcount";
}
if ($format=='debug')
+575 -24
View File
@@ -83,6 +83,18 @@
### 60214-0932 - Initial Callback calendar display framework
### 60214-1407 - Added ability to minimize the dispo screen to see info below
### 60215-1104 - Added ANYONE scheduled callbacks functionality
### 60410-1116 - Added persistant pause after dispo option and change dispo text
### - Added web form submit that opens new window with dispo on submit
### - Added PREVIOUS CALLBACK in customer info to flag callbacks
### - Added link to try to hangup the call again in the dispo screen
### - Added link noone-in-session screen to call agent phone again
### - Added link customer-hungup screen to go straight to dispo screen
### 60410-1532 - Added agent status and campaign calls dialing display option
### 60411-1547 - Add ability to set callback as USERONLY and some basic formatting
### 60413-1752 - Add basic USERONLY callback frame and listings
### 60414-1039 - Changed manual dial preview and alt dial checkboxes to spans
### - Added beta-level USERONLY callback functionality
### - Added beta-level manual dialing with lead insertion functionality
###
require("dbconnect.php");
@@ -101,8 +113,8 @@ $relogin=$_GET['relogin']; if (!$relogin) {$relogin=$_POST["relogin"];}
$forever_stop=0;
$version = '1.1.66';
$build = '60215-1104';
$version = '1.1.71';
$build = '60414-1039';
if ($force_logout)
{
@@ -121,14 +133,19 @@ $CIDdate = date("ymdHis");
$random = (rand(1000000, 9999999) + 10000000);
$conf_silent_prefix = '7'; # vicidial_conferences prefix to enter silently
$manual_dial_preview = '1'; # Allow preview lead option when manual dial
$HKuser_level = '5'; # minimum vicidial user_level for HotKeys
$campaign_login_list = '1'; # show drop-down list of campaigns at login
$manual_dial_preview = '1'; # allow preview lead option when manual dial
$manual_dial_alt_phone = '1'; # allow manual dial users to call alt phone number
$multi_line_comments = '1'; # set to 1 to allow multi-line comment box
$user_login_first = '0'; # set to 1 to have the vicidial_user login before the phone login
$view_scripts = '1'; # set to 1 to show the SCRIPTS tab
$scheduled_callbacks = '1'; # set to 1 to allow agent to choose scheduled callbacks
$agentonly_callbacks = '1'; # set to 1 to allow agent to choose agent-only scheduled callbacks
$agentcall_manual = '1'; # set to 1 to allow agent to make manual calls during autodial session
$dispo_check_all_pause = '0'; # set to 1 to allow for persistent pause after dispo
$agentcallsstatus = '1'; # set to 1 to show agent status and call count
$campagentstatctmax = '0'; # Number of seconds for campaign call and agent stats
$TEST_all_statuses = '0'; # TEST variable allows all statuses in dispo screen
@@ -1056,6 +1073,7 @@ $CCAL_OUT .= "</table>";
var CallBackrecipient = '';
var CallBackCommenTs = '';
var scheduled_callbacks = '<? echo $scheduled_callbacks ?>';
var dispo_check_all_pause = '<? echo $dispo_check_all_pause ?>';
VARstatuses = new Array(<? echo $VARstatuses ?>);
VARstatusnames = new Array(<? echo $VARstatusnames ?>);
var VD_statuses_ct = '<? echo $VD_statuses_ct ?>';
@@ -1152,12 +1170,14 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
var CalL_ScripT_id = '';
var CalL_AutO_LauncH = '';
var panel_bgcolor = '#E0C2D6';
var CusTCB_bgcolor = '#FFFF66';
var status_A = '<? echo $status_A ?>';
var status_B = '<? echo $status_B ?>';
var status_C = '<? echo $status_C ?>';
var status_D = '<? echo $status_D ?>';
var status_E = '<? echo $status_E ?>';
var auto_dial_level = '<? echo $auto_dial_level ?>';
var starting_dial_level = '<? echo $auto_dial_level ?>';
var dial_timeout = '<? echo $dial_timeout ?>';
var dial_prefix = '<? echo $dial_prefix ?>';
var campaign_cid = '<? echo $campaign_cid ?>';
@@ -1222,6 +1242,20 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
var previous_called_count = '';
var hot_keys_active = 0;
var all_record = 'NO';
var LeaDDispO = '';
var LeaDPreVDispO = '';
var AgaiNHanguPChanneL = '';
var AgaiNHanguPServeR = '';
var AgainCalLSecondS = '';
var AgaiNCalLCID = '';
var CB_count_check = 60;
var agentcallsstatus = '<? echo $agentcallsstatus ?>'
var campagentstatctmax = '<? echo $campagentstatctmax ?>'
var campagentstatct = '0'
var callback_in_progress = 0;
var mdnLisT_id = '999';
var agentonly_callbacks = '<? echo $agentonly_callbacks ?>'
var agentcall_manual = '<? echo $agentcall_manual ?>'
var manual_dial_preview = '<? echo $manual_dial_preview ?>'
var manual_dial_alt_phone = '<? echo $manual_dial_alt_phone ?>'
var DiaLControl_auto_HTML = "<IMG SRC=\"./images/vdc_LB_pause_OFF.gif\" border=0 alt=\"Pause\"><a href=\"#\" onclick=\"AutoDial_ReSume_PauSe('VDADready');\"><IMG SRC=\"./images/vdc_LB_resume.gif\" border=0 alt=\"Resume\"></a>";
@@ -1426,7 +1460,17 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
else
{
var dialnum = tasknum;
var originatevalue = protocol + "/" + extension;
if (protocol == 'EXTERNAL')
{
var protodial = 'Local';
var extendial = extension + "@" + ext_context;
}
else
{
var protodial = protocol;
var extendial = extension;
}
var originatevalue = protodial + "/" + extendial;
}
var queryCID = "DVagcW" + epoch_sec + user_abb;
@@ -1505,6 +1549,23 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
function check_for_conf_calls(taskconfnum,taskforce)
{
custchannellive--;
if (agentcallsstatus == '1')
{
campagentstatct++;
if (campagentstatct > campagentstatctmax)
{
campagentstatct=0;
var campagentstdisp = 'YES';
}
else
{
var campagentstdisp = 'NO';
}
}
else
{
var campagentstdisp = 'NO';
}
var xmlhttp=false;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
@@ -1526,7 +1587,7 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
}
if (xmlhttp)
{
checkconf_query = "server_ip=" + server_ip + "&session_name=" + session_name + "&user=" + user + "&pass=" + pass + "&client=vdc&conf_exten=" + taskconfnum + "&auto_dial_level=" + auto_dial_level;
checkconf_query = "server_ip=" + server_ip + "&session_name=" + session_name + "&user=" + user + "&pass=" + pass + "&client=vdc&conf_exten=" + taskconfnum + "&auto_dial_level=" + auto_dial_level + "&campagentstdisp=" + campagentstdisp;
xmlhttp.open('POST', 'conf_exten_check.php');
xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
xmlhttp.send(checkconf_query);
@@ -1546,6 +1607,21 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
UnixTime = parseInt(UnixTime);
UnixTimeMS = (UnixTime * 1000);
t.setTime(UnixTimeMS);
if (agentcallsstatus == '1')
{
var Astatus_array = check_time_array[2].split("Status: ");
var AGStatuS = Astatus_array[1];
var CamPCalLs_array = check_time_array[3].split("CampCalls: ");
var CamPCalLs = CamPCalLs_array[1];
if (AGStatuS != 'N')
{
document.getElementById("AgentStatusStatus").innerHTML = AGStatuS;
}
if (CamPCalLs != 'N')
{
document.getElementById("AgentStatusCalls").innerHTML = CamPCalLs;
}
}
var check_conf_array=check_ALL_array[1].split("|");
var live_conf_calls = check_conf_array[0];
var conf_chan_array = check_conf_array[1].split(" ~");
@@ -1990,6 +2066,206 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
}
}
// ################################################################################
// Request number of USERONLY callbacks for this agent
function CalLBacKsCounTCheck()
{
var xmlhttp=false;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
// JScript gives us Conditional compilation, we can cope with old IE versions.
// and security blocked creation of the objects.
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
@end @*/
if (!xmlhttp && typeof XMLHttpRequest!='undefined')
{
xmlhttp = new XMLHttpRequest();
}
if (xmlhttp)
{
CBcount_query = "server_ip=" + server_ip + "&session_name=" + session_name + "&user=" + user + "&pass=" + pass + "&ACTION=CalLBacKCounT&format=text";
xmlhttp.open('POST', 'vdc_db_query.php');
xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
xmlhttp.send(CBcount_query);
xmlhttp.onreadystatechange = function()
{
if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
{
// alert(xmlhttp.responseText);
var CBcounT = xmlhttp.responseText;
if (CBcounT == 0) {var CBprint = "NO";}
else {var CBprint = CBcounT;}
document.getElementById("CBstatusSpan").innerHTML ="<a href=\"#\" onclick=\"CalLBacKsLisTCheck();return false;\">" + CBprint + " ACTIVE CALLBACKS</a>";
}
}
delete xmlhttp;
}
}
// ################################################################################
// Request list of USERONLY callbacks for this agent
function CalLBacKsLisTCheck()
{
if ( (AutoDialWaiting == 1) || (VD_live_customer_call==1) )
{
alert("YOU MUST BE PAUSED TO CHECK CALLBACKS IN AUTO-DIAL MODE");
}
else
{
showDiv('CallBacKsLisTBox');
var xmlhttp=false;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
// JScript gives us Conditional compilation, we can cope with old IE versions.
// and security blocked creation of the objects.
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
@end @*/
if (!xmlhttp && typeof XMLHttpRequest!='undefined')
{
xmlhttp = new XMLHttpRequest();
}
if (xmlhttp)
{
var CBlist_query = "server_ip=" + server_ip + "&session_name=" + session_name + "&user=" + user + "&pass=" + pass + "&ACTION=CalLBacKLisT&format=text";
xmlhttp.open('POST', 'vdc_db_query.php');
xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
xmlhttp.send(CBlist_query);
xmlhttp.onreadystatechange = function()
{
if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
{
// alert(xmlhttp.responseText);
var all_CBs = null;
all_CBs = xmlhttp.responseText;
var all_CBs_array=all_CBs.split("\n");
var CB_calls = all_CBs_array[0];
var loop_ct=0;
var conv_start=0;
var CB_HTML = "<table width=610><tr bgcolor=#E6E6E6><td><font class=\"log_title\">#</td><td><font class=\"log_title\">CALLBACK DATE/TIME</td><td><font class=\"log_title\">NUMBER</td><td><font class=\"log_title\">NAME</td><td><font class=\"log_title\">STATUS</td><td align=right><font class=\"log_title\">CAMPAIGN</td><td><font class=\"log_title\">LAST CALL DATE/TIME</td><td align=left><font class=\"log_title\"> COMMENTS</td></tr>"
while (loop_ct < CB_calls)
{
loop_ct++;
loop_s = loop_ct.toString();
if (loop_s.match(/1$|3$|5$|7$|9$/))
{var row_color = '#DDDDFF';}
else
{var row_color = '#CCCCFF';}
var conv_ct = (loop_ct + conv_start);
var call_array = all_CBs_array[conv_ct].split(" ~");
var CB_name = call_array[0] + " " + call_array[1];
var CB_phone = call_array[2];
var CB_id = call_array[3];
var CB_lead_id = call_array[4];
var CB_campaign = call_array[5];
var CB_status = call_array[6];
var CB_lastcall_time = call_array[7];
var CB_callback_time = call_array[8];
var CB_comments = call_array[9];
CB_HTML = CB_HTML + "<tr bgcolor=\"" + row_color + "\"><td><font class=\"log_text\">" + loop_ct + "</td><td><font class=\"log_text\">" + CB_callback_time + "</td><td><font class=\"log_text\"><a href=\"#\" onclick=\"new_callback_call('" + CB_id + "','" + CB_lead_id + "');return false;\">" + CB_phone + "</a></td><td><font class=\"log_text\">" + CB_name + "</td><td><font class=\"log_text\">" + CB_status + "</td><td><font class=\"log_text\">" + CB_campaign + "</td><td align=right><font class=\"log_text\">" + CB_lastcall_time + "&nbsp;</td><td align=right><font class=\"log_text\">" + CB_comments + "&nbsp;</td></tr>";
}
CB_HTML = CB_HTML + "</table>";
document.getElementById("CallBacKsLisT").innerHTML = CB_HTML;
}
}
delete xmlhttp;
}
}
}
// ################################################################################
// Open up a callback customer record as manual dial preview mode
function new_callback_call(taskCBid,taskLEADid)
{
auto_dial_level=0;
callback_in_progress=1;
MainPanelToFront();
buildDiv('DiaLLeaDPrevieW');
buildDiv('DiaLDiaLAltPhonE');
document.vicidial_form.LeadPreview.checked=true;
document.vicidial_form.DiaLAltPhonE.checked=true;
hideDiv('CallBacKsLisTBox');
ManualDialNext(taskCBid,taskLEADid);
}
// ################################################################################
// Finish Callback and go back to original screen
function callback_finished()
{
auto_dial_level=starting_dial_level;
MainPanelToFront();
CalLBacKsCounTCheck();
callback_in_progress=0;
}
// ################################################################################
// Open page to enter details for a new manual dial lead
function NeWManuaLDiaLCalL()
{
if ( (AutoDialWaiting == 1) || (VD_live_customer_call==1) )
{
alert("YOU MUST BE PAUSED TO MANUAL DIAL A NEW LEAD IN AUTO-DIAL MODE");
}
else
{
showDiv('NeWManuaLDiaLBox');
}
}
// ################################################################################
// Insert the new manual dial as a lead and go to manual dial screen
function NeWManuaLDiaLCalLSubmiT()
{
hideDiv('NeWManuaLDiaLBox');
var MDDiaLCodEform = document.vicidial_form.MDDiaLCodE.value;
var MDPhonENumbeRform = document.vicidial_form.MDPhonENumbeR.value;
var MDDiaLOverridEform = document.vicidial_form.MDDiaLOverridE.value;
if (MDDiaLOverridEform.length > 0)
{
basic_originate_call(session_id,'NO','YES',MDDiaLOverridEform);
}
else
{
auto_dial_level=0;
callback_in_progress=1;
MainPanelToFront();
buildDiv('DiaLLeaDPrevieW');
buildDiv('DiaLDiaLAltPhonE');
document.vicidial_form.LeadPreview.checked=true;
document.vicidial_form.DiaLAltPhonE.checked=true;
ManualDialNext("","",MDDiaLCodEform,MDPhonENumbeRform);
}
document.vicidial_form.MDPhonENumbeR.value = '';
document.vicidial_form.MDDiaLOverridE.value = '';
}
// ################################################################################
// Request lookup of manual dial channel
function ManualDialCheckChanneL(taskCheckOR)
@@ -2144,7 +2420,7 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
// ################################################################################
// Send the Manual Dial Next Number request
function ManualDialNext()
function ManualDialNext(mdnCBid,mdnBDleadid,mdnDiaLCodE,mdnPhonENumbeR)
{
all_record = 'NO';
document.getElementById("DiaLControl").innerHTML = "<IMG SRC=\"./images/vdc_LB_dialnextnumber_OFF.gif\" border=0 alt=\"Dial Next Number\">";
@@ -2180,7 +2456,7 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
}
if (xmlhttp)
{
manDiaLnext_query = "server_ip=" + server_ip + "&session_name=" + session_name + "&ACTION=manDiaLnextCaLL&conf_exten=" + session_id + "&user=" + user + "&pass=" + pass + "&campaign=" + campaign + "&ext_context=" + ext_context + "&dial_timeout=" + dial_timeout + "&dial_prefix=" + dial_prefix + "&campaign_cid=" + campaign_cid + "&preview=" + man_preview + "&agent_log_id=" + agent_log_id;
manDiaLnext_query = "server_ip=" + server_ip + "&session_name=" + session_name + "&ACTION=manDiaLnextCaLL&conf_exten=" + session_id + "&user=" + user + "&pass=" + pass + "&campaign=" + campaign + "&ext_context=" + ext_context + "&dial_timeout=" + dial_timeout + "&dial_prefix=" + dial_prefix + "&campaign_cid=" + campaign_cid + "&preview=" + man_preview + "&agent_log_id=" + agent_log_id + "&callback_id=" + mdnCBid + "&lead_id=" + mdnBDleadid + "&phone_code=" + mdnDiaLCodE + "&phone_number=" + mdnPhonENumbeR + "&list_id=" + mdnLisT_id;
xmlhttp.open('POST', 'vdc_db_query.php');
xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
xmlhttp.send(manDiaLnext_query);
@@ -2202,6 +2478,7 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
{
fronter = user;
document.vicidial_form.lead_id.value = MDnextResponse_array[1];
LeaDPreVDispO = MDnextResponse_array[2];
document.vicidial_form.vendor_lead_code.value = MDnextResponse_array[4];
document.vicidial_form.list_id.value = MDnextResponse_array[5];
document.vicidial_form.gmt_offset_now.value = MDnextResponse_array[6];
@@ -2276,8 +2553,8 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
"&SIPexten=" + extension +
"&session_id=" + session_id +
"&phone=" + document.vicidial_form.phone_number.value +
"&parked_by=" + document.vicidial_form.lead_id.value;
"&parked_by=" + document.vicidial_form.lead_id.value +
"&dispo=" + LeaDDispO;
// $VICIDIAL_web_QUERY_STRING =~ s/ /+/gi;
// $VICIDIAL_web_QUERY_STRING =~ s/\`|\~|\:|\;|\#|\'|\"|\{|\}|\(|\)|\*|\^|\%|\$|\!|\%|\r|\t|\n//gi;
@@ -2290,6 +2567,12 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
VDIC_web_form_address = VICIDiaL_web_form_address;
if (LeaDPreVDispO == 'CALLBK')
{
document.getElementById("CusTInfOSpaN").innerHTML = " <B> PREVIOUS CALLBACK </B>";
document.getElementById("CusTInfOSpaN").style.background = CusTCB_bgcolor;
}
var regWFAvars = new RegExp("\\?","ig");
if (VDIC_web_form_address.match(regWFAvars))
{web_form_vars = '&' + web_form_vars}
@@ -2347,6 +2630,12 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
// ################################################################################
// Send the Manual Dial Skip
function ManualDialSkip()
{
if (callback_in_progress==1)
{
alert('YOU CANNOT SKIP A CALLBACK OR MANUAL DIAL, YOU MUST DIAL THE LEAD');
}
else
{
document.getElementById("DiaLControl").innerHTML = "<IMG SRC=\"./images/vdc_LB_dialnextnumber_OFF.gif\" border=0 alt=\"Dial Next Number\">";
@@ -2432,6 +2721,7 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
delete xmlhttp;
}
}
}
// ################################################################################
@@ -2687,6 +2977,7 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
custchannellive=1;
LeaDPreVDispO = check_VDIC_array[6];
fronter = check_VDIC_array[7];
document.vicidial_form.vendor_lead_code.value = check_VDIC_array[8];
document.vicidial_form.list_id.value = check_VDIC_array[9];
@@ -2718,6 +3009,12 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
lead_dial_number = document.vicidial_form.phone_number.value;
document.getElementById("MainStatuSSpan").innerHTML = " Incoming: " + document.vicidial_form.phone_number.value + " UID: " + CIDcheck + " &nbsp; " + VDIC_fronter;
if (LeaDPreVDispO == 'CALLBK')
{
document.getElementById("CusTInfOSpaN").innerHTML = " <B> PREVIOUS CALLBACK </B>";
document.getElementById("CusTInfOSpaN").style.background = CusTCB_bgcolor;
}
if (VDIC_data_VDIG[1].length > 0)
{
if (VDIC_data_VDIG[2].length > 2)
@@ -2791,7 +3088,8 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
"&SIPexten=" + extension +
"&session_id=" + session_id +
"&phone=" + document.vicidial_form.phone_number.value +
"&parked_by=" + document.vicidial_form.lead_id.value;
"&parked_by=" + document.vicidial_form.lead_id.value +
"&dispo=" + LeaDDispO;
var regWFspace = new RegExp(" ","ig");
web_form_vars = web_form_vars.replace(regWF, '');
@@ -2896,7 +3194,8 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
"&SIPexten=" + extension +
"&session_id=" + session_id +
"&phone=" + document.vicidial_form.phone_number.value +
"&parked_by=" + document.vicidial_form.lead_id.value;
"&parked_by=" + document.vicidial_form.lead_id.value +
"&dispo=" + LeaDDispO;
var regWFspace = new RegExp(" ","ig");
web_form_vars = web_form_vars.replace(regWF, '');
@@ -2922,6 +3221,24 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
}
// ################################################################################
// Send hangup a second time from the dispo screen
function DispoHanguPAgaiN()
{
form_cust_channel = AgaiNHanguPChanneL;
document.vicidial_form.callchannel.value = AgaiNHanguPChanneL;
document.vicidial_form.callserverip.value = AgaiNHanguPServeR;
lastcustchannel = AgaiNHanguPChanneL;
lastcustserverip = AgaiNHanguPServeR;
VD_live_call_secondS = AgainCalLSecondS;
CalLCID = AgaiNCalLCID;
document.getElementById("DispoSelectHAspan").innerHTML = "";
dialedcall_send_hangup();
}
// ################################################################################
// Start Hangup Functions for both
function bothcall_send_hangup()
@@ -2940,6 +3257,10 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
var form_cust_serverip = document.vicidial_form.callserverip.value;
var customer_channel = lastcustchannel;
var customer_server_ip = lastcustserverip;
AgaiNHanguPChanneL = lastcustchannel;
AgaiNHanguPServeR = lastcustserverip;
AgainCalLSecondS = VD_live_call_secondS;
AgaiNCalLCID = CalLCID;
var process_post_hangup=0;
if (MD_channel_look==1)
{
@@ -3284,6 +3605,30 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
document.getElementById("DispoSelectContent").innerHTML = dispo_HTML;
}
// ################################################################################
// open web form, then submit disposition
function WeBForMDispoSelect_submit()
{
var DispoChoice = document.vicidial_form.DispoSelection.value;
if (DispoChoice.length < 1) {alert("You Must Select a Disposition");}
else
{
document.getElementById("CusTInfOSpaN").innerHTML = "";
document.getElementById("CusTInfOSpaN").style.background = panel_bgcolor;
LeaDDispO = DispoChoice;
WebFormRefresH();
window.open(VDIC_web_form_address + "" + web_form_vars, 'webform', 'toolbar=1,scrollbars=1,location=1,statusbar=1,menubar=1,resizable=1,width=640,height=450');
DispoSelect_submit();
}
}
// ################################################################################
// Update vicidial_list lead record with disposition selection
function DispoSelect_submit()
@@ -3294,6 +3639,9 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
if (DispoChoice.length < 1) {alert("You Must Select a Disposition");}
else
{
document.getElementById("CusTInfOSpaN").innerHTML = "";
document.getElementById("CusTInfOSpaN").style.background = panel_bgcolor;
if ( (DispoChoice == 'CALLBK') && (scheduled_callbacks > 0) ) {showDiv('CallBackSelectBox');}
else
{
@@ -3367,12 +3715,17 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
VDCL_group_id = '';
fronter = '';
if (callback_in_progress==1)
{
callback_finished();
}
hideDiv('DispoSelectBox');
hideDiv('DispoButtonHideA');
hideDiv('DispoButtonHideB');
hideDiv('DispoButtonHideC');
document.getElementById("DispoSelectBox").style.top = 1;
document.getElementById("DispoSelectMaxMin").innerHTML = "<a href=\"#\" onclick=\"DispoMinimize()\">minimize</a>";
document.getElementById("DispoSelectHAspan").innerHTML = "<a href=\"#\" onclick=\"DispoHanguPAgaiN()\">Hangup Again</a>";
AgentDispoing = 0;
@@ -3385,6 +3738,10 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
// document.getElementById("DiaLControl").innerHTML = DiaLControl_auto_HTML;
}
VICIDiaL_pause_calling = 1;
if (dispo_check_all_pause != '1')
{
document.vicidial_form.DispoSelectStop.checked=false;
}
}
else
{
@@ -3429,6 +3786,14 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
WaitingForNextStep=0;
custchannellive=0;
}
function CustomerGoneHangup()
{
hideDiv('CustomerGoneBox');
WaitingForNextStep=0;
custchannellive=0;
dialedcall_send_hangup();
}
// ################################################################################
// Show message that there are no voice channels in the VICIDIAL session
function NoneInSession()
@@ -3444,6 +3809,62 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
WaitingForNextStep=0;
nochannelinsession=0;
}
function NoneInSessionCalL()
{
hideDiv('NoneInSessionBox');
WaitingForNextStep=0;
nochannelinsession=0;
if (protocol == 'EXTERNAL')
{
var protodial = 'Local';
var extendial = extension + "@" + ext_context;
}
else
{
var protodial = protocol;
var extendial = extension;
}
var originatevalue = protodial + "/" + extendial;
var queryCID = "ACagcW" + epoch_sec + user_abb;
var xmlhttp=false;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
// JScript gives us Conditional compilation, we can cope with old IE versions.
// and security blocked creation of the objects.
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
@end @*/
if (!xmlhttp && typeof XMLHttpRequest!='undefined')
{
xmlhttp = new XMLHttpRequest();
}
if (xmlhttp)
{
VMCoriginate_query = "server_ip=" + server_ip + "&session_name=" + session_name + "&user=" + user + "&pass=" + pass + "&ACTION=Originate&format=text&channel=" + originatevalue + "&queryCID=" + queryCID + "&exten=" + session_id + "&ext_context=" + ext_context + "&ext_priority=1";
xmlhttp.open('POST', 'manager_send.php');
xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
xmlhttp.send(VMCoriginate_query);
xmlhttp.onreadystatechange = function()
{
if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
{
// alert(xmlhttp.responseText);
}
}
delete xmlhttp;
}
AutoDial_ReSume_PauSe("VDADpause","NO");
}
// ################################################################################
// Generate the Closer In Group Chooser panel
@@ -3854,7 +4275,15 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
document.vicidial_form.CBT_minute.value = '00';
document.vicidial_form.CBT_ampm.value = 'PM';
if (document.vicidial_form.CallBackOnlyMe.checked==true)
{
CallBackrecipient = 'USERONLY';
}
else
{
CallBackrecipient = 'ANYONE';
}
document.vicidial_form.CallBackOnlyMe.checked=false;
// alert(CallBackDatETimE + "|" + CallBackCommenTs);
@@ -3893,6 +4322,19 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
hideDiv('DispoButtonHideA');
hideDiv('DispoButtonHideB');
hideDiv('DispoButtonHideC');
hideDiv('CallBacKsLisTBox');
hideDiv('NeWManuaLDiaLBox');
if (agentonly_callbacks != '1')
{hideDiv('CallbacksButtons');}
if ( (agentcall_manual != '1') && (starting_dial_level > 0) )
{hideDiv('ManuaLDiaLButtons');}
if (agentcallsstatus != '1')
{hideDiv('AgentStatusSpan');}
if ( (auto_dial_level != 0) || (manual_dial_preview != 1) )
{clearDiv('DiaLLeaDPrevieW');}
if ( (auto_dial_level != 0) || (manual_dial_alt_phone != 1) )
{clearDiv('DiaLDiaLAltPhonE');}
document.getElementById("sessionIDspan").innerHTML = session_id;
if (campaign_recording == 'NEVER')
{
@@ -3947,6 +4389,8 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
{
// check for live channels in conference room and get current datetime
check_for_conf_calls(session_id, '0');
if (agentonly_callbacks == '1')
{CB_count_check++;}
if (AutoDialWaiting == 1)
{
@@ -3957,6 +4401,11 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
{
ManualDialCheckChanneL(XDcheck);
}
if ( (CB_count_check > 19) && (agentonly_callbacks == '1') )
{
CalLBacKsCounTCheck();
CB_count_check=0;
}
if (VD_live_customer_call==1)
{
VD_live_call_secondS++;
@@ -4162,6 +4611,29 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
divref.visibility = 'hidden';
}
}
function clearDiv(divvar)
{
if (document.getElementById(divvar))
{
document.getElementById(divvar).innerHTML = '';
}
}
function buildDiv(divvar)
{
if (document.getElementById(divvar))
{
var buildDivHTML = "";
if (divvar == 'DiaLLeaDPrevieW')
{
var buildDivHTML = "<font class=\"preview_text\"> <input type=checkbox name=LeadPreview size=1 value=\"0\"> LEAD PREVIEW<BR></font>";
}
if (divvar == 'DiaLDiaLAltPhonE')
{
var buildDivHTML = "<font class=\"preview_text\"> <input type=checkbox name=DiaLAltPhonE size=1 value=\"0\"> ALT PHONE DIAL<BR></font>";
}
document.getElementById(divvar).innerHTML = buildDivHTML;
}
}
function showMainXfeR(divvar,taskxferchan,taskxferchanmain)
{
@@ -4244,9 +4716,19 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
if (resumevar != 'NO')
{
if (auto_dial_level == 0)
{document.getElementById("DiaLControl").innerHTML = DiaLControl_manual_HTML;}
{
document.getElementById("DiaLControl").innerHTML = DiaLControl_manual_HTML;
if (manual_dial_preview == 1)
{buildDiv('DiaLLeaDPrevieW');}
if (manual_dial_alt_phone != 1)
{buildDiv('DiaLDiaLAltPhonE');}
}
else
{document.getElementById("DiaLControl").innerHTML = DiaLControl_auto_HTML;}
{
document.getElementById("DiaLControl").innerHTML = DiaLControl_auto_HTML;
clearDiv('DiaLLeaDPrevieW');
clearDiv('DiaLDiaLAltPhonE');
}
}
panel_bgcolor='#E0C2D6';
document.getElementById("MainStatuSSpan").style.background = panel_bgcolor;
@@ -4269,6 +4751,7 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
<style type="text/css">
<!--
div.scroll_log {height: 135px; width: 600px; overflow: scroll;}
div.scroll_callback {height: 300px; width: 620px; overflow: scroll;}
div.scroll_park {height: 400px; width: 620px; overflow: scroll;}
div.scroll_list {height: 400px; width: 140px; overflow: scroll;}
div.scroll_script {height: 331px; width: 480px; background: #FFF5EC; overflow: scroll; font-size: 12px; font-family: sans-serif;}
@@ -4323,6 +4806,61 @@ echo "</head>\n";
<table border=0 bgcolor="#FFFFFF" width=650 height=500><TR><TD align=center><BR><span id="WelcomeBoxAt">VICIDIAL</span></TD></TR></TABLE>
</span>
<span style="position:absolute;left:300px;top:365px;z-index:13;" id="ManuaLDiaLButtons"><font class="body_text">
<span id="MDstatusSpan"><a href="#" onclick="NeWManuaLDiaLCalL();return false;">MANUAL DIAL</a></span> <BR>
</font></span>
<span style="position:absolute;left:300px;top:350px;z-index:14;" id="CallbacksButtons"><font class="body_text">
<span id="CBstatusSpan">X ACTIVE CALLBACKS</span> <BR>
</font></span>
<span style="position:absolute;left:0px;top:0px;z-index:34;" id="CallBacKsLisTBox">
<table border=1 bgcolor="#CCFFCC" width=650 height=460><TR><TD align=center VALIGN=top> CALLBACKS FOR AGENT <? echo $VD_login ?>:<BR>Click on a callback below to call the customer back now. If you click on a record below to call it, it will be removed from the list.
<BR>
<div class="scroll_callback" id="CallBacKsLisT"></div>
<BR> &nbsp;
<a href="#" onclick="CalLBacKsLisTCheck();return false;">Refresh</a>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
<a href="#" onclick="hideDiv('CallBacKsLisTBox');return false;">Go Back</a>
</TD></TR></TABLE>
</span>
<span style="position:absolute;left:0px;top:0px;z-index:35;" id="NeWManuaLDiaLBox">
<table border=1 bgcolor="#CCFFCC" width=650 height=460><TR><TD align=center VALIGN=top> NEW MANUAL DIAL LEAD FOR <? echo "$VD_login in campaign $VD_campaign" ?>:<BR><BR>Enter information below for the new lead you wish to call.
<BR>
<?
if (eregi("X",dial_prefix))
{
echo "Note: a dial prefix of $dial_prefix with be added to the beginning of this number<BR>\n";
}
?>
Note: all new manual dial leads will go into list 999<BR><BR>
<table><tr>
<td align=right><font class="body_text"> Dial Code: </td>
<td align=left><font class="body_text"><input type=text size=7 maxlength=10 name=MDDiaLCodE class="cust_form" value="1">&nbsp; (This is usually a 1 in the USA-Canada)</td>
</tr><tr>
<td align=right><font class="body_text"> Phone Number: </td>
<td align=left><font class="body_text"><input type=text size=12 maxlength=10 name=MDPhonENumbeR class="cust_form" value="">&nbsp; (10 digits max - digits only)</td>
</tr><tr>
<td align=right colspan=2><BR><BR>If you want to dial a number and have it NOT be added as a new lead, enter in the exact dialstring that you want to call in the Dial Override field below. To hangup this call you will have to open the CALLS IN THIS SESSION link at the bottom of the screen and hang it up by clicking on its channel link there.<BR> &nbsp; </td>
</tr><tr>
<td align=right><font class="body_text"> Dial Override: </td>
<td align=left><font class="body_text"><input type=text size=24 maxlength=20 name=MDDiaLOverridE class="cust_form" value="">&nbsp; (digits only please)</td>
</tr></table>
<BR>
<a href="#" onclick="NeWManuaLDiaLCalLSubmiT();return false;">Dial Now</a>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
<a href="#" onclick="hideDiv('NeWManuaLDiaLBox');return false;">Go Back</a>
</TD></TR></TABLE>
</span>
<span style="position:absolute;left:5px;top:350px;z-index:20;" id="AgentStatusSpan"><font class="body_text">
Your Status: <span id="AgentStatusStatus"></span> <BR>Calls Dialing: <span id="AgentStatusCalls"></span>
</font></span>
<span style="position:absolute;left:5px;top:310px;z-index:21;" id="TransferMain">
<table bgcolor="#CCCCFF" width=630><tr>
<td align=left>
@@ -4381,13 +4919,18 @@ echo "</head>\n";
<span style="position:absolute;left:0px;top:12px;z-index:24;" id="NoneInSessionBox">
<table border=1 bgcolor="#CCFFFF" width=600 height=500><TR><TD align=center> Noone is in your session: <span id="NoneInSessionID"></span><BR>
<a href="#" onclick="NoneInSessionOK();return false;">OK</a>
<a href="#" onclick="NoneInSessionOK();return false;">Go Back</a>
<BR><BR>
<a href="#" onclick="NoneInSessionCalL();return false;">Call Agent Again</a>
</TD></TR></TABLE>
</span>
<span style="position:absolute;left:0px;top:0px;z-index:25;" id="CustomerGoneBox">
<table border=1 bgcolor="#CCFFFF" width=650 height=500><TR><TD align=center> Customer has hung up: <span id="CustomerGoneChanneL"></span><BR>
<a href="#" onclick="CustomerGoneOK();return false;">OK</a>
<a href="#" onclick="CustomerGoneOK();return false;">Go Back</a>
<BR><BR>
<a href="#" onclick="CustomerGoneHangup();return false;">Finish and Disposition Call</a>
</TD></TR></TABLE>
</span>
@@ -4408,13 +4951,15 @@ echo "</head>\n";
</span>
<span style="position:absolute;left:0px;top:0px;z-index:30;" id="DispoSelectBox">
<table border=1 bgcolor="#CCFFCC" width=650 height=460><TR><TD align=center VALIGN=top> DISPOSITION CALL :<span id="DispoSelectPhonE"></span> &nbsp; &nbsp; &nbsp; <span id="DispoSelectMaxMin"><a href="#" onclick="DispoMinimize()">minimize</a></span><BR>
<table border=1 bgcolor="#CCFFCC" width=650 height=460><TR><TD align=center VALIGN=top> DISPOSITION CALL :<span id="DispoSelectPhonE"></span> &nbsp; &nbsp; &nbsp; <span id="DispoSelectHAspan"><a href="#" onclick="DispoHanguPAgaiN()">Hangup Again</a></span> &nbsp; &nbsp; &nbsp; <span id="DispoSelectMaxMin"><a href="#" onclick="DispoMinimize()">minimize</a></span><BR>
<span id="DispoSelectContent"> End-of-call Disposition Selection </span>
<input type=hidden name=DispoSelection><BR>
<input type=checkbox name=DispoSelectStop size=1 value="0"> STOP CALLING <BR>
<a href="#" onclick="DispoSelectContent_create('','ReSET');return false;">RESET</a> |
<input type=checkbox name=DispoSelectStop size=1 value="0"> PAUSE AGENT DIALING <BR>
<a href="#" onclick="DispoSelectContent_create('','ReSET');return false;">CLEAR FORM</a> |
<a href="#" onclick="DispoSelect_submit();return false;">SUBMIT</a>
<BR><BR><BR><BR> &nbsp;
<BR><BR>
<a href="#" onclick="WeBForMDispoSelect_submit();return false;">WEB FORM SUBMIT</a>
<BR><BR> &nbsp;
</TD></TR></TABLE>
</span>
@@ -4450,12 +4995,14 @@ echo "</head>\n";
<option>AM</option>
<option selected>PM</option>
</select> &nbsp;<BR>
<?
if ($agentonly_callbacks)
{echo "<input type=checkbox name=CallBackOnlyMe size=1 value=\"0\"> MY CALLBACK ONLY <BR>";}
?>
CB Comments: <input type=text name="CallBackCommenTsField" size=50><BR><BR>
<a href="#" onclick="CallBackDatE_submit();return false;">SUBMIT</a><BR><BR>
<span id="CallBackDateContent"><?echo"$CCAL_OUT"?></span>
<!-- <input type=checkbox name=CallBackOnlyMe size=1 value="0"> MY CALLBACK ONLY <BR> -->
<BR><BR> &nbsp;
</TD></TR></TABLE>
</span>
@@ -4493,7 +5040,7 @@ echo "</head>\n";
<span style="position:absolute;left:154px;top:65px;z-index:11;" id="ScriptPanel">
<span style="position:absolute;left:154px;top:65px;z-index:15;" id="ScriptPanel">
<table border=0 bgcolor="#FFE7D0" width=486 height=331><TR><TD align=left valign=top><font class="sb_text"><div class="scroll_script" id="ScriptContents">VICIDIAL SCRIPT</div></font></TD></TR></TABLE>
</span>
@@ -4510,6 +5057,10 @@ echo "</head>\n";
<tr><td width=150 align=left valign=top>
<font class="body_text"><center>
<span STYLE="background-color: #CCFFCC" id="DiaLControl"><a href="#" onclick="ManualDialNext();"><IMG SRC="./images/vdc_LB_dialnextnumber_OFF.gif" border=0 alt="Dial Next Number"></a></span><BR>
<span id="DiaLLeaDPrevieW"><font class="preview_text"> <input type=checkbox name=LeadPreview size=1 value="0"> LEAD PREVIEW<BR></font></span>
<span id="DiaLDiaLAltPhonE"><font class="preview_text"> <input type=checkbox name=DiaLAltPhonE size=1 value="0"> ALT PHONE DIAL<BR></font></span>
<!--
<?
if ( ($manual_dial_preview) and ($auto_dial_level==0) )
{echo "<font class=\"preview_text\"> <input type=checkbox name=LeadPreview size=1 value=\"0\"> LEAD PREVIEW<BR></font>";}
@@ -4517,7 +5068,7 @@ if ( ($manual_dial_alt_phone) and ($auto_dial_level==0) )
{echo "<font class=\"preview_text\"> <input type=checkbox name=DiaLAltPhonE size=1 value=\"0\"> ALT PHONE DIAL<BR></font>";}
?>
?> -->
RECORDING FILE:<BR>
</center>
<font class="body_tiny"><span id="RecorDingFilename"></span></font><BR>
@@ -4551,7 +5102,7 @@ RECORD ID: <font class="body_small"><span id="RecorDID"></span></font><BR>
<td align=right><font class="body_text"> seconds: </td>
<td align=left><font class="body_text"><input type=text size=3 name=SecondS class="cust_form" value="">&nbsp; Channel: <input type=text size=6 name=callchannel class="cust_form" value="">&nbsp; Cust Time: <input type=text size=22 name=custdatetime class="cust_form" value=""></td>
</tr><tr>
<td colspan=2 align=center> Customer Information:</td>
<td colspan=2 align=center> Customer Information: <span id="CusTInfOSpaN"></span></td>
</tr><tr>
<td align=right><font class="body_text"> Title: </td>
<td align=left><font class="body_text"><input type=text size=4 name=title maxlength=4 class="cust_form" value="">&nbsp; First: <input type=text size=12 name=first_name maxlength=30 class="cust_form" value="">&nbsp; MI: <input type=text size=1 name=middle_initial maxlength=1 class="cust_form" value="">&nbsp; Last: <input type=text size=15 name=last_name maxlength=30 class="cust_form" value=""></td>
+6
View File
@@ -115,3 +115,9 @@ NOTE: In a multi-server setup you may want to have your database and web server
If you have any questions or problems please post to the astguiclient-users list(link available on the project website)
6. For multi-server VICIDIAL/astGUIclient installations these cron scripts only need to be set up and run on one of the servers:
- AST_VDhopper.pl
- AST_cleanup_agent_log.pl
- ADMIN_adjust_GMTnow_on_leads.pl
- AST_DB_optimize.pl
+67 -29
View File
@@ -1,4 +1,4 @@
Asterisk/astguiclient install from scratch. v.1.1.10 2006-03-17
Asterisk/astguiclient install from scratch. v.1.1.10 2006-04-06
By the astGUIclient group astguiclient@eflo.net
**** IMPORTANT - In order for vicidial/astguiclient to function correctly please
@@ -264,14 +264,15 @@ for the mirrors list, you will want to select at least 4 mirrors
- enter for the next 2 prompts
3. Once you see the cpan> prompt you can begin installing modules
4. If you've never installed cpan before you should probably install the
following modules first:
following modules first: (say YES if asked to install prerequisites)
- install MD5
- install Digest::MD5 (say YES when asked to install prerequisites)
- install Digest::MD5
- install Digest::SHA1
- install readline (just hit Enter when it asks for operator)
- install Bundle::CPAN
- reload cpan
- then you can install other modules:
- install Net::MySQL
- install O/OY/OYAMA/Net-MySQL-0.08.tar.gz
- install Net::Telnet
- install Time::HiRes
- install OLE::Storage_Lite (needed for super list loader Excel)
@@ -448,30 +449,33 @@ that can be displayed real-time on a web page. *OPTIONAL*
8. Go to http://ploticus.sourceforge.net/ and download the package
- to install this directly on the command line type:
NOTE: you may have to edit the Makefile to remove X11 if you don't have it
- cd /usr/local
- wget http://ploticus.sourceforge.net/download/pl232src.tar.gz
- gunzip pl232src.tar.gz
- tar xvf pl232src.tar
- cd pl232src
- cd src/
- cd pl232src/src/
- make clean
- make
- make install
- you are done
NOTE: for the graphics to work on the AST_server_performance page you will
need the 'pl' script to be linked or copied into your htdocs/vicidial/ploticus directory
mysql is a fast database system that is very easy to integrate with any
MySQL is a fast database system that is very easy to integrate with any
application. You can either install it on the local Asterisk system or have one
somewhere on your network. For our purposes, we are creating an Asterisk
installation that is self contained and needs no other local servers to operate,
so we will need to install mysql on this machine.
*OPTIONAL* (only install MySQL locally if you don't want to use an installation
on another machine)
NOTE: a minimum of MySQL 4.0.X is required
9. Go to http://www.mysql.com/ and download the mysql package
- to install this directly on the command line type:
- cd /usr/local
- wget http://mirror.services.wisc.edu/mysql/Downloads/MySQL-4.0/mysql-4.0.26.tar.gz
- wget http://mirror.trouble-free.net/mysql_mirror/Downloads/MySQL-4.0/mysql-4.0.26.tar.gz
- gunzip mysql-4.0.26.tar.gz
- tar xvf mysql-4.0.26.tar
- cd mysql-4.0.26
@@ -487,8 +491,26 @@ on another machine)
- cp support-files/my-medium.cnf /etc/my.cnf
- /usr/local/mysql/bin/mysqld_safe --user=mysql &
- you are done
- NOTE: if you use MySQL version 4.1.12 or greater:
(http://mirror.services.wisc.edu/mysql/Downloads/MySQL-4.1/mysql-4.1.15.tar.gz)
***** NOTE: if you use MySQL version 4.0.X: *****
(http://mirror.trouble-free.net/mysql_mirror/Downloads/MySQL-4.0/mysql-4.0.26.tar.gz)
Then you need to make sure that you use the 0.08 version of the Net::MySQL
perl module. This can be found in the astguiclient release zip file in the
libs/Net folder(MySQL.pm). Here are instructions on how to replace the
0.09 version of MySQL.pm with the 0.08 version which is MySQL 4.0.X compatible:
- cpan
- install O/OY/OYAMA/Net-MySQL-0.08.tar.gz
or you can use the version included with the astguiclient release:
- locate -u
- locate MySQL.pm (replace the path below with the path you find)
- mv /usr/lib/perl5/site_perl/5.8.6/Net/MySQL.pm MySQL.pm-old
- cp /home/cron/astguiclient_1.1.10/libs/Net/MySQL.pm /usr/lib/perl5/site_perl/5.8.6/Net/MySQL.pm
If you do not do this, then you will see MySQL authentication errors on your
Asterisk server.
***** NOTE: if you use MySQL version 4.1.12 or greater: *****
(http://mirror.services.wisc.edu/mysql/Downloads/MySQL-4.1/mysql-4.1.18.tar.gz)
If you are using the 0.08 version of the Net::MySQL perl module with 4.1.X
Then you need to make sure that you use the SET PASSWORD ... OLD_PASSWORD to
allow the older client libraries to connect to the MySQL server, or you can
start your mysqld server with the "-old-passwords" option. If you do not do
@@ -606,11 +628,11 @@ this loaded on your system.
14. Go to http://subversion.tigris.org to download the most recent source version
- to install this directly on the command line type:
- cd /usr/local
- wget http://subversion.tigris.org/tarballs/subversion-1.1.4.tar.gz
- gunzip subversion-1.1.4.tar.gz
- tar xvf subversion-1.1.4.tar
- cd subversion-1.1.4
- ./configure
- wget http://subversion.tigris.org/downloads/subversion-1.3.0.tar.gz
- gunzip subversion-1.3.0.tar.gz
- tar xvf subversion-1.3.0.tar
- cd subversion-1.3.0
- ./configure --enable-ssl --with-neon
- make
- make install
@@ -620,10 +642,10 @@ PHASE 4: INSTALLING ASTERISK
OK, all the prep work is done, now it's time to start having fun with Asterisk.
There are four basic ways to install Asterisk, an official release(at the time of
this writing the official releases are 1.2.4 and 1.0.10), the CVS_v1-0 branch(1.0
this writing the official releases are 1.2.6 and 1.0.10), the CVS_v1-0 branch(1.0
with bug fixes not yet packaged and released) and the SVN_DEV version(development
branch). Because there are bugs that affect astGUIclient in releases 1.0.8 and
1.0.9, we recommend using Asterisk 1.2.4 or 1.0.10. These instructions are how we
1.0.9, we recommend using Asterisk 1.2.6 or 1.0.10. These instructions are how we
get our Asterisk system with it's T1 line installed with our 2 SIP VOIP devices
and one IAX2 softphone.
@@ -638,13 +660,17 @@ with the following patch:
- mkdir /usr/src/asterisk
- cd /usr/src/asterisk
A. if you want 1.2 release (reliable with new features):
- wget http://ftp.digium.com/pub/asterisk/asterisk-1.2.6.tar.gz
or older 1.2.4 release
- wget http://ftp.digium.com/pub/asterisk/old-releases/asterisk-1.2.4.tar.gz
- wget http://ftp.digium.com/pub/zaptel/zaptel-1.2.5.tar.gz
or older 1.2.4 release
- wget http://ftp.digium.com/pub/zaptel/zaptel-1.2.4.tar.gz
- wget http://ftp.digium.com/pub/libpri/libpri-1.2.2.tar.gz
- gunzip asterisk-1.2.4.tar.gz
- tar xvf asterisk-1.2.4.tar
- gunzip zaptel-1.2.4.tar.gz
- tar xvf zaptel-1.2.4.tar
- gunzip asterisk-1.2.6.tar.gz
- tar xvf asterisk-1.2.6.tar
- gunzip zaptel-1.2.5.tar.gz
- tar xvf zaptel-1.2.5.tar
- gunzip libpri-1.2.2.tar.gz
- tar xvf libpri-1.2.2.tar
B. If you want latest 1.0 tree stable release:
@@ -679,7 +705,7 @@ with the following patch:
edit this line at the top and just add a hash # in front of it as shown:
#PBX_LIBS+=$(shell $(CROSS_COMPILE_BIN)gtk-config --cflags >/dev/null 2>/dev/null && echo "pbx_gtkconsole.so")
- cd ./zaptel-1.2.4
- cd ./zaptel-1.2.5
- make clean
- make
- make install
@@ -687,7 +713,7 @@ with the following patch:
- make clean
- make
- make install
- cd ../asterisk-1.2.4
- cd ../asterisk-1.2.6
- (1.2 tree) If you want to include Answering Machine Detection ability
you will need to download app_amd.c and amd.conf and alter the
apps/Makefile to compile it properly
@@ -745,6 +771,7 @@ configure it.
NOTES: If you want to install zttool diagnostics you may need the newt package installed:
http://www.freedomphones.net/files/newt-0.51.6.tar.gz
ln -s /usr/lib/libnewt.so.0.51.6 /usr/lib/libnewt.so.0.51
then go to your zaptel folder and do 'make zttool'
Digium/Clone X100P EXAMPLE:
@@ -816,7 +843,7 @@ channels, we will use the following settings for zaptel.conf:
FOR A PRI YOU WOULD USE SOMETHING LIKE THIS:
span=2,2,0,esf,b8zs
bchan=25-47
dchan=25-47
dchan=48
2. edit zapata.conf
- vi /etc/asterisk/zapata.conf
@@ -1176,6 +1203,17 @@ exten => i,1,Playback(invalid) ; "That's not valid, try again"
exten => 8500,1,VoicemailMain
exten => 8500,2,Goto(s,6)
; ASTERISK AGENTS LOGINS FOR QUEUES (NOT part of VICIDIAL)
; the following assumes phone agent login and exten are 3 digits and the same
; also assumes that 3-digit login is present in agents.conf and queueus.conf
;Agent Logout then stay onhook, DIAL 54 + 3-digit ID
exten => _54XXX,1,AgentCallbackLogin(||)
; the following are used to login and logout of Asterisk Queues from phone
;Agent Login then stay offhook on the phone, DIAL 55 + 3-digit ID
exten => _55XXX,1,AgentLogin(${EXTEN:1})
;Agent Login then stay onhook, phones will ring, DIAL 56 + 3-digit ID
exten => _56XXX,1,AgentCallbackLogin(||${EXTEN:1}@default)
######------ END extensions.conf example ------######
### OPTIONAL IAX trunk extensions entries for long distance dialing over IAX
@@ -1344,13 +1382,13 @@ VICIDIAL components to the system. (NOTE: make sure you have added the user "cro
SUBPHASE 6.0: putting the files in place
1. Go to http://astguiclient.sf.net/ and download the latest astguiclient
package(as of this writing it is 1.1.9)
package(as of this writing it is 1.1.10)
- to install this directly on the command line type:
- cd /home/cron
- mkdir astguiclient
- cd astguiclient
- wget http://unc.dl.sourceforge.net/sourceforge/astguiclient/astguiclient_1.1.9.zip
- unzip astguiclient_1.1.9.zip
- wget http://internap.dl.sourceforge.net/sourceforge/astguiclient/astguiclient_1.1.10.zip
- unzip astguiclient_1.1.10.zip
- chmod 0755 install_server_files.pl
- perl install_server_files.pl
- cd ../
@@ -1401,7 +1439,7 @@ use asterisk;
GRANT SELECT on asterisk.phones TO idcheck@'%' IDENTIFIED BY '1234';
GRANT SELECT on asterisk.phones TO idcheck@localhost IDENTIFIED BY '1234';
insert into servers (server_id,server_description,server_ip,active,asterisk_version)values('TESTasterisk','Test install of Asterisk server', '10.10.10.15','Y','1.2.2');
insert into servers (server_id,server_description,server_ip,active,asterisk_version)values('TESTasterisk','Test install of Asterisk server', '10.10.10.15','Y','1.2.6');
insert into server_updater values('10.10.10.15','');
@@ -1975,7 +2013,7 @@ exten => 8320,4,Hangup
; this is used to allow the GUI to send you directly into voicemail
; don't forget to set GUI variable $voicemail_exten to this extension
exten => 8501,1,VoicemailMain(s${CALLERID})
exten => 8501,1,VoicemailMain(s${CALLERIDNUM})
exten => 8501,2,Hangup
; this is used to allow the GUI to send live calls directly into voicemail
+73 -46
View File
@@ -1,5 +1,5 @@
+------------------------------------------------------------------------------+
| Asterisk GUI client - TODO v.1.1.10 |
| Asterisk GUI client - TODO v.1.1.11 |
| |
| TODO file is a list of what is new from previous version as well a list of |
| features that are planned to be completed for future releases. HIGH priority |
@@ -10,77 +10,110 @@
| version your downloaded. |
+------------------------------------------------------------------------------+
- DONE Fix error in hour variable in AST_VDauto_dial.pl script
- DONE Fix scripts to work around Asterisk 1.2 tree behaviour on VICIDIAL calls that will jump right to the 'h' exten without allowing the inbound and outbound calls to finish up their DROP updates. Fix entails adding a 'exten => h,2,DeadAGI(VD_hangup.agi)' to the extensions.conf. This script looks for the call's uniqueID in the vicidial_log and updates that record and the vicidial_closer_log, vicidial_list tables with the proper time as well as status, and deletes record from the vicidial_auto_calls table.
- DONE Add ability in AST_CRON_mix_recordings_BASIC.pl and AST_CRON_mix_recordings.pl to mix gsm in and out audio files
- DONE fix reset of lead hopper in vicidial/admin.php
- DONE Added deletion from hopper of inactive list leads. AST_VDhopper.pl
- DONE add app_amd answering machine detections instructions with possibly special VD_amd_pickup.sgi script to note a pickup before the app_amd code runs. This will require the 1.2 Asterisk tree, altering of source files and recompiling of Asterisk to run. will run under another exten => 8369
- DONE Create AGI script for customer entering PIN number. very limited use and difficult to setup, internal project. agi-VDADlisten_DTMF.agi
- DONE add ability to send AMD detected calls to an extension for a voicemail message. Already have the am_message_exten fields for this, we just need a Y/N field to define whether to send AMs to that extension to verify, it will default to no.
- DONE Change the phone_codes_GMT.txt file to reflect Indiana's move to adopting Daylight Savings Time
- DONE add transfer-conf macro links per campaign for number-to-dial and send-dtmf fields. We will add two small links to be placed somewhere on the TRANSFER-CONF frame. These two buttons will have associated fields in the vicidial_campaigns and vicidial_inbound_groups tables and will contain a DTMF field and a NUMBER fields each for pre-populating the Number to dial and Send DTMF fields by the click of the link.
- DONE Add to update.sql script changes in Indiana's timezone data in database, and send out announcement to change production systems as of 2006-04-02
- DONE formalize GPLv2 License and copyright notices on all scripts
- DONE Alter AST_manager_listen.pl to work with new SVN manager output that includes a Timestamp field
- DONE package up the sphinx dispo audio analysis scripts in the sphinxNA folder and write some instructions on how to setup your system to record ring-time and sort/filter it after-hours and analyze it for dispositions with sphinx
- DONE change wording of vicidial.php disposition screen bottom phrases to be more clear
- DONE add another vicidial_users Y/N field for hotkeys activation, this would replace the current requirement of a user_level >= 5 for Hotkeys activation on vicidial.php.
- DONE Alter list_id to be BIGINT(14) to allow for timestamped list_ids
- DONE add permission for altering lead information from the admin.php lead search page. This means a new vicidial_users Y/N field. This removes the default over/ride user/pass for this feature
- DONE Add notes to LOAD_BALANCING.txt file about which cron scripts only need to be run on one server.
- DONE add another next_agent_call option of user_level. This would send calls first to the highest ranking available agents. This will require altering the vicidial_campaigns table as well as the vicidial_live_agents table and the vicidial.php code tree.
- DONE Add a vicidial.php variable at the top of the script to allow for the change in behaviour of pausing after dispositioning of a call, something like $dispo_check_all_pause =1; If set to 1 then it will stay the way it is and pause after every call if checked once. if set to 0 (which will be the default) it will only pause once and uncheck the box for subsequent calls.
- DONE add ability to restrict CLOSER/INBOUND campaign users from choosing their own in-groups and give the ability to the manager to set them. This means adding a new Y/N field to vicidial_users, adding a new closer_campaigns field to vicidial_users and adding a new selection system in the edit users screen for selecting in-groups for an agent(much like how it is done for remote agents)
- DONE Add a WEB FORM submit link to the dispo screen that would dispo the call as well as open a web form link with the customer info and status dispod when clicked.
- DONE add manager ability to change agent campaign while they are logged in. We will add a new user_status.php page to facilitate this, it will be a new vicidial_users field that the manager must be enabled for in order to switch campaigns of live agents. This new user_status page will also allow the force logout of agents which will delete their vicidial_live_agents record in the system.
- DONE Add notice to a call that was CALLBK on the agent screen next time it is called so agent knows it was a scheduled callback. Positioned to the right of the customer info header.
- DONE Add small link to dispo screen that will allow minimizing the dispo screen so that the agent can see the customer info behind it.
- DONE Add link to the dispo screen to allow the agent to try to hangup the call again if it did not hangup. Only can click it once per call then it disappears.
- DONE First stage Scheduled-Callback functionality: add callback status with date and time definition to VICIDIAL. This first stage will just allow setting of date/time for callbacks that will be called back by anyone, not a specific agent. The initial contact agent will select CALLBK as the status and a frame will pop up with a calendar starting at today and going by month upto 12 months in the future. They will click on a day and also be able to set the hour and half hour, and the lead will be saved as a status CBHOLD so it cannot be called. Once the time set is reached, the callback is changed to a status CALLBK and it will be available to be called if the CALLBK status is selected in the campaign screen.
- DONE Add link to "noone is in your session" window to call agent back and update status to PAUSE.
- DONE Add interface for viewing (by user/list/campaign) and modifying Callback on-hold entries, CBHOLD status, in the admin page as well as lead modification page.
- DONE Add a Hangup Customer link on the "Customer has hungup" popup to reduce the steps to dispo. options would now be "back to Main" and "Disposition and finish call"
- DONE Added phone_favorites table into the create-database script. major omission from 1.1.9 release.
- DONE Add display for agent status and number of calls being dialed to vicidial.php. $agentcallsstatus set to 1 activates the display below the SENDDTMF button, $campagentstatctmax sets the number of seconds delay between updates of that information
- DONE Added AST_agent_time_sheet.php for summary of logged-in-to-vicidial time for agents
- DONE Fixed bug in AST_update.pl test section that would crash script when ** came through as extension on Asterisk 1.2.6 in certain circumstances.
- DONE Change callbacks to set to called_since_last_reset=N when they go from CBHOLD to CALLBK in VDhopper.pl script
- DONE Added status name to list modification screen in admin.php. Also consolidated called and not-called into one row for each status. Added status name to campaign dial_statuses select lists
- DONE Change "Congestion" in the dialplan samples in SCRATCH_INSTALL to "Hangup". This needs to be done because of an annoying change in Asterisk 1.2 that does not always hang up Congested calls.
- DONE Second stage Scheduled-Callback functionality: add agent-specific callback status with date and time definition to vicidial.php. This second stage will allow a callback to be restricted to the specific agent that set the callback. There will need to be some other provisions in place on the vicidial.php to handle what are basically manual dial calls happening on an auto-dial session.
- DONE Add gmt_offset_now to vicidial_hopper and method in the VDhopper.pl script to remove entries not within the range to improve time compliance.
- DONE Change the default for recording filenames to include the CUSTPHONE
- DONE Write an auto-dial reminder AGI script(agi-VDADautoREMINDER.agi) that will play a message and offer the options of leaving a voicemail in the voicemail box specified in the vicidial_list.security_phrase field or changing the status to CALLBK so that the customer can be called back by an agent. This script will not send any live calls to agents and is best run through a remote_agent. Statuses: N- Call was picked up, didn't finish initial message/ MP- Initial message was played/ VM- call was sent to voicemail/ CALLBK- customer selected to be called back
- DONE Alter VD_hangup.agi to preserve vicidial_log.status and vicidial_list.status if the status has been set to something other than default start values(XFER/QUEUE/NEW/NA)
- DONE Change call_log.agi and call_logCID.agi to fix the tracking custom-callerid bug.
- DONE Fix VD_amd.agi vicidial_log query problems to not overwrite previous status
- DONE Fix bug in vicidial that would send every "leave 3way call" conversation to the same conference.
- DONE Add notes on multi-server VICIDIAL to LOAD_BALANCING.txt along with cron jobs that only need to be on one of the VICIDIAL servers
- DONE Add the ability to manually dial a number from within vicidial.php. There will be an option to add the number as a new lead to the campaign the agent is logged into, or just call the number and go back to the main screen(the call would then need to be dropped from the CALLS IN THIS SESSION link at the bottom). This feature will only be enabled when the agent is paused and not on a call.
- HIGH Second stage Scheduled-Callback functionality: add agent-specific callback status with date and time definition to VICIDIAL. This second stage will allow a callback to be restricted to the specific agent that set the callback. There will also be an admin interface necessary to be able to override this as well as a callback interface on the vicidial.php page so an agent can look over their callbacks and place them when the time arises. There will need to be some other provisions in place on the vicidial.php to handle what are basically manual dial calls happening on an auto-dial session, I haven't quite figured out how to accomplish this at this time.
- HIGH For USERONLY callbacks there will need to be an admin interface change necessary to be able to override this and a method to change a USERONLY callback to ANYONE as well as a callback interface on the vicidial.php page so an agent can look over their callbacks and place them when the time arises.
- HIGH Fix "waiting for ring" bug with manual dial override in vicidial.php.
- HIGH add a permission field to vicidial_users for scheduled_callbacks to allow an agent to dispo a lead as a callback and choose a callback date/time. The default will be to ENABLE scheduled callbacks.
- HIGH add a permission field to vicidial_users for agentonly_callbacks to allow an agent to set a callback as USERONLY as well as call that lead back. The default will be to DISABLE USERONLY callbacks.
- HIGH add a permission field to vicidial_users for agentcall_manual manual dialing within vicidial.php. The default will be to DISABLE manual dialing.
- HIGH add a permission field to vicidial_users to restrict recording in vicidial.php per user. Default would be to ENABLE recording
- HIGH add a permission field to vicidial_users to restrict transfers in vicidial.php per user. Default would be to ENABLE transfers
- HIGH Add auto-hopper-insertion to triggered ANYONE callbacks. This will need to check on campaign and list status before insertion.
- HIGH end-user agent documentation - manual. Probably a free text-only manual and a full color print book available for sale
- HIGH change PHP variable definitions to isset elseif for all php scripts.
- MEDIUM add new method for capping the maximum number of attempts to try leads of a specific status. This would be set up like HotKeys are, per campaign where you would select the status and define the maximum number of attempts for that type of status for that campaign and the VDhopper wouldn't allow that kind of lead into the hopper if it was over the max value of call_count.
- MEDIUM Add a FILTERS section to the vicidial admin screen and a FILTERS feature that would operate a lot like how the lead filters work in the GnuDialer project. It would be a way of defining SQL subsets on leads that the campaign would be dialing. You would create new filters in the ADD NEW FILTER section and a vicidial_campaign can only have one active FILTER at any one time. The Filter modification page would have something like a SQL builder that would let you select a parameter field(like called_count, state, postal_code, etc...) and then a value set, or you could directly edit the SQL it generates. This feature could make it rather easy to mess up dialing for a campaign since it lets managers directly edit the SQL statement that is used to put leads into the hopper. The SQL would only be SELECT based and would not effect the order that the leads are selected in. would require a new table(vicidial_filters) as well as a new field in vicidial_campaigns(filter_id).
create table vicidial_filters (
filter_id VARCHAR(20),
filter_description VARCHAR(50),
filter SQL VARCHAR(255));
- MEDIUM add ability to call CLOSER campaigns "BLEND" or "INBND". would require many script changes from server side to client side, not set in stone yet, but considering it.
- MEDIUM Add internal DNC list of phone numbers that would be scrubbed against by the AST_VDhopper.pl script while loading leads and it would kick them out with a special status as DNCL(Do-Not-Call-Load) so they would be in the system but unable to be dialed. Would need to add a mechanism to add a lead to this list upon agent-dispo of a call as DNC. Would need to create a new admin page to manually add leads to DNC list. Also, would add a parameter to vicidial_campaigns(dnc_list_enabled ENUM('Y','N')) where a campaign could be exempted from the system's DNC list restrictions(would be active by default 'Y').
- MEDIUM add link in astguiclient to login and logout from Asterisk Queues
- MEDIUM add script to get "show queues" information and place in a DB table to be used to see who is in an Asterisk Queue. This would mostly be used to give a LOGGED-IN and LOGGED-OUT display for astguiclient.php and possibly add an Asterisk Queue display tab or popup for astguiclient.php. Info would be updated one to four times a minute so it would not be real-time.
- MEDIUM Create a script to allow vicidial agents to dial into an AGI script that would ask for user/pass and then pass them onto their vicidial.php-defined sessionid.
- MEDIUM add new tab to astguiclient.php script to show status of Asterisk queues
- MEDIUM Convert scripts to DBD::MySQL perl library in place of Net::MySQL. DBD::MySQL is faster because it uses the MySQL client libs on the machine. One problem is that you need the mysqlclientlibs installed on every
Asterisk server and the default installation of only the MySQL client libs will result in having to do a force install of cpan DBD::MySQL(because it tries to test with the local DB). Not to mention all of the code changes that would need to be made. There are also MySQL client licensing issues for certain installation circumstances(Net::MySQL doesn't use mysql client libs so it doesn't have those issues) but I really don't want to get into that discussion.
- MEDIUM add a basic predictive/adaptive algorithm to VICIDIAL to automatically speed-up and slow-down dialing by altering the dial_level at regular intervals. Would need more settings in the vicidial_campaigns table for adaptive like maximum lines per agent, dropped call ratio, dropped call rule to guide the predictive app. Would also need to change dial_level to be a DOUBLE or VARCHAR field to allow for different fractional increments. The admin.php page would have to be altered to ignore auto_dial_level changes when adaptive dialing is activated. The minimum dial_level would be set to '1' for adaptive dialing
auto_dial_level VARCHAR(6), # allow for just about anything. precision decimal too
adaptive_dial_level ENUM('Y','N'), # turns on adaptive script and prevents dial_level admin changes
adaptive_maximum_level VARCHAR(6), # sets highest dial_level possible by adaptive app
adaptive_dropped_percentage SMALLINT(3), # percentage of accaptable dropped calls
adaptive_dropped_rule ENUM('HARD_LIMIT','TAPERED','AVERAGE'), # method for adhearing to % limit
- MEDIUM add some kind of intelligent call-routing to astguiclient so that you can auto-forward calls to another extension from within astguiclient.php instead of using your phone or something like Queues which can mess up other things. This will need it's own table in the DB and probably some extensions.conf entries and an AGI script or two to do the actual call routing.
- MEDIUM add a new script for using SoX to analyze the first 5 seconds of a ring-time recording within 15 minutes of the NA call ending and detecting if it has the SIT tone at the beginning of it so the lead can be taken out of the list as a DC
- MEDIUM add skills-based routing to give the ability for a manager to set an agent at a higher or lower level per campaign or in-group. Defaults to level 0 possible values will be -9 through 9
- MEDIUM add all possible fields to the script auto-populate like in-group for inbound/closer, campaign and others
- MEDIUM add all possible fields to the SCRIPT tab to auto-populate like in-group for inbound/closer, campaign and others
- MEDIUM add ability to specify list_id in lead loader at time of picking fields
@@ -114,24 +147,18 @@
- MEDIUM Run some lab-style load tests on VICIDIAL and show recommended configurations as well as "highest recommended" settings
- MEDIUM add Answering machine detection ability. This may involve some code changes to Asterisk but with the addition of some new subroutines to the dsp.c file it may be possible to develop some equations to detect answering machines without significantly effecting processor load. We figured out that for outbound campaigns it seems that putting a dial_timeout of between 24-30 seconds seems to remove upto 95% of the answering machines from being transferred to agents with no additional delay in answered calls being sent to agenst, which seems much preferrable to many answering machine detection methods out there. Also, adding documentation to show how to setup BackGroundDetect, NVFaxDetect and app_amd for call-answer-screening.
- LOW add the ability to run separate companies on the same VICIDIAL server. This will not be easy. All admin tasks as well asl user tasks and stats will need to have divisions so that nothing is accessible from the other groups. Also, the resources of the system(outbound trunks, hard drive space, other shared elements, etc...) so that one group cannot hog the shared resources of the the server.
- LOW We are also looking at adding a separate operator-specific GUI app to allow for better extension monitoring and transferring options that operators require. the web agc client is close to this goal.
- LOW We are also looking at creating an inbound-agent-specific GUI that would ideally work with Asterisk queues but that is not very likely given the current lack of events being given off by queues(this is much less likely to be built now that VICIDIAL takes inbound calls)
- LOW Making the server install script a customizable with installer prompts
- LOW clean up the GUI LEADLOADER code a bit and fix the running processing totals. Soon to be depricated, because of use of admin web page for loading leads
- LOW Create guidelines and suggestions for deactivating unused modules from Asterisk for astGUIclient users
- LOW Revisit possibility of using something other than CallerIDname to tag a call process, probably a long shot without altering the Asterisk code, but that may be an option.
- ON-HOLD We are also looking at creating an inbound-agent-specific GUI that would ideally work with Asterisk queues but that is not very likely given the current lack of events being given off by queues(this is much less likely to be built now that VICIDIAL takes inbound calls)
- ON-HOLD add a way of checking that there is no more than 1 channel in the meetme room with the agent before another call to that agent. Currently this happens less than 0.1% of the time(mostly on heavily loaded systems), but another check might change that to zero.
- ON-HOLD Localization of each server based on Intl. dial codes and/or country codes. very difficult to do this based on dial-codes, if used in other country, best to not use the adjust_gmt script.
+2 -1
View File
@@ -261,7 +261,7 @@ DIAL OVERRIDE|INVALIDACIÓN DEL MARCADO|DÉPASSEMENT DE CADRAN|VORWAHLKNOPF-ÜBE
SKIP LEAD|SALTAR LEAD|FIL DE SAUT|ZEILENSPRUNG-LEITUNG|CAVO DI SALTO|LIGAÇÃO DA FAIXA CLARA|Παράλειψη Καθοδήγησης||
DIAL LEAD|MARCAR LEAD|FIL DE CADRAN|VORWAHLKNOPF-LEITUNG|CAVO DELLA MANOPOLA|LIGAÇÃO DO SELETOR|ΚΛΗΣΗ ΚΑΘΟΔΗΓΗΣΗΣ||
LEAD PREVIEW|MOSTRAR LEAD|PRÉVISION DE FIL|LEITUNG VORBETRACHTUNG|PREVISIONE DEL CAVO|INSPECÇÃO PRÉVIA DA LIGAÇÃO|ΠΡΟΒΟΛΗ ΚΑΘΟΔΗΓΗΣΗΣ||
STOP CALLING|PARAR LA LLAMADA|CESSEZ D'APPELER|STOPPEN SIE ZU BENENNEN|SMETTA DI DENOMINARE|PARE DE CHAMAR-SE|ΤΕΡΜΑΤΙΣΜΟΣ ΚΛΗΣΗΣ||
PAUSE AGENT DIALING|PARAR LA LLAMADA|CESSEZ D'APPELER|STOPPEN SIE ZU BENENNEN|SMETTA DI DENOMINARE|PARE DE CHAMAR-SE|ΤΕΡΜΑΤΙΣΜΟΣ ΚΛΗΣΗΣ||
DISPOSITION CALL|DISPOSITION CALL|APPEL DE DISPOSITION|EINTEILUNG ANRUF|CHIAMATA DI DISPOSIZIONE|CHAMADA DA DISPOSIÇÃO|Τερματισμός Κλήσης||
session ID| sesión ID| ID de session| Lernabschnitt ID| ID di sessione| sessão ID| Ταυτότητα εργασίας||
to campaign| a la campaña| à la campagne| zur Kampagne| alla campagna| à campanha| στην εκστρατεία||
@@ -274,6 +274,7 @@ CB Comments|Comentarios de los CBES|Commentaires de CB|COLUMBIUM Anmerkungen|Oss
Title|Título|Titre|Titel|Titolo|Título|Τίτλος||
STATUS|ESTADO|STATUT|STATUS|CONDIZIONE|STATUS|ΚΑΤΑΣΤΑΣΗ||
RESET|REINICIAR|REMISE|ZURÜCKSTELLEN|RISISTEMAZIONE|RESTAURAÇÃO|ΕΠΑΝΑΦΟΡΑ||
CLEAR FORM|REINICIAR|REMISE|ZURÜCKSTELLEN|RISISTEMAZIONE|RESTAURAÇÃO|ΕΠΑΝΑΦΟΡΑ||
TYPE=SUBMIT|TYPE=submit|TYPE=submit|TYPE=submit|TYPE=submit|TYPE=submit|TYPE=submit||
SUBMIT|ENVIAR|SOUMETTEZ|SUBMITSie|PRESENTI|SUBMETA|ΥΠΟΒΑΛΕΤΕ||
Incoming|Entrante|Entrant|Ankommend|Ricevuto|Entrante|Εισερχόμενο||
+5 -5
View File
@@ -36,7 +36,7 @@ code country areacode state GMT DST DST_RANGE GEOGRAPHIC DESCRIPTION
1 USA 253 WA -8 Y FSA-LSO
1 USA 254 TX -6 Y FSA-LSO
1 USA 256 AL -6 Y FSA-LSO
1 USA 260 IN -5 N
1 USA 260 IN -5 Y FSA-LSO
1 USA 262 WI -6 Y FSA-LSO
1 AIA 264 -4 N Anguilla
1 USA 267 PA -5 Y FSA-LSO
@@ -67,7 +67,7 @@ code country areacode state GMT DST DST_RANGE GEOGRAPHIC DESCRIPTION
1 USA 314 MO -6 Y FSA-LSO
1 USA 315 NY -5 Y FSA-LSO
1 USA 316 KS -6 Y FSA-LSO
1 USA 317 IN -5 N
1 USA 317 IN -5 Y FSA-LSO
1 USA 318 LA -6 Y FSA-LSO
1 USA 319 IA -6 Y FSA-LSO
1 USA 320 MN -6 Y FSA-LSO
@@ -173,7 +173,7 @@ code country areacode state GMT DST DST_RANGE GEOGRAPHIC DESCRIPTION
1 USA 570 PA -5 Y FSA-LSO
1 USA 571 VA -5 Y FSA-LSO
1 USA 573 MO -6 Y FSA-LSO
1 USA 574 IN -5 N
1 USA 574 IN -5 Y FSA-LSO
1 USA 580 OK -6 Y FSA-LSO
1 USA 585 NY -5 Y FSA-LSO
1 USA 586 MI -5 Y FSA-LSO
@@ -258,7 +258,7 @@ code country areacode state GMT DST DST_RANGE GEOGRAPHIC DESCRIPTION
1 USA 760 CA -8 Y FSA-LSO
1 USA 763 MN -6 Y FSA-LSO
1 USA 764 CA -8 Y FSA-LSO
1 USA 765 IN -5 N
1 USA 765 IN -5 Y FSA-LSO
1 DMA 767 -4 N Dominica
1 USA 770 GA -5 Y FSA-LSO
1 USA 772 FL -5 Y FSA-LSO
@@ -282,7 +282,7 @@ code country areacode state GMT DST DST_RANGE GEOGRAPHIC DESCRIPTION
1 USA 808 HI -10 N
1 DOM 809 -4 Y Dominican Republic
1 USA 810 MI -5 Y FSA-LSO
1 USA 812 IN -5 N
1 USA 812 IN -5 Y FSA-LSO
1 USA 813 FL -5 Y FSA-LSO
1 USA 814 PA -5 Y FSA-LSO
1 USA 815 IL -6 Y FSA-LSO