diff --git a/agc_2-X/trunk/extras/MySQL_AST_CREATE_tables.sql b/agc_2-X/trunk/extras/MySQL_AST_CREATE_tables.sql
index d34f26a9..bf1a7165 100644
--- a/agc_2-X/trunk/extras/MySQL_AST_CREATE_tables.sql
+++ b/agc_2-X/trunk/extras/MySQL_AST_CREATE_tables.sql
@@ -1480,7 +1480,9 @@ parallel_rec_co_filename VARCHAR(50) default '',
parallel_rec_cm_filename VARCHAR(50) default '',
parallel_rec_fr_filename VARCHAR(50) default '',
recording_dtmf_muting SMALLINT(3) UNSIGNED default '0',
-stereo_recording_agent ENUM('NEVER','ONDEMAND','ALLCALLS','ALLFORCE','DISABLED') default 'ALLFORCE'
+stereo_recording_agent ENUM('NEVER','ONDEMAND','ALLCALLS','ALLFORCE','DISABLED') default 'ALLFORCE',
+xfer_talk_minimum ENUM('DISABLED','ENABLED') default 'DISABLED',
+xfer_talk_minimum_sec SMALLINT(5) UNSIGNED default '0'
) ENGINE=MyISAM;
CREATE TABLE vicidial_stations (
@@ -2076,7 +2078,8 @@ agent_3way_dial_filter VARCHAR(20) default '',
recording_dtmf_detection TINYINT(3) UNSIGNED default '0',
recording_dtmf_muting TINYINT(3) UNSIGNED default '0',
stereo_parallel_recording ENUM('0','1','2','3','4','5','6') default '0',
-db_crashed_tables_check ENUM('0','1','2','3','4','5','6') default '1'
+db_crashed_tables_check ENUM('0','1','2','3','4','5','6') default '1',
+xfer_min_container VARCHAR(40) default ''
) ENGINE=MyISAM;
CREATE TABLE vicidial_campaigns_list_mix (
@@ -5877,4 +5880,4 @@ INSERT INTO `wallboard_reports` VALUES ('AGENTS_AND_QUEUES','Agents and Queues',
UPDATE system_settings set vdc_agent_api_active='1';
-UPDATE system_settings SET db_schema_version='1736',db_schema_update_date=NOW(),reload_timestamp=NOW();
+UPDATE system_settings SET db_schema_version='1737',db_schema_update_date=NOW(),reload_timestamp=NOW();
diff --git a/agc_2-X/trunk/extras/upgrade_2.14.sql b/agc_2-X/trunk/extras/upgrade_2.14.sql
index 780fa3dd..18a8b55c 100644
--- a/agc_2-X/trunk/extras/upgrade_2.14.sql
+++ b/agc_2-X/trunk/extras/upgrade_2.14.sql
@@ -3054,3 +3054,10 @@ UPDATE system_settings SET db_schema_version='1735',db_schema_update_date=NOW()
INSERT IGNORE INTO vicidial_status_categories (vsc_id,vsc_name,vsc_description) values('QC','QC-specific status','Quality control specific statuses');
UPDATE system_settings SET db_schema_version='1736',db_schema_update_date=NOW() where db_schema_version < 1736;
+
+ALTER TABLE system_settings ADD xfer_min_container VARCHAR(40) default '';
+
+ALTER TABLE vicidial_inbound_groups ADD xfer_talk_minimum ENUM('DISABLED','ENABLED') default 'DISABLED';
+ALTER TABLE vicidial_inbound_groups ADD xfer_talk_minimum_sec SMALLINT(5) UNSIGNED default '0';
+
+UPDATE system_settings SET db_schema_version='1737',db_schema_update_date=NOW() where db_schema_version < 1737;
diff --git a/agc_2-X/trunk/www/agc/functions.php b/agc_2-X/trunk/www/agc/functions.php
index db847a2e..3d210e59 100644
--- a/agc_2-X/trunk/www/agc/functions.php
+++ b/agc_2-X/trunk/www/agc/functions.php
@@ -223,7 +223,7 @@ function user_authorization($user,$pass,$user_option,$user_update,$bcrypt,$retur
if ( (preg_match("/MXAG/",$SShosted_settings)) and ($mvla_total < 1) )
{
$vla_set = $SShosted_settings;
- $vla_set = preg_replace("/.*MXAG|_BUILD_|DRA|_MXCS\d+|_MXTR\d+| /",'',$vla_set);
+ $vla_set = preg_replace("/.*MXAG|_BUILD_|DRA|_MXCS\d+|_MXTR\d+|VCA\d+| /",'',$vla_set);
$vla_set = preg_replace('/[^0-9]/','',$vla_set);
if (strlen($vla_set)>0)
{$vla_on++;}
diff --git a/agc_2-X/trunk/www/agc/vicidial.php b/agc_2-X/trunk/www/agc/vicidial.php
index 88191d7c..6abcad48 100644
--- a/agc_2-X/trunk/www/agc/vicidial.php
+++ b/agc_2-X/trunk/www/agc/vicidial.php
@@ -754,13 +754,14 @@
# 251020-0849 - Added code for recording_dtmf_muting, fix for Stereo Call Recording
# 251124-0936 - Added lead status display for callbacks list
# 260106-1418 - Fixes for PHP8
+# 260301-0850 - Added xfer_talk_minimum features for In-Group transfers
#
-$version = '2.14-720c';
-$build = '260106-1418';
+$version = '2.14-721c';
+$build = '260301-0850';
$php_script = 'vicidial.php';
$mel=1; # Mysql Error Log enabled = 1
-$mysql_log_count=108;
+$mysql_log_count=109;
$one_mysql_log=0;
$DB=0;
$conf_table = "vicidial_conferences";
@@ -869,7 +870,7 @@ $random = (rand(1000000, 9999999) + 10000000);
#############################################
##### START SYSTEM_SETTINGS AND USER LANGUAGE LOOKUP #####
-$stmt = "SELECT use_non_latin,vdc_header_date_format,vdc_customer_date_format,vdc_header_phone_format,webroot_writable,timeclock_end_of_day,vtiger_url,enable_vtiger_integration,outbound_autodial_active,enable_second_webform,user_territories_active,static_agent_url,custom_fields_enabled,pllb_grouping_limit,qc_features_active,allow_emails,callback_time_24hour,enable_languages,language_method,meetme_enter_login_filename,meetme_enter_leave3way_filename,enable_third_webform,default_language,active_modules,allow_chats,chat_url,default_phone_code,agent_screen_colors,manual_auto_next,agent_xfer_park_3way,admin_web_directory,agent_script,agent_push_events,agent_push_url,agent_logout_link,agentonly_callback_campaign_lock,manual_dial_validation,mute_recordings,enable_second_script,enable_first_webform,recording_buttons,outbound_cid_any,browser_call_alerts,manual_dial_phone_strip,require_password_length,pass_hash_enabled,agent_hidden_sound_seconds,agent_hidden_sound,agent_hidden_sound_volume,agent_screen_timer,agent_hide_hangup,allow_web_debug,max_logged_in_agents,login_kickall,agent_notifications,inbound_credits,two_factor_auth_agent_hours,two_factor_container,sip_event_logging,stereo_recording,agent_hide_dial_fail,agent_man_dial_filter,agent_3way_dial_filter,recording_dtmf_detection,recording_dtmf_muting FROM system_settings;";
+$stmt = "SELECT use_non_latin,vdc_header_date_format,vdc_customer_date_format,vdc_header_phone_format,webroot_writable,timeclock_end_of_day,vtiger_url,enable_vtiger_integration,outbound_autodial_active,enable_second_webform,user_territories_active,static_agent_url,custom_fields_enabled,pllb_grouping_limit,qc_features_active,allow_emails,callback_time_24hour,enable_languages,language_method,meetme_enter_login_filename,meetme_enter_leave3way_filename,enable_third_webform,default_language,active_modules,allow_chats,chat_url,default_phone_code,agent_screen_colors,manual_auto_next,agent_xfer_park_3way,admin_web_directory,agent_script,agent_push_events,agent_push_url,agent_logout_link,agentonly_callback_campaign_lock,manual_dial_validation,mute_recordings,enable_second_script,enable_first_webform,recording_buttons,outbound_cid_any,browser_call_alerts,manual_dial_phone_strip,require_password_length,pass_hash_enabled,agent_hidden_sound_seconds,agent_hidden_sound,agent_hidden_sound_volume,agent_screen_timer,agent_hide_hangup,allow_web_debug,max_logged_in_agents,login_kickall,agent_notifications,inbound_credits,two_factor_auth_agent_hours,two_factor_container,sip_event_logging,stereo_recording,agent_hide_dial_fail,agent_man_dial_filter,agent_3way_dial_filter,recording_dtmf_detection,recording_dtmf_muting,xfer_min_container FROM system_settings;";
$rslt=mysql_to_mysqli($stmt, $link);
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'01001',$VD_login,$server_ip,$session_name,$one_mysql_log);}
#if ($DB) {echo "$stmt\n";}
@@ -942,6 +943,7 @@ if ($qm_conf_ct > 0)
$SSagent_3way_dial_filter = $row[62];
$SSrecording_dtmf_detection = $row[63];
$SSrecording_dtmf_muting = $row[64];
+ $SSxfer_min_container = $row[65];
if ( ($SSagent_hidden_sound == '---NONE---') or ($SSagent_hidden_sound == '') ) {$SSagent_hidden_sound_seconds=0;}
}
else
@@ -1175,7 +1177,20 @@ if (preg_match("/1|2/",$SSagent_hide_dial_fail))
}
}
-
+$XFmin_talk_sec_message = "This transfer In-Group has a minimum talk-time threshold of --A--talk_sec_minimum--B-- seconds. You cannot transfer to this In-Group until your talk time reaches that length.";
+if (strlen($SSxfer_min_container) > 0)
+ {
+ $stmt="SELECT container_entry FROM vicidial_settings_containers WHERE container_id='$SSxfer_min_container';";
+ $rslt=mysql_to_mysqli($stmt, $link);
+ if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'01109',$VD_login,$server_ip,$session_name,$one_mysql_log);}
+ if ($DB) {echo "$stmt\n";}
+ $tsmm_ct = mysqli_num_rows($rslt);
+ if ($tsmm_ct > 0)
+ {
+ $row=mysqli_fetch_row($rslt);
+ $XFmin_talk_sec_message = preg_replace("/\r|\n|\"/",'
',$row[0]);
+ }
+ }
$hide_gender=0;
$dialRegExten_enabled=0;
@@ -4144,7 +4159,7 @@ else
if ($ig_xfer_list_sort == 'PRIORITY_UP') {$xfer_list_sortSQL = 'order by queue_priority';}
if ($ig_xfer_list_sort == 'PRIORITY_DOWN') {$xfer_list_sortSQL = 'order by queue_priority desc';}
$VARxfergroups='';
- $stmt="SELECT group_id,group_name from vicidial_inbound_groups where active = 'Y' and group_id IN($xfer_groups) $xfer_list_sortSQL limit 800;";
+ $stmt="SELECT group_id,group_name,xfer_talk_minimum,xfer_talk_minimum_sec from vicidial_inbound_groups where active = 'Y' and group_id IN($xfer_groups) $xfer_list_sortSQL limit 800;";
$rslt=mysql_to_mysqli($stmt, $link);
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'01016',$VD_login,$server_ip,$session_name,$one_mysql_log);}
if ($DB) {echo "$stmt\n";}
@@ -4153,13 +4168,19 @@ else
while ($XFgrpCT < $xfer_ct)
{
$row=mysqli_fetch_row($rslt);
+ $temp_xfer_talk_minimum = $row[2];
+ $temp_xfer_talk_minimum_sec = $row[3];
+ if (!preg_match("/ENABLED/",$temp_xfer_talk_minimum))
+ {$temp_xfer_talk_minimum_sec=0;}
$VARxfergroups = "$VARxfergroups'$row[0]',";
$VARxfergroupsnames = "$VARxfergroupsnames'$row[1]',";
+ $VARxfergroupstalkminsec = "$VARxfergroupstalkminsec'$temp_xfer_talk_minimum_sec',";
if ($row[0] == "$default_xfer_group") {$default_xfer_group_name = $row[1];}
$XFgrpCT++;
}
$VARxfergroups = substr("$VARxfergroups", 0, -1);
$VARxfergroupsnames = substr("$VARxfergroupsnames", 0, -1);
+ $VARxfergroupstalkminsec = substr("$VARxfergroupstalkminsec", 0, -1);
}
if (preg_match('/Y/',$agent_allow_group_alias))
@@ -6157,6 +6178,13 @@ if ( ($calls_waiting_vl_two != 'DISABLED') and (strlen($calls_waiting_vl_two) >
var territoryCOUNT = '';
VARxfergroups = new Array();
VARxfergroupsnames = new Array();
+ VARxfergroupstalkminsec = new Array();
+ var XFmin_talk_sec_fail=0;
+ var temp_XFmin_talk_sec=0;
+ var temp_XFgroup_id='';
+ var temp_XFgroup_name='';
+ var XFmin_talk_sec_message_ORIG = '';
+ var XFmin_talk_sec_message = '';
var XFgroupCOUNT = '';
var default_xfer_group = '';
var default_xfer_group_name = '';
@@ -7497,12 +7525,69 @@ function holiday_display(holiday_name)
function xfer_park_dial(XPDclick)
{
if (XPDclick=='YES')
- {button_click_log = button_click_log + "" + SQLdate + "-----xfer_park_dial---|";}
- conf_dialed=1;
+ {button_click_log = button_click_log + "" + SQLdate + "-----xfer_park_dial---" + XfeR_GrouP + "|";}
- mainxfer_send_redirect('ParK',lastcustchannel,lastcustserverip);
+ XFmin_talk_sec_fail = 0;
+ var consultativexfer_checked = 0;
+ if (document.vicidial_form.consultativexfer.checked==true)
+ {consultativexfer_checked = 1;}
+ var regCXFvars = new RegExp("CXFER","g");
+ var blindxferdialstring = document.vicidial_form.xfernumber.value;
+ var blindxferhiddendialstring = document.vicidial_form.xfernumhidden.value;
+ if ( (blindxferdialstring.length < 1) && (blindxferhiddendialstring.length > 0) )
+ {blindxferdialstring=blindxferhiddendialstring;}
+ var tasknum_string = blindxferdialstring.toString();
+ if ( (tasknum_string.match(regCXFvars)) || (consultativexfer_checked > 0) )
+ {
+ var XfeRSelecT = document.getElementById("XfeRGrouP");
+ var XfeR_GrouP = XfeRSelecT.value;
+ if (API_selected_xfergroup.length > 1)
+ {XfeR_GrouP = API_selected_xfergroup;}
- SendManualDial('YES');
+ // check minimum talk sec of in-group
+ var loop_ct = 0;
+ temp_XFmin_talk_sec = 0;
+ temp_XFgroup_id='';
+ temp_XFgroup_name='';
+ while ( (loop_ct < XFgroupCOUNT) && (XFmin_talk_sec_fail < 1) )
+ {
+ if (VARxfergroups[loop_ct] == XfeR_GrouP)
+ {
+ temp_XFgroup_id = XfeR_GrouP;
+ temp_XFgroup_name = VARxfergroupsnames[loop_ct];
+ temp_XFmin_talk_sec = VARxfergroupstalkminsec[loop_ct];
+ temp_XFmin_talk_sec = parseInt(temp_XFmin_talk_sec);
+ if (VD_live_call_secondS < temp_XFmin_talk_sec)
+ {XFmin_talk_sec_fail++;}
+ }
+ loop_ct++;
+ }
+ button_click_log = button_click_log + "" + SQLdate + "-----xfer_park_dial_DB---" + XfeR_GrouP + " " + temp_XFmin_talk_sec + " " + VD_live_call_secondS + " " + XFmin_talk_sec_fail + "|";
+ }
+
+ // Check for stop alerts before sending commands
+ if (XFmin_talk_sec_fail > 0)
+ {
+ XFmin_talk_sec_message = XFmin_talk_sec_message_ORIG;
+ var RGgroup_id = new RegExp("--A--group_id--B--","g");
+ var RGgroup_name = new RegExp("--A--group_name--B--","g");
+ var RGtalk_sec_minimum = new RegExp("--A--talk_sec_minimum--B--","g");
+
+ XFmin_talk_sec_message = XFmin_talk_sec_message.replace(RGgroup_id, temp_XFgroup_id);
+ XFmin_talk_sec_message = XFmin_talk_sec_message.replace(RGgroup_name, temp_XFgroup_name);
+ XFmin_talk_sec_message = XFmin_talk_sec_message.replace(RGtalk_sec_minimum, temp_XFmin_talk_sec);
+
+ alert_box(XFmin_talk_sec_message);
+ button_click_log = button_click_log + "" + SQLdate + "-----XFPmin_talk_sec_fail---" + temp_XFgroup_id + " " + temp_XFmin_talk_sec + " " + VD_live_call_secondS + "|";
+ }
+ else
+ {
+ conf_dialed=1;
+
+ mainxfer_send_redirect('ParK',lastcustchannel,lastcustserverip);
+
+ SendManualDial('YES');
+ }
}
// ################################################################################
@@ -7873,6 +7958,26 @@ function holiday_display(holiday_name)
if (consult_custom_sent < 1)
{CustomerData_update('NO');}
+
+ // check minimum talk sec of in-group
+ var loop_ct = 0;
+ XFmin_talk_sec_fail = 0;
+ temp_XFmin_talk_sec = 0;
+ temp_XFgroup_id='';
+ temp_XFgroup_name='';
+ while ( (loop_ct < XFgroupCOUNT) && (XFmin_talk_sec_fail < 1) )
+ {
+ if (VARxfergroups[loop_ct] == XfeR_GrouP)
+ {
+ temp_XFgroup_id = XfeR_GrouP;
+ temp_XFgroup_name = VARxfergroupsnames[loop_ct];
+ temp_XFmin_talk_sec = VARxfergroupstalkminsec[loop_ct];
+ temp_XFmin_talk_sec = parseInt(temp_XFmin_talk_sec);
+ if (VD_live_call_secondS < temp_XFmin_talk_sec)
+ {XFmin_talk_sec_fail++;}
+ }
+ loop_ct++;
+ }
}
var regAXFvars = new RegExp("AXFER","g");
if (tasknum_string.match(regAXFvars))
@@ -7890,133 +7995,155 @@ function holiday_display(holiday_name)
}
}
- 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')
+ // Check for stop alerts before sending commands
+ if (XFmin_talk_sec_fail > 0)
{
- xmlhttp = new XMLHttpRequest();
+ XFmin_talk_sec_message = XFmin_talk_sec_message_ORIG;
+ var RGgroup_id = new RegExp("--A--group_id--B--","g");
+ var RGgroup_name = new RegExp("--A--group_name--B--","g");
+ var RGtalk_sec_minimum = new RegExp("--A--talk_sec_minimum--B--","g");
+
+ XFmin_talk_sec_message = XFmin_talk_sec_message.replace(RGgroup_id, temp_XFgroup_id);
+ XFmin_talk_sec_message = XFmin_talk_sec_message.replace(RGgroup_name, temp_XFgroup_name);
+ XFmin_talk_sec_message = XFmin_talk_sec_message.replace(RGtalk_sec_minimum, temp_XFmin_talk_sec);
+
+ alert_box(XFmin_talk_sec_message);
+ button_click_log = button_click_log + "" + SQLdate + "-----XFmin_talk_sec_fail---" + temp_XFgroup_id + " " + temp_XFmin_talk_sec + " " + VD_live_call_secondS + "|";
+
+ xfer_in_call=0;
+ document.getElementById("DialWithCustomer").innerHTML ="
\" border=\"0\" alt=\"Dial With Customer\" style=\"vertical-align:middle\" />";
+ document.getElementById("ParkCustomerDial").innerHTML ="
\" border=\"0\" alt=\"Park Customer Dial\" style=\"vertical-align:middle\" />";
}
- if (xmlhttp)
+ else
{
- if (taskprefix == 'NO') {var call_prefix = '';}
- else {var call_prefix = agc_dial_prefix;}
-
- if (prefix_choice.length > 0)
- {var call_prefix = prefix_choice;}
-
- if (taskreverse == 'YES')
+ 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')
{
- if (taskdialvalue.length < 2)
- {var dialnum = dialplan_number;}
- else
- {var dialnum = taskdialvalue;}
- var call_prefix = '';
- var originatevalue = "Local/" + tasknum + "@" + ext_context;
+ xmlhttp = new XMLHttpRequest();
}
- else
+ if (xmlhttp)
{
- var dialnum = tasknum;
- if ( (protocol == 'EXTERNAL') || (protocol == 'Local') )
+ if (taskprefix == 'NO') {var call_prefix = '';}
+ else {var call_prefix = agc_dial_prefix;}
+
+ if (prefix_choice.length > 0)
+ {var call_prefix = prefix_choice;}
+
+ if (taskreverse == 'YES')
{
- var protodial = 'Local';
- var extendial = extension;
- // var extendial = extension + "@" + ext_context;
+ if (taskdialvalue.length < 2)
+ {var dialnum = dialplan_number;}
+ else
+ {var dialnum = taskdialvalue;}
+ var call_prefix = '';
+ var originatevalue = "Local/" + tasknum + "@" + ext_context;
}
- else
+ else
{
- var protodial = protocol;
- var extendial = extension;
+ var dialnum = tasknum;
+ if ( (protocol == 'EXTERNAL') || (protocol == 'Local') )
+ {
+ var protodial = 'Local';
+ var extendial = extension;
+ // var extendial = extension + "@" + ext_context;
+ }
+ else
+ {
+ var protodial = protocol;
+ var extendial = extension;
+ }
+ var originatevalue = protodial + "/" + extendial;
}
- var originatevalue = protodial + "/" + extendial;
- }
- var leadCID = document.vicidial_form.lead_id.value;
- var epochCID = epoch_sec;
- if (leadCID.length < 1)
- {leadCID = user_abb;}
- leadCID = set_length(leadCID,'10','left');
- epochCID = set_length(epochCID,'6','right');
- if (taskconfxfer == 'YES')
- {var queryCID = "DC" + epochCID + 'W' + leadCID + 'W';}
- else
- {var queryCID = "DV" + epochCID + 'W' + leadCID + 'W';}
+ var leadCID = document.vicidial_form.lead_id.value;
+ var epochCID = epoch_sec;
+ if (leadCID.length < 1)
+ {leadCID = user_abb;}
+ leadCID = set_length(leadCID,'10','left');
+ epochCID = set_length(epochCID,'6','right');
+ if (taskconfxfer == 'YES')
+ {var queryCID = "DC" + epochCID + 'W' + leadCID + 'W';}
+ else
+ {var queryCID = "DV" + epochCID + 'W' + leadCID + 'W';}
- // if (taskconfxfer == 'YES')
- // {var queryCID = "DCagcW" + epoch_sec + user_abb;}
- // else
- // {var queryCID = "DVagcW" + epoch_sec + user_abb;}
+ // if (taskconfxfer == 'YES')
+ // {var queryCID = "DCagcW" + epoch_sec + user_abb;}
+ // else
+ // {var queryCID = "DVagcW" + epoch_sec + user_abb;}
- if (taskalert == '1')
- {
- queryCID = TAqueryCID;
- }
+ if (taskalert == '1')
+ {
+ queryCID = TAqueryCID;
+ }
- if (cid_choice.length > 3)
- {
- var call_cid = cid_choice;
- usegroupalias=1;
- }
- else
- {
- if (taskcid.length > 3)
- {var call_cid = taskcid;}
+ if (cid_choice.length > 3)
+ {
+ var call_cid = cid_choice;
+ usegroupalias=1;
+ }
else
- {var call_cid = campaign_cid;}
- }
-
- VMCoriginate_query = "server_ip=" + server_ip + "&session_name=" + session_name + "&user=" + user + "&pass=" + pass + "&ACTION=Originate&format=text&channel=" + originatevalue + "&queryCID=" + queryCID + "&exten=" + call_prefix + "" + dialnum + "&ext_context=" + ext_context + "&ext_priority=1&outbound_cid=" + call_cid + "&usegroupalias="+ usegroupalias + "&preset_name=" + taskpresetname + "&campaign=" + campaign + "&account=" + active_group_alias + "&agent_dialed_number=" + agent_dialed_number + "&agent_dialed_type=" + agent_dialed_type + "&lead_id=" + document.vicidial_form.lead_id.value + "&stage=" + CheckDEADcallON + "&" + alertquery + "&cid_lock=" + cid_lock + "&session_id=" + session_id + "&call_variables=" + taskvariables;
- 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(VMCoriginate_query);
- // alert(xmlhttp.responseText);
+ if (taskcid.length > 3)
+ {var call_cid = taskcid;}
+ else
+ {var call_cid = campaign_cid;}
+ }
- var regBOerr = new RegExp("ERROR","g");
- var BOresponse = xmlhttp.responseText;
- if (BOresponse.match(regBOerr))
+ VMCoriginate_query = "server_ip=" + server_ip + "&session_name=" + session_name + "&user=" + user + "&pass=" + pass + "&ACTION=Originate&format=text&channel=" + originatevalue + "&queryCID=" + queryCID + "&exten=" + call_prefix + "" + dialnum + "&ext_context=" + ext_context + "&ext_priority=1&outbound_cid=" + call_cid + "&usegroupalias="+ usegroupalias + "&preset_name=" + taskpresetname + "&campaign=" + campaign + "&account=" + active_group_alias + "&agent_dialed_number=" + agent_dialed_number + "&agent_dialed_type=" + agent_dialed_type + "&lead_id=" + document.vicidial_form.lead_id.value + "&stage=" + CheckDEADcallON + "&" + alertquery + "&cid_lock=" + cid_lock + "&session_id=" + session_id + "&call_variables=" + taskvariables;
+ 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_box(BOresponse);
- button_click_log = button_click_log + "" + SQLdate + "-----OriginateError---" + BOresponse + "|";
- }
+ // alert(VMCoriginate_query);
+ // alert(xmlhttp.responseText);
- if ((taskdialvalue.length > 0) && (tasknowait != 'YES'))
- {
- XDnextCID = queryCID;
- MD_channel_look=1;
- XDcheck = 'YES';
+ var regBOerr = new RegExp("ERROR","g");
+ var BOresponse = xmlhttp.responseText;
+ if (BOresponse.match(regBOerr))
+ {
+ alert_box(BOresponse);
+ button_click_log = button_click_log + "" + SQLdate + "-----OriginateError---" + BOresponse + "|";
+ }
- // document.getElementById("HangupXferLine").innerHTML ="
";
+ if ((taskdialvalue.length > 0) && (tasknowait != 'YES'))
+ {
+ XDnextCID = queryCID;
+ MD_channel_look=1;
+ XDcheck = 'YES';
+
+ // document.getElementById("HangupXferLine").innerHTML ="
";
+ }
}
}
+ delete xmlhttp;
+ active_group_alias='';
+ cid_choice='';
+ prefix_choice='';
+ agent_dialed_number='';
+ agent_dialed_type='';
+ // CalL_ScripT_id='';
+ // CalL_ScripT_color='';
+ call_variables='';
+ xfer_agent_selected=0;
+ three_way_call_cid = orig_three_way_call_cid;
}
- delete xmlhttp;
- active_group_alias='';
- cid_choice='';
- prefix_choice='';
- agent_dialed_number='';
- agent_dialed_type='';
- // CalL_ScripT_id='';
- // CalL_ScripT_color='';
- call_variables='';
- xfer_agent_selected=0;
- three_way_call_cid = orig_three_way_call_cid;
}
}
@@ -9365,6 +9492,10 @@ function set_length(SLnumber,SLlength_goal,SLdirection)
{
var XfeRSelecT = document.getElementById("XfeRGrouP");
var XfeR_GrouP = XfeRSelecT.value;
+ if (API_selected_xfergroup.length > 1)
+ {XfeR_GrouP = API_selected_xfergroup;}
+ if (tasklockedquick > 0)
+ {XfeR_GrouP = quick_transfer_button_orig;}
var ADvalue = document.vicidial_form.xfernumber.value;
if (MSRclick=='YES')
{button_click_log = button_click_log + "" + SQLdate + "-----mainxfer_send_redirect---" + taskvar + " " + taskxferconf + " " + taskserverip + " " + taskdebugnote + " " + taskdispowindow + " " + tasklockedquick + " " + XfeR_GrouP + " " + ADvalue + "|";}
@@ -9372,10 +9503,49 @@ function set_length(SLnumber,SLlength_goal,SLdirection)
{
CalLCID = MDnextCID;
}
- if ( ( (taskvar == 'XfeRLOCAL') || (taskvar == 'XfeRINTERNAL') ) && (XfeR_GrouP.match(/AGENTDIRECT/i)) && (ADvalue.length < 2) && (API_selected_xfergroup.length < 2) )
+
+ // check minimum talk sec of in-group
+ var loop_ct = 0;
+ XFmin_talk_sec_fail = 0;
+ temp_XFmin_talk_sec = 0;
+ temp_XFgroup_id='';
+ temp_XFgroup_name='';
+ while ( (loop_ct < XFgroupCOUNT) && (XFmin_talk_sec_fail < 1) )
{
- alert_box("");
- button_click_log = button_click_log + "" + SQLdate + "-----XferAgentFailed---" + ADvalue + "|";
+ if (VARxfergroups[loop_ct] == XfeR_GrouP)
+ {
+ temp_XFgroup_id = XfeR_GrouP;
+ temp_XFgroup_name = VARxfergroupsnames[loop_ct];
+ temp_XFmin_talk_sec = VARxfergroupstalkminsec[loop_ct];
+ temp_XFmin_talk_sec = parseInt(temp_XFmin_talk_sec);
+ if (VD_live_call_secondS < temp_XFmin_talk_sec)
+ {XFmin_talk_sec_fail++;}
+ }
+ loop_ct++;
+ }
+
+ if ( (XFmin_talk_sec_fail > 0) || ( ( (taskvar == 'XfeRLOCAL') || (taskvar == 'XfeRINTERNAL') ) && (XfeR_GrouP.match(/AGENTDIRECT/i)) && (ADvalue.length < 2) && (API_selected_xfergroup.length < 2) ) )
+ {
+ // Check for stop alerts before sending commands
+ if (XFmin_talk_sec_fail > 0)
+ {
+ XFmin_talk_sec_message = XFmin_talk_sec_message_ORIG;
+ var RGgroup_id = new RegExp("--A--group_id--B--","g");
+ var RGgroup_name = new RegExp("--A--group_name--B--","g");
+ var RGtalk_sec_minimum = new RegExp("--A--talk_sec_minimum--B--","g");
+
+ XFmin_talk_sec_message = XFmin_talk_sec_message.replace(RGgroup_id, temp_XFgroup_id);
+ XFmin_talk_sec_message = XFmin_talk_sec_message.replace(RGgroup_name, temp_XFgroup_name);
+ XFmin_talk_sec_message = XFmin_talk_sec_message.replace(RGtalk_sec_minimum, temp_XFmin_talk_sec);
+
+ alert_box(XFmin_talk_sec_message);
+ button_click_log = button_click_log + "" + SQLdate + "-----XFRmin_talk_sec_fail---" + temp_XFgroup_id + " " + temp_XFmin_talk_sec + " " + VD_live_call_secondS + "|";
+ }
+ else
+ {
+ alert_box("");
+ button_click_log = button_click_log + "" + SQLdate + "-----XferAgentFailed---" + ADvalue + "|";
+ }
}
else
{
@@ -13479,6 +13649,7 @@ function set_length(SLnumber,SLlength_goal,SLdirection)
leave_3way_start_recording_filename='';
three_way_call_cid = orig_three_way_call_cid;
APIskip=0;
+ temp_XFmin_talk_sec=0;
document.getElementById("BannerPanel").style.background = panel_bgcolor;
document.getElementById("BannerPanel").innerHTML = '';
if (manual_dial_preview < 1)
@@ -16787,6 +16958,7 @@ function set_length(SLnumber,SLlength_goal,SLdirection)
MD_dial_timed_out=0;
transfer_no_dispoTEMP=0;
dead_count=0;
+ temp_XFmin_talk_sec=0;
if (manual_dial_preview < 1)
{
document.vicidial_form.LeadPreview.checked=false;
@@ -17558,6 +17730,7 @@ function set_length(SLnumber,SLlength_goal,SLdirection)
recording_active=0;
APIskip=0;
UpdatESettingSChecK=1;
+ temp_XFmin_talk_sec=0;
var VDDCU_recording_id=document.getElementById("RecorDID").innerHTML;
var VDDCU_recording_filename=last_recording_filename;
var dispo_urls='';
@@ -17927,6 +18100,7 @@ function set_length(SLnumber,SLlength_goal,SLdirection)
three_way_call_cid = orig_three_way_call_cid;
APIskip=0;
talk_sec_url_secs='';
+ temp_XFmin_talk_sec=0;
document.getElementById("BannerPanel").style.background = panel_bgcolor;
document.getElementById("BannerPanel").innerHTML = '';
if (manual_auto_next > 0)
diff --git a/agc_2-X/trunk/www/vicidial/AST_CLOSER_service_level.php b/agc_2-X/trunk/www/vicidial/AST_CLOSER_service_level.php
index 0a1e8b34..4057a912 100644
--- a/agc_2-X/trunk/www/vicidial/AST_CLOSER_service_level.php
+++ b/agc_2-X/trunk/www/vicidial/AST_CLOSER_service_level.php
@@ -527,6 +527,14 @@ $EQdate_ARY = explode(' ',$query_date_END);
$EQday_ARY = explode('-',$EQdate_ARY[0]);
$EQtime_ARY = explode(':',$EQdate_ARY[1]);
+$SQday_ARY[0] = intval($SQday_ARY[0]);
+$SQday_ARY[1] = intval($SQday_ARY[1]);
+$SQday_ARY[2] = intval($SQday_ARY[2]);
+
+$EQday_ARY[0] = intval($EQday_ARY[0]);
+$EQday_ARY[1] = intval($EQday_ARY[1]);
+$EQday_ARY[2] = intval($EQday_ARY[2]);
+
$SQepochDAY = mktime(0, 0, 0, $SQday_ARY[1], $SQday_ARY[2], $SQday_ARY[0]);
$SQepoch = mktime($SQtime_ARY[0], $SQtime_ARY[1], $SQtime_ARY[2], $SQday_ARY[1], $SQday_ARY[2], $SQday_ARY[0]);
$EQepoch = mktime($EQtime_ARY[0], $EQtime_ARY[1], $EQtime_ARY[2], $EQday_ARY[1], $EQday_ARY[2], $EQday_ARY[0]);
diff --git a/agc_2-X/trunk/www/vicidial/admin.php b/agc_2-X/trunk/www/vicidial/admin.php
index 5bf34987..d871654c 100644
--- a/agc_2-X/trunk/www/vicidial/admin.php
+++ b/agc_2-X/trunk/www/vicidial/admin.php
@@ -2879,6 +2879,12 @@ if (isset($_GET["alter_cid_name"])) {$alter_cid_name=$_GET["alter_cid_name"];
elseif (isset($_POST["alter_cid_name"])) {$alter_cid_name=$_POST["alter_cid_name"];}
if (isset($_GET["adaptive_percentmax_percentage"])) {$adaptive_percentmax_percentage=$_GET["adaptive_percentmax_percentage"];}
elseif (isset($_POST["adaptive_percentmax_percentage"])) {$adaptive_percentmax_percentage=$_POST["adaptive_percentmax_percentage"];}
+if (isset($_GET["xfer_min_container"])) {$xfer_min_container=$_GET["xfer_min_container"];}
+ elseif (isset($_POST["xfer_min_container"])) {$xfer_min_container=$_POST["xfer_min_container"];}
+if (isset($_GET["xfer_talk_minimum"])) {$xfer_talk_minimum=$_GET["xfer_talk_minimum"];}
+ elseif (isset($_POST["xfer_talk_minimum"])) {$xfer_talk_minimum=$_POST["xfer_talk_minimum"];}
+if (isset($_GET["xfer_talk_minimum_sec"])) {$xfer_talk_minimum_sec=$_GET["xfer_talk_minimum_sec"];}
+ elseif (isset($_POST["xfer_talk_minimum_sec"])) {$xfer_talk_minimum_sec=$_POST["xfer_talk_minimum_sec"];}
$DB=preg_replace("/[^0-9a-zA-Z]/","",$DB);
@@ -3426,6 +3432,7 @@ $agent_hide_dial_fail = preg_replace('/[^0-9]/','',$agent_hide_dial_fail);
$recording_dtmf_detection = preg_replace('/[^0-9]/','',$recording_dtmf_detection);
$recording_dtmf_muting = preg_replace('/[^0-9]/','',$recording_dtmf_muting);
$db_crashed_tables_check = preg_replace('/[^0-9]/','',$db_crashed_tables_check);
+$xfer_talk_minimum_sec = preg_replace('/[^0-9]/','',$xfer_talk_minimum_sec);
$user_new_lead_limit = preg_replace('/[^-0-9]/','',$user_new_lead_limit);
$drop_call_seconds = preg_replace('/[^-0-9]/','',$drop_call_seconds);
@@ -3665,6 +3672,7 @@ $stereo_recording_agent = preg_replace('/[^-_0-9a-zA-Z]/','',$stereo_recording_a
$call_count_limit_restrict = preg_replace('/[^-_0-9a-zA-Z]/','',$call_count_limit_restrict);
$alter_cid_name = preg_replace('/[^-_0-9a-zA-Z]/','',$alter_cid_name);
$adaptive_percentmax_percentage = preg_replace('/[^-_0-9a-zA-Z]/','',$adaptive_percentmax_percentage);
+$xfer_talk_minimum = preg_replace('/[^-_0-9a-zA-Z]/','',$xfer_talk_minimum);
if ($non_latin < 1)
{
@@ -4106,6 +4114,7 @@ if ($non_latin < 1)
$khomp_settings_container = preg_replace('/[^-_0-9a-zA-Z]/','',$khomp_settings_container);
$agent_man_dial_filter = preg_replace('/[^-_0-9a-zA-Z]/','',$agent_man_dial_filter);
$agent_3way_dial_filter = preg_replace('/[^-_0-9a-zA-Z]/','',$agent_3way_dial_filter);
+ $xfer_min_container = preg_replace('/[^-_0-9a-zA-Z]/','',$xfer_min_container);
### ALPHA-NUMERIC and underscore
$qc_statuses_id = preg_replace('/[^_0-9a-zA-Z]/','',$qc_statuses_id);
@@ -4855,6 +4864,7 @@ else
$khomp_settings_container = preg_replace('/[^-_0-9\p{L}]/u','',$khomp_settings_container);
$agent_man_dial_filter = preg_replace('/[^-_0-9\p{L}]/u','',$agent_man_dial_filter);
$agent_3way_dial_filter = preg_replace('/[^-_0-9\p{L}]/u','',$agent_3way_dial_filter);
+ $xfer_min_container = preg_replace('/[^-_0-9\p{L}]/u','',$xfer_min_container);
### ALPHA-NUMERIC and underscore and dash and slash and dot
$menu_timeout_prompt = preg_replace('/[^-\/\|\._0-9\p{L}]/u','',$menu_timeout_prompt);
@@ -6309,12 +6319,13 @@ if ($SSscript_remove_js > 0)
# 251211-1134 - Added ADAPT_PERCENTMAX dial_method and adaptive_percentmax_percentage campaign setting
# 260106-1438 - Fixes for PHP8, 2026 date change
# 260126-1335 - Added check of reserved_extensions against dialplan numbers when creating/modifying phones
+# 260128-0823 - Added xfer_min_container and in-group minimum transfer time features, xfer_talk_minimum, xfer_talk_minimum_sec
#
# 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-952a';
-$build = '260126-1335';
+$admin_version = '2.14-953a';
+$build = '260128-0823';
$STARTtime = date("U");
$SQLdate = date("Y-m-d H:i:s");
@@ -11624,6 +11635,7 @@ if ($ADD==192111111111)
+
$NWB#settings_containers-container_type$NWE\n";
echo "
| "._QXZ("Admin User Group").": | |