Added the AUTONEXT hopper_hold_inserts campaign option
Updates for inbound email parser perl script git-svn-id: svn://192.168.202.10@3808 3d104415-ff17-0410-8863-d5cf3c621b8a
This commit is contained in:
+17
-5
@@ -6131,12 +6131,13 @@ if ($SSscript_remove_js > 0)
|
||||
# 240214-2120 - Added STATE_DESCRIPTIONS container type and state_descriptions campaign and in-group settings, change year to 2024
|
||||
# 240221-0331 - Changes for in-group daily limits, small changes for stats_descriptions
|
||||
# 240223-0854 - Added INBOUND_DID In-Group populate option
|
||||
# 240225-0933 - Added the AUTONEXT hopper_hold_inserts campaign option
|
||||
#
|
||||
|
||||
# make sure you have added a user to the vicidial_users MySQL table with at least user_level 9 to access this page the first time
|
||||
|
||||
$admin_version = '2.14-908a';
|
||||
$build = '240223-0854';
|
||||
$admin_version = '2.14-909a';
|
||||
$build = '240225-0933';
|
||||
|
||||
$STARTtime = date("U");
|
||||
$SQLdate = date("Y-m-d H:i:s");
|
||||
@@ -25744,7 +25745,13 @@ if ($ADD==3)
|
||||
|
||||
if ($SShopper_hold_inserts > 0)
|
||||
{
|
||||
echo "<tr bgcolor=#$SSstd_row4_background><td align=right>"._QXZ("HCI Enabled").": </td><td align=left><select size=1 name=hci_enabled><option>0</option><option>1</option><option SELECTED>$hci_enabled</option></select>$NWB#users-hci_enabled$NWE</td></tr>\n";
|
||||
echo "<tr bgcolor=#$SSstd_row4_background><td align=right>"._QXZ("HCI Enabled").": </td><td align=left><select size=1 name=hci_enabled><option>0</option><option>1</option>";
|
||||
if ($SShopper_hold_inserts > 1)
|
||||
{
|
||||
echo "<option>2</option>";
|
||||
}
|
||||
echo "<option SELECTED>$hci_enabled</option></select>$NWB#users-hci_enabled$NWE</td></tr>\n";
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -27305,7 +27312,12 @@ if ($ADD==31)
|
||||
|
||||
if ($SShopper_hold_inserts > 0)
|
||||
{
|
||||
echo "<tr bgcolor=#$SSstd_row3_background><td align=right>"._QXZ("Hopper Hold Inserts").": </td><td align=left><select size=1 name=hopper_hold_inserts><option value='DISABLED'>"._QXZ("DISABLED")."</option><option value='ENABLED'>"._QXZ("ENABLED")."</option><option value='$hopper_hold_inserts' SELECTED>"._QXZ("$hopper_hold_inserts")."</option></select>$NWB#campaigns-hopper_hold_inserts$NWE</td></tr>\n";
|
||||
echo "<tr bgcolor=#$SSstd_row3_background><td align=right>"._QXZ("Hopper Hold Inserts").": </td><td align=left><select size=1 name=hopper_hold_inserts><option value='DISABLED'>"._QXZ("DISABLED")."</option><option value='ENABLED'>"._QXZ("ENABLED")."</option>";
|
||||
if ($SShopper_hold_inserts > 1)
|
||||
{
|
||||
echo "<option value='AUTONEXT'>"._QXZ("AUTONEXT")."</option>";
|
||||
}
|
||||
echo "<option value='$hopper_hold_inserts' SELECTED>"._QXZ("$hopper_hold_inserts")."</option></select>$NWB#campaigns-hopper_hold_inserts$NWE</td></tr>\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -44238,7 +44250,7 @@ if ($ADD==311111111111111)
|
||||
|
||||
echo "<tr bgcolor=#$SSstd_row4_background><td align=right>"._QXZ("Outbound Auto-Dial Active").": </td><td align=left><select size=1 name=outbound_autodial_active><option>1</option><option>0</option><option selected>$outbound_autodial_active</option></select>$NWB#settings-outbound_autodial_active$NWE</td></tr>\n";
|
||||
|
||||
echo "<tr bgcolor=#$SSstd_row4_background><td align=right>"._QXZ("Lead Hopper Hold Inserts Allowed").": </td><td align=left><select size=1 name=hopper_hold_inserts><option>1</option><option>0</option><option selected>$hopper_hold_inserts</option></select>$NWB#settings-hopper_hold_inserts$NWE</td></tr>\n";
|
||||
echo "<tr bgcolor=#$SSstd_row4_background><td align=right>"._QXZ("Lead Hopper Hold Inserts Allowed").": </td><td align=left><select size=1 name=hopper_hold_inserts><option>1</option><option>2</option><option>0</option><option selected>$hopper_hold_inserts</option></select>$NWB#settings-hopper_hold_inserts$NWE</td></tr>\n";
|
||||
|
||||
echo "<tr bgcolor=#$SSstd_row4_background><td align=right>"._QXZ("Shared Agent Campaign Dialing").": </td><td align=left><select size=1 name=allow_shared_dial><option>5</option><option>4</option><option>3</option><option>2</option><option>1</option><option>0</option><option selected>$allow_shared_dial</option></select>$NWB#settings-allow_shared_dial$NWE</td></tr>\n";
|
||||
|
||||
|
||||
+196
-58
@@ -1,20 +1,23 @@
|
||||
<?php
|
||||
# hci_screen.php
|
||||
#
|
||||
# Copyright (C) 2023 Matt Florell <vicidial@gmail.com> LICENSE: AGPLv2
|
||||
# Copyright (C) 2024 Matt Florell <vicidial@gmail.com> LICENSE: AGPLv2
|
||||
#
|
||||
# This script is designed to allow agents to work with the hopper_hold_inserts features and allow leads in the hopper to be changed from RHOLD to READY status so they can be called.
|
||||
#
|
||||
# changes:
|
||||
# 231119-1508 - First build
|
||||
# 240225-1000 - Added AUTONEXT hopper_hold_inserts campaign option
|
||||
#
|
||||
|
||||
$startMS = microtime();
|
||||
|
||||
$hci_version = '2.14-1h';
|
||||
$build = '231119-1508';
|
||||
$hci_version = '2.14-2h';
|
||||
$build = '240225-1000';
|
||||
$php_script='hci_screen.php';
|
||||
$zi=0;
|
||||
$default_batch_size=40;
|
||||
$refresh_sec=4000;
|
||||
|
||||
require("dbconnect_mysqli.php");
|
||||
require("functions.php");
|
||||
@@ -29,6 +32,8 @@ if (isset($_GET["phone_number"])) {$phone_number=$_GET["phone_number"];}
|
||||
elseif (isset($_POST["phone_number"])) {$phone_number=$_POST["phone_number"];}
|
||||
if (isset($_GET["campaign_id"])) {$campaign_id=$_GET["campaign_id"];}
|
||||
elseif (isset($_POST["campaign_id"])) {$campaign_id=$_POST["campaign_id"];}
|
||||
if (isset($_GET["batch_size"])) {$batch_size=$_GET["batch_size"];}
|
||||
elseif (isset($_POST["batch_size"])) {$batch_size=$_POST["batch_size"];}
|
||||
if (isset($_GET["stage"])) {$stage=$_GET["stage"];}
|
||||
elseif (isset($_POST["stage"])) {$stage=$_POST["stage"];}
|
||||
if (isset($_GET["DB"])) {$DB=$_GET["DB"];}
|
||||
@@ -66,6 +71,7 @@ if ($SSallow_web_debug < 1) {$DB=0;}
|
||||
###########################################
|
||||
|
||||
$phone_number = preg_replace('/[^0-9]/','',$phone_number);
|
||||
$batch_size = preg_replace('/[^0-9]/','',$batch_size);
|
||||
$stage = preg_replace('/[^-_0-9a-zA-Z]/','',$stage);
|
||||
|
||||
if ($non_latin < 1)
|
||||
@@ -87,6 +93,8 @@ else
|
||||
$SUBMIT = preg_replace('/[^- 0-9\p{L}]/u','',$SUBMIT);
|
||||
}
|
||||
|
||||
if ( ($batch_size < 10) or (strlen($batch_size) < 2) )
|
||||
{$batch_size = $default_batch_size;}
|
||||
|
||||
$STARTtime = date("U");
|
||||
$defaultappointment = date("Y-m-d");
|
||||
@@ -300,7 +308,7 @@ if ( ($stage == 'LOGOUT') and (strlen($campaign_id) > 0) )
|
||||
if ( ($stage == 'chosen_campaign') and (strlen($campaign_id) > 0) )
|
||||
{
|
||||
$valid_campaign=0;
|
||||
$stmt="SELECT count(*) from vicidial_campaigns where campaign_id='$campaign_id' and active='Y' and hopper_hold_inserts='ENABLED' $LOGallowed_campaignsSQL;";
|
||||
$stmt="SELECT count(*) from vicidial_campaigns where campaign_id='$campaign_id' and active='Y' and hopper_hold_inserts IN('ENABLED','AUTONEXT') $LOGallowed_campaignsSQL;";
|
||||
$rslt=mysql_to_mysqli($stmt, $link);
|
||||
$camps_to_parse = mysqli_num_rows($rslt);
|
||||
if ($camps_to_parse > 0)
|
||||
@@ -310,6 +318,15 @@ if ( ($stage == 'chosen_campaign') and (strlen($campaign_id) > 0) )
|
||||
}
|
||||
if ($valid_campaign > 0)
|
||||
{
|
||||
$autonext_campaign=0;
|
||||
$stmt="SELECT count(*) from vicidial_campaigns where campaign_id='$campaign_id' and hopper_hold_inserts='AUTONEXT';";
|
||||
$rslt=mysql_to_mysqli($stmt, $link);
|
||||
$campANs_to_parse = mysqli_num_rows($rslt);
|
||||
if ($campANs_to_parse > 0)
|
||||
{
|
||||
$rowx=mysqli_fetch_row($rslt);
|
||||
$autonext_campaign = $rowx[0];
|
||||
}
|
||||
$stmt="INSERT INTO vicidial_hci_live_agents SET user='$PHP_AUTH_USER',campaign_id='$campaign_id',user_ip='$ip',login_time=NOW(),last_call_time=NOW(),last_update_time=NOW(),status='LOGIN',lead_id=0,phone_number='',random_id=0;";
|
||||
$rslt=mysql_to_mysqli($stmt, $link);
|
||||
|
||||
@@ -327,7 +344,7 @@ if ( ($stage == 'chosen_campaign') and (strlen($campaign_id) > 0) )
|
||||
}
|
||||
if ($hopper_hold_count > 0)
|
||||
{
|
||||
$stmt="UPDATE vicidial_hopper SET user='$PHP_AUTH_USER',status='RQUEUE' WHERE campaign_id='$campaign_id' and status='RHOLD' and user='' order by priority desc,hopper_id limit 40;";
|
||||
$stmt="UPDATE vicidial_hopper SET user='$PHP_AUTH_USER',status='RQUEUE' WHERE campaign_id='$campaign_id' and status='RHOLD' and user='' order by priority desc,hopper_id limit $batch_size;";
|
||||
$rslt=mysql_to_mysqli($stmt, $link);
|
||||
$vh_affected_rows = mysqli_affected_rows($link);
|
||||
|
||||
@@ -364,7 +381,7 @@ if ( ($stage == 'chosen_campaign') and (strlen($campaign_id) > 0) )
|
||||
}
|
||||
}
|
||||
|
||||
$notes = "$campaign_id $ip $vh_affected_rows $vhr_to_parse $vhr_ct $vhr_insert";
|
||||
$notes = "$campaign_id $ip $vh_affected_rows $vhr_to_parse $vhr_ct $vhr_insert $autonext_campaign";
|
||||
vicidial_ajax_log($NOW_TIME,$startMS,$link,$stage,$php_script,$PHP_AUTH_USER,$notes,$lead_id,$session_name,$stmt);
|
||||
}
|
||||
}
|
||||
@@ -379,7 +396,7 @@ if ( ($stage == 'chosen_campaign') and (strlen($campaign_id) > 0) )
|
||||
if ( ($stage == 'switch_campaign') and (strlen($campaign_id) > 0) )
|
||||
{
|
||||
$valid_campaign=0;
|
||||
$stmt="SELECT count(*) from vicidial_campaigns where campaign_id='$campaign_id' and active='Y' and hopper_hold_inserts='ENABLED' $LOGallowed_campaignsSQL;";
|
||||
$stmt="SELECT count(*) from vicidial_campaigns where campaign_id='$campaign_id' and active='Y' and hopper_hold_inserts IN('ENABLED','AUTONEXT') $LOGallowed_campaignsSQL;";
|
||||
$rslt=mysql_to_mysqli($stmt, $link);
|
||||
$camps_to_parse = mysqli_num_rows($rslt);
|
||||
if ($camps_to_parse > 0)
|
||||
@@ -389,6 +406,15 @@ if ( ($stage == 'switch_campaign') and (strlen($campaign_id) > 0) )
|
||||
}
|
||||
if ($valid_campaign > 0)
|
||||
{
|
||||
$autonext_campaign=0;
|
||||
$stmt="SELECT count(*) from vicidial_campaigns where campaign_id='$campaign_id' and hopper_hold_inserts='AUTONEXT';";
|
||||
$rslt=mysql_to_mysqli($stmt, $link);
|
||||
$campANs_to_parse = mysqli_num_rows($rslt);
|
||||
if ($campANs_to_parse > 0)
|
||||
{
|
||||
$rowx=mysqli_fetch_row($rslt);
|
||||
$autonext_campaign = $rowx[0];
|
||||
}
|
||||
$stmt="SELECT campaign_id,status from vicidial_hci_live_agents where user='$PHP_AUTH_USER';";
|
||||
$rslt=mysql_to_mysqli($stmt, $link);
|
||||
$users_to_parse = mysqli_num_rows($rslt);
|
||||
@@ -443,7 +469,7 @@ if ( ($stage == 'switch_campaign') and (strlen($campaign_id) > 0) )
|
||||
}
|
||||
if ($hopper_hold_count > 0)
|
||||
{
|
||||
$stmt="UPDATE vicidial_hopper SET user='$PHP_AUTH_USER',status='RQUEUE' WHERE campaign_id='$campaign_id' and status='RHOLD' and user='' order by priority desc,hopper_id limit 40;";
|
||||
$stmt="UPDATE vicidial_hopper SET user='$PHP_AUTH_USER',status='RQUEUE' WHERE campaign_id='$campaign_id' and status='RHOLD' and user='' order by priority desc,hopper_id limit $batch_size;";
|
||||
$rslt=mysql_to_mysqli($stmt, $link);
|
||||
$vh_affected_rows = mysqli_affected_rows($link);
|
||||
|
||||
@@ -480,7 +506,7 @@ if ( ($stage == 'switch_campaign') and (strlen($campaign_id) > 0) )
|
||||
}
|
||||
}
|
||||
|
||||
$notes = "$campaign_id $old_campaign_id $VHLAstatus $vh_clear $vhr_clear $vh_affected_rows $vhr_insert";
|
||||
$notes = "$campaign_id $old_campaign_id $VHLAstatus $vh_clear $vhr_clear $vh_affected_rows $vhr_insert $autonext_campaign";
|
||||
vicidial_ajax_log($NOW_TIME,$startMS,$link,$stage,$php_script,$PHP_AUTH_USER,$notes,$lead_id,$session_name,$stmt);
|
||||
}
|
||||
else
|
||||
@@ -689,9 +715,9 @@ if ($stage == 'lead_display')
|
||||
$rowx=mysqli_fetch_row($rslt);
|
||||
$reserved_ct = $rowx[0];
|
||||
}
|
||||
if ($reserved_ct < 40)
|
||||
if ($reserved_ct < $batch_size)
|
||||
{
|
||||
$reserve_more_hopper_leads = (40 - $reserved_ct);
|
||||
$reserve_more_hopper_leads = ($batch_size - $reserved_ct);
|
||||
|
||||
if ($reserve_more_hopper_leads > 0)
|
||||
{
|
||||
@@ -780,6 +806,7 @@ if ($stage == 'lead_display')
|
||||
}
|
||||
else
|
||||
{
|
||||
$lead_phone_list='';
|
||||
$stmt="SELECT lead_id,phone_number from vicidial_hci_reserve WHERE campaign_id='$campaign_id' and user='$PHP_AUTH_USER' order by reserve_date,lead_id;";
|
||||
$rslt=mysql_to_mysqli($stmt, $link);
|
||||
$vhr_to_parse = mysqli_num_rows($rslt);
|
||||
@@ -791,9 +818,11 @@ if ($stage == 'lead_display')
|
||||
$rowx=mysqli_fetch_row($rslt);
|
||||
$Elead_id[$vhr_ct] = $rowx[0];
|
||||
$Ephone[$vhr_ct] = $rowx[1];
|
||||
$lead_phone_list .= $vhr_ct."_".$rowx[0]."_".$rowx[1]."|";
|
||||
$vhr_ct++;
|
||||
}
|
||||
|
||||
echo "<!-- LEADPHONELIST: $lead_phone_list -->\n";
|
||||
echo "<FONT FACE=\"ARIAL,HELVETICA\" COLOR=BLACK SIZE=3>"._QXZ("Call Confirmation").": </FONT><BR><table width=530><tr><td>";
|
||||
|
||||
$row_ct=0;
|
||||
@@ -898,7 +927,7 @@ $camp_panel_code='<table cellspacing=2 cellpadding=2>';
|
||||
$camp_form_code = "<select size=\"1\" name=\"campaign_id\" id=\"campaign_id\">\n";
|
||||
$camp_form_code .= "<option value=\"\">-- "._QXZ("Select a Campaign")." --</option>\n";
|
||||
|
||||
$stmt="SELECT campaign_id,campaign_name from vicidial_campaigns where active='Y' and hopper_hold_inserts='ENABLED' $LOGallowed_campaignsSQL order by campaign_id;";
|
||||
$stmt="SELECT campaign_id,campaign_name,hopper_hold_inserts from vicidial_campaigns where active='Y' and hopper_hold_inserts IN('ENABLED','AUTONEXT') $LOGallowed_campaignsSQL order by campaign_id;";
|
||||
$rslt=mysql_to_mysqli($stmt, $link);
|
||||
$camps_to_print = mysqli_num_rows($rslt);
|
||||
|
||||
@@ -968,6 +997,28 @@ if ($users_to_parse < 1)
|
||||
|
||||
exit;
|
||||
}
|
||||
else
|
||||
{
|
||||
# See if campaign is set to AUTONEXT, and confirm system settings and user setting allow for that
|
||||
$autonext_campaign=0;
|
||||
$stmt="SELECT count(*) from vicidial_campaigns where campaign_id='$campaign_id' and hopper_hold_inserts='AUTONEXT';";
|
||||
$rslt=mysql_to_mysqli($stmt, $link);
|
||||
$campANs_to_parse = mysqli_num_rows($rslt);
|
||||
if ($campANs_to_parse > 0)
|
||||
{
|
||||
$rowx=mysqli_fetch_row($rslt);
|
||||
$autonext_campaign = $rowx[0];
|
||||
}
|
||||
if ( ($SShopper_hold_inserts < 2) and ($autonext_campaign > 0) )
|
||||
{$autonext_campaign=0;}
|
||||
if ( ($hci_enabled < 2) and ($autonext_campaign > 0) )
|
||||
{$autonext_campaign=0;}
|
||||
if ($autonext_campaign > 0)
|
||||
{
|
||||
$batch_size = ($batch_size * 3);
|
||||
$refresh_sec = ($refresh_sec / 2);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
?>
|
||||
@@ -984,6 +1035,14 @@ var confirming_call=0;
|
||||
var confirming_call_lead_id=0;
|
||||
var confirming_call_phone='';
|
||||
var confirmed_ct_since_refresh=0;
|
||||
var autonext_campaign=<?php echo $autonext_campaign ?>;
|
||||
var autonext_launch=<?php echo $autonext_campaign ?>;
|
||||
var batch_size=<?php echo $batch_size ?>;
|
||||
var refresh_sec=<?php echo $refresh_sec ?>;
|
||||
var lead_phone_list='';
|
||||
var next_lead='';
|
||||
var next_phone='';
|
||||
var next_lead_string='';
|
||||
|
||||
function StartRefresh()
|
||||
{
|
||||
@@ -1010,7 +1069,7 @@ function RefreshScreen()
|
||||
// trigger refresh of hopper RHOLD leads available
|
||||
LeadsRefresh();
|
||||
|
||||
setTimeout("RefreshScreen()",4000);
|
||||
setTimeout("RefreshScreen()", refresh_sec);
|
||||
}
|
||||
|
||||
// function to gather dashboard content
|
||||
@@ -1081,7 +1140,7 @@ function LeadsRefresh()
|
||||
}
|
||||
if (xmlhttp)
|
||||
{
|
||||
RTupdate_query = "stage=lead_display";
|
||||
RTupdate_query = "stage=lead_display&batch_size=" + batch_size;
|
||||
xmlhttp.open('POST', 'hci_screen.php');
|
||||
xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
|
||||
xmlhttp.send(RTupdate_query);
|
||||
@@ -1089,9 +1148,36 @@ function LeadsRefresh()
|
||||
{
|
||||
if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
|
||||
{
|
||||
// parse first LEADPHONELIST line to get a list of all leads received: "0_1234_9998887766|1_1235_9998887767|..."
|
||||
LPLresponse = xmlhttp.responseText;
|
||||
var LPLresponse_array=LPLresponse.split("\n");
|
||||
var LEADPHONELIST = LPLresponse_array[0];
|
||||
var LPLmatch = new RegExp("LEADPHONELIST","g");
|
||||
if (LEADPHONELIST.match(LPLmatch))
|
||||
{
|
||||
var LPLresponse_array=LEADPHONELIST.split("LEADPHONELIST: ");
|
||||
lead_phone_list = LPLresponse_array[1];
|
||||
// alert(lead_phone_list);
|
||||
|
||||
var LPLnext_array=lead_phone_list.split("|");
|
||||
current_lead_string = LPLnext_array[0];
|
||||
var next_lead_array=current_lead_string.split("_");
|
||||
next_lead = next_lead_array[1];
|
||||
next_phone = next_lead_array[2];
|
||||
// alert(next_lead_array[0] + " " + next_lead + " " + next_phone);
|
||||
}
|
||||
document.getElementById("LeadsContent").innerHTML = xmlhttp.responseText;
|
||||
confirmed_ct_since_refresh=0;
|
||||
// alert(xmlhttp.responseText);
|
||||
if (autonext_launch > 0)
|
||||
{
|
||||
autonext_launch=0;
|
||||
var temp_next_phone = next_phone;
|
||||
let match = next_phone.match(/^(\d{3})(\d{3})(\d{4})$/);
|
||||
if (match)
|
||||
{temp_next_phone = '(' + match[1] + ') ' + match[2] + '-' + match[3];}
|
||||
call_confirmation_button(next_lead,temp_next_phone);
|
||||
}
|
||||
}
|
||||
}
|
||||
delete xmlhttp;
|
||||
@@ -1139,6 +1225,35 @@ function LeadConfirmed()
|
||||
confirming_call=0;
|
||||
confirming_call_lead_id=0;
|
||||
confirming_call_phone='';
|
||||
|
||||
var temp_LPL_current = "" + current_lead_string + "\\\|";
|
||||
var LPLcurrent = new RegExp(temp_LPL_current,"g");
|
||||
// alert(temp_LPL_current + " " + LPLcurrent);
|
||||
lead_phone_list = lead_phone_list.replace(LPLcurrent, '');
|
||||
var LPLnext_array=lead_phone_list.split("|");
|
||||
current_lead_string = LPLnext_array[0];
|
||||
var next_lead_array=current_lead_string.split("_");
|
||||
next_lead = next_lead_array[1];
|
||||
next_phone = next_lead_array[2];
|
||||
|
||||
if (autonext_campaign > 0)
|
||||
{
|
||||
var temp_next_phone = next_phone;
|
||||
let match = next_phone.match(/^(\d{3})(\d{3})(\d{4})$/);
|
||||
if (match)
|
||||
{temp_next_phone = '(' + match[1] + ') ' + match[2] + '-' + match[3];}
|
||||
// alert(next_lead + " " + temp_next_phone + " " + next_phone);
|
||||
|
||||
if (document.getElementById('button_' + next_lead))
|
||||
{
|
||||
call_confirmation_button(next_lead,temp_next_phone);
|
||||
}
|
||||
else
|
||||
{
|
||||
autonext_launch=1;
|
||||
LeadsRefresh();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
delete xmlhttp;
|
||||
@@ -1147,58 +1262,81 @@ function LeadConfirmed()
|
||||
}
|
||||
|
||||
|
||||
// switch campaign for logged-in agent
|
||||
function SwitchCampaign(temp_campaign)
|
||||
{
|
||||
window.location= hciPAGE + "?stage=switch_campaign&campaign_id=" + temp_campaign;
|
||||
}
|
||||
// switch campaign for logged-in agent
|
||||
function SwitchCampaign(temp_campaign)
|
||||
{
|
||||
window.location= hciPAGE + "?stage=switch_campaign&campaign_id=" + temp_campaign;
|
||||
}
|
||||
|
||||
function call_confirmation_button(temp_button_lead,temp_id)
|
||||
{
|
||||
confirming_call=1;
|
||||
confirming_call_lead_id = temp_button_lead;
|
||||
confirming_call_phone = temp_id;
|
||||
document.getElementById('button_' + temp_button_lead).style.backgroundColor = '#FFCC99';
|
||||
document.getElementById('VerifyBoxContent').innerHTML="<?php echo _QXZ("confirm call to") ?>: " + temp_id;
|
||||
showDiv('VerifyBox');
|
||||
document.getElementById('verify_button').focus();
|
||||
}
|
||||
function call_confirmation_button(temp_button_lead,temp_id)
|
||||
{
|
||||
autonext_launch=0;
|
||||
confirming_call=1;
|
||||
confirming_call_lead_id = temp_button_lead;
|
||||
confirming_call_phone = temp_id;
|
||||
document.getElementById('button_' + temp_button_lead).style.backgroundColor = '#FFCC99';
|
||||
var temp_counter_debug='';
|
||||
// var temp_counter_debug = "<br>" + confirmed_ct_since_refresh + " " + loaded_sec;
|
||||
document.getElementById('VerifyBoxContent').innerHTML="<?php echo _QXZ("confirm call to") ?>: " + temp_id + temp_counter_debug;
|
||||
showDiv('VerifyBox');
|
||||
document.getElementById('verify_button').focus();
|
||||
}
|
||||
|
||||
function call_confirmation_verify()
|
||||
{
|
||||
// erase button span
|
||||
document.getElementById('button_span_' + confirming_call_lead_id).innerHTML="";
|
||||
document.getElementById('VerifyBox').style.visibility = 'hidden';
|
||||
confirmed_ct_since_refresh++;
|
||||
LeadConfirmed();
|
||||
}
|
||||
function call_confirmation_verify()
|
||||
{
|
||||
// erase button span
|
||||
document.getElementById('button_span_' + confirming_call_lead_id).innerHTML="";
|
||||
document.getElementById('VerifyBox').style.visibility = 'hidden';
|
||||
confirmed_ct_since_refresh++;
|
||||
LeadConfirmed();
|
||||
}
|
||||
|
||||
function call_confirmation_cancel()
|
||||
{
|
||||
document.getElementById('button_' + confirming_call_lead_id).style.backgroundColor = '#CCCCCC';
|
||||
confirming_call=0;
|
||||
confirming_call_lead_id=0;
|
||||
confirming_call_phone='';
|
||||
document.getElementById('VerifyBox').style.visibility = 'hidden';
|
||||
}
|
||||
function call_confirmation_cancel()
|
||||
{
|
||||
document.getElementById('button_' + confirming_call_lead_id).style.backgroundColor = '#CCCCCC';
|
||||
confirming_call=0;
|
||||
confirming_call_lead_id=0;
|
||||
confirming_call_phone='';
|
||||
document.getElementById('VerifyBox').style.visibility = 'hidden';
|
||||
|
||||
// functions to hide and show different DIVs
|
||||
function showDiv(divvar)
|
||||
var temp_LPL_current = "" + current_lead_string + "\\\|";
|
||||
var LPLcurrent = new RegExp(temp_LPL_current,"g");
|
||||
// alert(temp_LPL_current + " " + LPLcurrent);
|
||||
lead_phone_list = lead_phone_list.replace(LPLcurrent, '');
|
||||
var LPLnext_array=lead_phone_list.split("|");
|
||||
current_lead_string = LPLnext_array[0];
|
||||
var next_lead_array=current_lead_string.split("_");
|
||||
next_lead = next_lead_array[1];
|
||||
next_phone = next_lead_array[2];
|
||||
|
||||
if (autonext_campaign > 0)
|
||||
{
|
||||
if (document.getElementById(divvar))
|
||||
{
|
||||
divref = document.getElementById(divvar).style;
|
||||
divref.visibility = 'visible';
|
||||
}
|
||||
var temp_next_phone = next_phone;
|
||||
let match = next_phone.match(/^(\d{3})(\d{3})(\d{4})$/);
|
||||
if (match)
|
||||
{temp_next_phone = '(' + match[1] + ') ' + match[2] + '-' + match[3];}
|
||||
// alert(next_lead + " " + temp_next_phone + " " + next_phone);
|
||||
call_confirmation_button(next_lead,temp_next_phone);
|
||||
}
|
||||
function hideDiv(divvar)
|
||||
}
|
||||
|
||||
// functions to hide and show different DIVs
|
||||
function showDiv(divvar)
|
||||
{
|
||||
if (document.getElementById(divvar))
|
||||
{
|
||||
if (document.getElementById(divvar))
|
||||
{
|
||||
divref = document.getElementById(divvar).style;
|
||||
divref.visibility = 'hidden';
|
||||
}
|
||||
divref = document.getElementById(divvar).style;
|
||||
divref.visibility = 'visible';
|
||||
}
|
||||
}
|
||||
function hideDiv(divvar)
|
||||
{
|
||||
if (document.getElementById(divvar))
|
||||
{
|
||||
divref = document.getElementById(divvar).style;
|
||||
divref.visibility = 'hidden';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# version: 20240223085101
|
||||
# version: 20240225093101
|
||||
users-user User ID <QXZ>This field is where you put the users ID number, can be up to 20 digits in length, Must be at least 2 characters in length. We strongly recommend not reusing user accounts for different users, for reporting accuracy. To disable a user account, set the Active option to -N-.</QXZ>
|
||||
users-pass Password <QXZ>This field is where you put the users password. Must be at least 2 characters in length, unless the User Password Minimum Length system setting is enabled, which will require a longer password. Only letters and numbers are allowed in user passwords. A medium strength user password will be at least 10 characters in length, and a strong user password will be at least 20 characters in length and have letters as well as at least one number. It is recommended that you use a longer password if possible, stringing together several unrelated words with no spaces, and a number somewhere in the string. The maximum size of a password is 100 characters.</QXZ>
|
||||
users-force_change_password Force Change Password <QXZ>If this option is set to Y then the user will be prompted to change their password the next time they log in to the administration webpage or the agent screen. Default is N.</QXZ>
|
||||
@@ -93,7 +93,7 @@ users-qc_user_level QC User Level <QXZ>This setting defines what the agent Quali
|
||||
users-qc_pass QC Record Pass <QXZ>This option allows the agent to specify that a record has passed the first round of QC after reviewing the record.</QXZ>
|
||||
users-qc_finish QC Record Finish <QXZ>This option allows the agent to specify that a record has finished the second round of QC after reviewing the passed record.</QXZ>
|
||||
users-qc_commit QC Record Commit <QXZ>This option allows the agent to specify that a record has been committed in QC. It can no longer be modified by anyone.</QXZ>
|
||||
users-hci_enabled HCI Enabled <QXZ>This option allows the user to have access to the HCI screen, which is accessible from the Welcome page, if Hopper Hold Inserts are allowed on your system.</QXZ>
|
||||
users-hci_enabled HCI Enabled <QXZ>This option allows the user to have access to the HCI screen, which is accessible from the Welcome page, if Hopper Hold Inserts are allowed on your system. The -2- option will allow this user to also use the AUTONEXT HCI Screen option, if it is enabled on the campaign and system. Default is disabled.</QXZ>
|
||||
users-add_timeclock_log Add Timeclock Log Record <QXZ>This option allows the user to add records to the timeclock log.</QXZ>
|
||||
users-modify_timeclock_log Modify Timeclock Log Record <QXZ>This option allows the user to modify records in the timeclock log.</QXZ>
|
||||
users-delete_timeclock_log Delete Timeclock Log Record <QXZ>This option allows the user to delete records in the timeclock log.</QXZ>
|
||||
@@ -166,7 +166,7 @@ campaigns-call_limit_24hour_override 24-Hour Called Count Limit Override <QXZ>If
|
||||
campaigns-hopper_drop_run_trigger Hopper Drop-Run Trigger <QXZ>This setting, if activated, will ignore all hopper loading criteria for a single hopper run for this campaign and it will only load the DROP status leads from the active lists for the campaign into the hopper at the highest hopper priority, and once this single hopper run has happened, this setting will reset to N for this campaign and the hopper loading will go back to normal for the next minute when it runs. This process will also update any DROPs already in the hopper to the highest hopper priority if they are not already there. If the -All Drops- checkbox is checked, then any status with -DROP- in the status or status name will be selected, including all system statuses and campaign statuses whether they are for outbound or inbound calls. WARNING, when this runs it will not check to see if the lists have been reset, so you may be calling back DROP leads that were recently called. However, if the Drop Lockout Time has been enabled, that setting will be honored. Default is N, unselected, for inactive.</QXZ>
|
||||
campaigns-drop_lockout_time Drop Lockout Time <QXZ>This is a number of hours that DROP abandon calls will be prevented from being dialed, to disable set to 0. This setting is very useful in countries like the UK where there are regulations preventing the attempted calling of customers within 72 hours of an Abandon, or DROP. Default is 0.</QXZ>
|
||||
campaigns-force_reset_hopper Force Reset of Hopper <QXZ>This allows you to wipe out the hopper contents upon form submission. It should be filled again when the VDhopper script runs.</QXZ>
|
||||
campaigns-hopper_hold_inserts Hopper Hold Inserts <QXZ>If enabled, this will insert leads into the hopper as a RHOLD status, so they can be activated by an outside process or utility. Default is DISABLED.</QXZ>
|
||||
campaigns-hopper_hold_inserts Hopper Hold Inserts <QXZ>If enabled, this will insert leads into the hopper as a RHOLD status, so they can be activated by an outside process or utility. The AUTONEXT option is also an enabled option, but in the HCI Screen, the user will only have to click once for each call instead of twice. Default is DISABLED.</QXZ>
|
||||
campaigns-dial_method Dial Method <QXZ>This field is the way to define how dialing is to take place. If MANUAL then the auto_dial_level will be locked at 0 unless Dial Method is changed. If RATIO then the normal dialing a number of lines for Active agents. ADAPT_HARD_LIMIT will dial predictively up to the dropped percentage and then not allow aggressive dialing once the drop limit is reached until the percentage goes down again. ADAPT_TAPERED allows for running over the dropped percentage in the beginning of the shift -as defined by Latest Server Time set for campaign- and gets more strict as the shift goes on, for example, if there are 10 hours or more left in the shift, the TAPERED feature will not affect the adaptive dial level at all, as the number of hours left in the shift drops below 10 hours and gets closer to 0, the dial level will be dropped closer and closer to 1.0 as time goes on. ADAPT_AVERAGE tries to maintain an average or the dropped percentage not imposing hard limits as aggressively as the other two methods. You cannot change the Auto Dial Level if you are in any of the ADAPT dial methods. Only the Dialer can change the dial level when in predictive dialing mode. INBOUND_MAN allows the agent to place manual dial calls from a campaign list while being able to take inbound calls between manual dial calls.</QXZ>
|
||||
campaigns-auto_dial_level Auto Dial Level <QXZ>This is where you set how many lines the system should use per active agent. zero 0 means auto dialing is off and the agents will click to dial each number. Otherwise the system will keep dialing lines equal to active agents multiplied by the dial level to arrive at how many lines this campaign on each server should allow. The ADAPT OVERRIDE checkbox allows you to force a new dial level even though the dial method is in an ADAPT mode. This is useful if there is a dramatic shift in the quality of leads and you want to drastically change the dial_level manually.</QXZ>
|
||||
campaigns-dial_level_threshold Auto Dial Level Threshold <QXZ>This setting only works with an ADAPT or RATIO Dial Method, and it must be set to something other than DISABLED and the number of agents setting must be above 0. This feature allows you to set a minimum number agents that predictive algorithm will work at. If the number of agents falls below the number that you have set, then the dial level will go to 1.0 until more agents log in or go into the selected state. LOGGED-IN_AGENTS will count all agents logged into the campaign, NON-PAUSED_AGENTS will only count agents that are waiting or talking, and WAITING_AGENTS will only count agents that are waiting for a call. Default is DISABLED.</QXZ>
|
||||
@@ -1140,7 +1140,7 @@ settings-agent_script Agent Screen Script <QXZ>This is the PHP script page of th
|
||||
settings-active_voicemail_server Active Voicemail Server <QXZ>In multi-server systems, this is the server that will handle all voicemail boxes. This server is also where the dial-in generated prompts will be uploaded from, the 8168 recordings. It is important that this server is both Active and an Active Asterisk server.</QXZ>
|
||||
settings-allow_voicemail_greeting Allow Voicemail Greeting Chooser <QXZ>If this setting is enabled it will allow you to choose an audio file from the audio store to be played as the voicemail greeting to a specific voicemail box. Default is 0 for disabled.</QXZ>
|
||||
settings-outbound_autodial_active Outbound Auto-Dial Active <QXZ>This option allows you to enable or disable outbound auto-dialing within the system, setting this field to 0 will remove the LISTS and FILTERS sections and many fields from the Campaign Modification screens. Manual entry dialing will still be allowable from within the agent screen, but no list dialing will be possible. Default is 1 for active.</QXZ>
|
||||
settings-hopper_hold_inserts Lead Hopper Hold Inserts Allowed <QXZ>If enabled, this setting will allow campaigns to be set to insert leads into the hopper as a RHOLD status so that they can be activated by a separate process. Default is 0 for disabled.</QXZ>
|
||||
settings-hopper_hold_inserts Lead Hopper Hold Inserts Allowed <QXZ>If enabled, this setting will allow campaigns to be set to insert leads into the hopper as a RHOLD status so that they can be activated by a separate process. The -2- option will also allow the AUTONEXT campaign setting. Default is 0 for disabled.</QXZ>
|
||||
settings-allow_shared_dial Shared Agent Campaign Dialing <QXZ>This option will allow you to set SHARED campaign Dial Methods in order to share agents across multiple outbound campaigns. For more details on how to set this up properly, read the AGENT_MULTI-CAMPAIGN_DIALING.txt document. Default is 0 for disabled.</QXZ>
|
||||
settings-agent_search_method Agent Search Method Override <QXZ>This option will allow you to override the agent search method that is defined in the dialplan on your dialers on a per in-group and-or per campaign basis. Setting this to -1- will enable the override for both in-groups and campaigns. -2- will enable only for in-groups. -3- will enable only for campaigns. Default is 0 for disabled. WARNING, we do not recommend enabling this setting, it can lead to greatly increased dropped calls if improperly used.</QXZ>
|
||||
settings-ofcom_uk_drop_calc UK OFCOM Drop Calculation <QXZ>This option allows you to enable the new UK OFCOM Drop calculation formula for individual campaigns. As of December 2015, OFCOM in the UK changed their method for calculating the drop,or abandon, percentage for an outbound dialing campaign. The new formula includes an estimate of the number of drops that were answering machines. They do this by using the agent-answered percentage of answering machines and subtracting that percentage from the number of drops. Then that new drop number is divided by the total agent-answered human-answered calls PLUS the number of drops. This differs in several ways from the way it had been done, as well as the way the drop percentage has been calculated in the USA and Canada. This new UK drop calculation method can be activated as a system setting AND a campaign option. Both must be enabled for the campaign to use the new method. In order for agent-statused answering machines to be calculated properly, we have added an answering machine status flag that is used to gather those statuses. Default is 0 for inactive.</QXZ>
|
||||
|
||||
@@ -85,6 +85,22 @@ redalert {font-size: 18px; font-weight:bold; font-family: Arial, Sans-Serif; col
|
||||
.alt_row3 {background-color: <?php echo $SSalt_row3_background; ?>}
|
||||
.std_btn {background-color: <?php echo $SSbutton_background; ?>;}
|
||||
|
||||
/* Special effects */
|
||||
.blink {
|
||||
animation: blinker 1.2s linear infinite;
|
||||
color: #900;
|
||||
font-family: Arial,Helvetica, sans-serif;
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
margin-bottom: 14px;
|
||||
}
|
||||
|
||||
@keyframes blinker {
|
||||
50% {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.border2px {border:solid 2px #<?php echo $SSmenu_background; ?>}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user