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 ="\"Hangup"; + if ((taskdialvalue.length > 0) && (tasknowait != 'YES')) + { + XDnextCID = queryCID; + MD_channel_look=1; + XDcheck = 'YES'; + + // document.getElementById("HangupXferLine").innerHTML ="\"Hangup"; + } } } + 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").": $NWB#inbound_groups-third_alert_only$NWE\n"; - - - echo ""._QXZ("Default Transfer Group").": $NWB#inbound_groups-default_xfer_group$NWE\n"; @@ -35256,6 +35267,10 @@ if ($ADD==3111) echo "$group_alias_menu"; echo "$NWB#inbound_groups-default_group_alias$NWE\n"; + echo ""._QXZ("Transfer Talk Minimum").": $NWB#inbound_groups-xfer_talk_minimum$NWE\n"; + + echo ""._QXZ("Transfer Talk Minimum Seconds").": $NWB#inbound_groups-xfer_talk_minimum_sec$NWE\n"; + $DID_edit_link_BEGIN=''; $DID_edit_link_END=''; if (strlen($dial_ingroup_cid) > 0) @@ -35270,13 +35285,13 @@ if ($ADD==3111) $DID_edit_link_END=''; } } - echo "$DID_edit_link_BEGIN"._QXZ("Dial In-Group CID")."$DID_edit_link_END: $NWB#inbound_groups-dial_ingroup_cid$NWE\n"; + echo "$DID_edit_link_BEGIN"._QXZ("Dial In-Group CID")."$DID_edit_link_END: $NWB#inbound_groups-dial_ingroup_cid$NWE\n"; - echo ""._QXZ("Hold Recall Transfer In-Group").": "; echo "$Hgroups_menu"; echo "$NWB#inbound_groups-hold_recall_xfer_group$NWE\n"; - echo ""._QXZ("No Delay Call Route").": $NWB#inbound_groups-no_delay_call_route$NWE\n"; + echo ""._QXZ("No Delay Call Route").": $NWB#inbound_groups-no_delay_call_route$NWE\n"; echo ""._QXZ("In-Group Recording Override").": $NWB#inbound_groups-ingroup_recording_override$NWE\n"; @@ -43345,6 +43360,7 @@ if ($ADD==392111111111) + $NWB#settings_containers-container_type$NWE\n"; @@ -44543,7 +44559,7 @@ if ($ADD==311111111111111) $ALLagent_count = $rowx[2]; } - $stmt="SELECT version,install_date,use_non_latin,webroot_writable,enable_queuemetrics_logging,queuemetrics_server_ip,queuemetrics_dbname,queuemetrics_login,queuemetrics_pass,queuemetrics_url,queuemetrics_log_id,queuemetrics_eq_prepend,vicidial_agent_disable,allow_sipsak_messages,admin_home_url,enable_agc_xfer_log,db_schema_version,auto_user_add_value,timeclock_end_of_day,timeclock_last_reset_date,vdc_header_date_format,vdc_customer_date_format,vdc_header_phone_format,vdc_agent_api_active,qc_last_pull_time,enable_vtiger_integration,vtiger_server_ip,vtiger_dbname,vtiger_login,vtiger_pass,vtiger_url,qc_features_active,outbound_autodial_active,outbound_calls_per_second,enable_tts_integration,agentonly_callback_campaign_lock,sounds_central_control_active,sounds_web_server,sounds_web_directory,active_voicemail_server,auto_dial_limit,user_territories_active,allow_custom_dialplan,db_schema_update_date,enable_second_webform,default_webphone,default_external_server_ip,webphone_url,enable_agc_dispo_log,custom_dialplan_entry,queuemetrics_loginout,callcard_enabled,queuemetrics_callstatus,default_codecs,admin_web_directory,label_title,label_first_name,label_middle_initial,label_last_name,label_address1,label_address2,label_address3,label_city,label_state,label_province,label_postal_code,label_vendor_lead_code,label_gender,label_phone_number,label_phone_code,label_alt_phone,label_security_phrase,label_email,label_comments,custom_fields_enabled,slave_db_server,reports_use_slave_db,webphone_systemkey,first_login_trigger,default_phone_registration_password,default_phone_login_password,default_server_password,admin_modify_refresh,nocache_admin,generate_cross_server_exten,queuemetrics_addmember_enabled,queuemetrics_dispo_pause,label_hide_field_logs,queuemetrics_pe_phone_append,test_campaign_calls,agents_calls_reset,default_voicemail_timezone,default_local_gmt,noanswer_log,alt_log_server_ip,alt_log_dbname,alt_log_login,alt_log_pass,tables_use_alt_log_db,did_agent_log,campaign_cid_areacodes_enabled,pllb_grouping_limit,did_ra_extensions_enabled,expanded_list_stats,contacts_enabled,call_menu_qualify_enabled,admin_list_counts,allow_voicemail_greeting,svn_revision,queuemetrics_socket,queuemetrics_socket_url,enhanced_disconnect_logging,allow_emails,level_8_disable_add,pass_hash_enabled,pass_key,pass_cost,disable_auto_dial,queuemetrics_record_hold,country_code_list_stats,reload_timestamp,queuemetrics_pause_type,frozen_server_call_clear,callback_time_24hour,allow_chats,chat_url,chat_timeout,enable_languages,language_method,meetme_enter_login_filename,meetme_enter_leave3way_filename,enable_did_entry_list_id,enable_third_webform,agent_debug_logging,default_language,agent_whisper_enabled,user_hide_realtime_enabled,usacan_phone_dialcode_fix,cache_carrier_stats_realtime,oldest_logs_date,log_recording_access,report_default_format,alt_ivr_logging,default_phone_code,admin_row_click,admin_screen_colors,ofcom_uk_drop_calc,agent_screen_colors,script_remove_js,manual_auto_next,user_new_lead_limit,agent_xfer_park_3way,rec_prompt_count,agent_soundboards,web_loader_phone_length,agent_script,agent_chat_screen_colors,enable_auto_reports,enable_pause_code_limits,enable_drop_lists,allow_ip_lists,system_ip_blacklist,agent_push_events,agent_push_url,hide_inactive_lists,allow_manage_active_lists,expired_lists_inactive,did_system_filter,anyone_callback_inactive_lists,enable_gdpr_download_deletion,source_id_display,agent_logout_link,manual_dial_validation,mute_recordings,user_admin_redirect,list_status_modification_confirmation,sip_event_logging,call_quota_lead_ranking,enable_second_script,enable_first_webform,recording_buttons,opensips_cid_name,require_password_length,user_account_emails,outbound_cid_any,entries_per_page,browser_call_alerts,queuemetrics_pausereason,inbound_answer_config,enable_international_dncs,web_loader_phone_strip,manual_dial_phone_strip,daily_call_count_limit,allow_shared_dial,agent_search_method,phone_defaults_container,qc_claim_limit,qc_expire_days,two_factor_auth_hours,two_factor_container,agent_hidden_sound,agent_hidden_sound_volume,agent_hidden_sound_seconds,agent_screen_timer,label_lead_id,label_list_id,label_entry_date,label_gmt_offset_now,label_source_id,label_called_since_last_reset,label_status,label_user,label_date_of_birth,label_country_code,label_last_local_call_time,label_called_count,label_rank,label_owner,label_entry_list_id,call_limit_24hour,allowed_sip_stacks,agent_hide_hangup,allow_web_debug,max_logged_in_agents,user_codes_admin,login_kickall,abandon_check_queue,agent_notifications,demographic_quotas,log_latency_gaps,inbound_credits,weekday_resets,two_factor_auth_agent_hours,highest_lead_id,hopper_hold_inserts,coldstorage_server_ip,coldstorage_dbname,coldstorage_login,coldstorage_pass,coldstorage_port,enhanced_agent_monitoring,agent_hide_dial_fail,agent_man_dial_filter,agent_3way_dial_filter,stereo_recording,recording_dtmf_detection,recording_dtmf_muting,stereo_parallel_recording,db_crashed_tables_check from system_settings;"; + $stmt="SELECT version,install_date,use_non_latin,webroot_writable,enable_queuemetrics_logging,queuemetrics_server_ip,queuemetrics_dbname,queuemetrics_login,queuemetrics_pass,queuemetrics_url,queuemetrics_log_id,queuemetrics_eq_prepend,vicidial_agent_disable,allow_sipsak_messages,admin_home_url,enable_agc_xfer_log,db_schema_version,auto_user_add_value,timeclock_end_of_day,timeclock_last_reset_date,vdc_header_date_format,vdc_customer_date_format,vdc_header_phone_format,vdc_agent_api_active,qc_last_pull_time,enable_vtiger_integration,vtiger_server_ip,vtiger_dbname,vtiger_login,vtiger_pass,vtiger_url,qc_features_active,outbound_autodial_active,outbound_calls_per_second,enable_tts_integration,agentonly_callback_campaign_lock,sounds_central_control_active,sounds_web_server,sounds_web_directory,active_voicemail_server,auto_dial_limit,user_territories_active,allow_custom_dialplan,db_schema_update_date,enable_second_webform,default_webphone,default_external_server_ip,webphone_url,enable_agc_dispo_log,custom_dialplan_entry,queuemetrics_loginout,callcard_enabled,queuemetrics_callstatus,default_codecs,admin_web_directory,label_title,label_first_name,label_middle_initial,label_last_name,label_address1,label_address2,label_address3,label_city,label_state,label_province,label_postal_code,label_vendor_lead_code,label_gender,label_phone_number,label_phone_code,label_alt_phone,label_security_phrase,label_email,label_comments,custom_fields_enabled,slave_db_server,reports_use_slave_db,webphone_systemkey,first_login_trigger,default_phone_registration_password,default_phone_login_password,default_server_password,admin_modify_refresh,nocache_admin,generate_cross_server_exten,queuemetrics_addmember_enabled,queuemetrics_dispo_pause,label_hide_field_logs,queuemetrics_pe_phone_append,test_campaign_calls,agents_calls_reset,default_voicemail_timezone,default_local_gmt,noanswer_log,alt_log_server_ip,alt_log_dbname,alt_log_login,alt_log_pass,tables_use_alt_log_db,did_agent_log,campaign_cid_areacodes_enabled,pllb_grouping_limit,did_ra_extensions_enabled,expanded_list_stats,contacts_enabled,call_menu_qualify_enabled,admin_list_counts,allow_voicemail_greeting,svn_revision,queuemetrics_socket,queuemetrics_socket_url,enhanced_disconnect_logging,allow_emails,level_8_disable_add,pass_hash_enabled,pass_key,pass_cost,disable_auto_dial,queuemetrics_record_hold,country_code_list_stats,reload_timestamp,queuemetrics_pause_type,frozen_server_call_clear,callback_time_24hour,allow_chats,chat_url,chat_timeout,enable_languages,language_method,meetme_enter_login_filename,meetme_enter_leave3way_filename,enable_did_entry_list_id,enable_third_webform,agent_debug_logging,default_language,agent_whisper_enabled,user_hide_realtime_enabled,usacan_phone_dialcode_fix,cache_carrier_stats_realtime,oldest_logs_date,log_recording_access,report_default_format,alt_ivr_logging,default_phone_code,admin_row_click,admin_screen_colors,ofcom_uk_drop_calc,agent_screen_colors,script_remove_js,manual_auto_next,user_new_lead_limit,agent_xfer_park_3way,rec_prompt_count,agent_soundboards,web_loader_phone_length,agent_script,agent_chat_screen_colors,enable_auto_reports,enable_pause_code_limits,enable_drop_lists,allow_ip_lists,system_ip_blacklist,agent_push_events,agent_push_url,hide_inactive_lists,allow_manage_active_lists,expired_lists_inactive,did_system_filter,anyone_callback_inactive_lists,enable_gdpr_download_deletion,source_id_display,agent_logout_link,manual_dial_validation,mute_recordings,user_admin_redirect,list_status_modification_confirmation,sip_event_logging,call_quota_lead_ranking,enable_second_script,enable_first_webform,recording_buttons,opensips_cid_name,require_password_length,user_account_emails,outbound_cid_any,entries_per_page,browser_call_alerts,queuemetrics_pausereason,inbound_answer_config,enable_international_dncs,web_loader_phone_strip,manual_dial_phone_strip,daily_call_count_limit,allow_shared_dial,agent_search_method,phone_defaults_container,qc_claim_limit,qc_expire_days,two_factor_auth_hours,two_factor_container,agent_hidden_sound,agent_hidden_sound_volume,agent_hidden_sound_seconds,agent_screen_timer,label_lead_id,label_list_id,label_entry_date,label_gmt_offset_now,label_source_id,label_called_since_last_reset,label_status,label_user,label_date_of_birth,label_country_code,label_last_local_call_time,label_called_count,label_rank,label_owner,label_entry_list_id,call_limit_24hour,allowed_sip_stacks,agent_hide_hangup,allow_web_debug,max_logged_in_agents,user_codes_admin,login_kickall,abandon_check_queue,agent_notifications,demographic_quotas,log_latency_gaps,inbound_credits,weekday_resets,two_factor_auth_agent_hours,highest_lead_id,hopper_hold_inserts,coldstorage_server_ip,coldstorage_dbname,coldstorage_login,coldstorage_pass,coldstorage_port,enhanced_agent_monitoring,agent_hide_dial_fail,agent_man_dial_filter,agent_3way_dial_filter,stereo_recording,recording_dtmf_detection,recording_dtmf_muting,stereo_parallel_recording,db_crashed_tables_check,xfer_min_container from system_settings;"; $rslt=mysql_to_mysqli($stmt, $link); $row=mysqli_fetch_row($rslt); $version = $row[0]; @@ -44795,6 +44811,7 @@ if ($ADD==311111111111111) $recording_dtmf_muting = $row[246]; $stereo_parallel_recording = $row[247]; $db_crashed_tables_check = $row[248]; + $xfer_min_container = $row[249]; if ($pass_hash_enabled > 0) {$pass_hash_enabled = 'ENABLED';} else {$pass_hash_enabled = 'DISABLED';} @@ -45128,6 +45145,41 @@ if ($ADD==311111111111111) echo ""._QXZ("Agent 3-Way Dialstring Filter").": $NWB#settings-agent_3way_dial_filter$NWE\n"; + ##### get container listings for dynamic XFER_TALK_MIN_MESSAGE container pulldown menu + $stmt="SELECT container_id,container_notes from vicidial_settings_containers where container_type='XFER_TALK_MIN_MESSAGE' $LOGadmin_viewable_groupsSQL order by container_id;"; + $rslt=mysql_to_mysqli($stmt, $link); + $pws_to_print = mysqli_num_rows($rslt); + $xfer_min_message_menu=''; + $pws_selected=0; + $o=0; + while ($pws_to_print > $o) + { + $rowx=mysqli_fetch_row($rslt); + if (mb_strlen($rowx[1],'utf-8')>40) + {$rowx[1] = mb_substr($rowx[1],0,40,'utf-8') . '...';} + $xfer_min_message_menu .= "\n"; + $xfer_min_message_menu .= "\n"; + $o++; + } + + echo ""; + if ($pws_selected > 0) + {echo ""._QXZ("Transfer Talk Minimum Container")."";} + else + {echo _QXZ("Transfer Talk Minimum Container");} + echo ": $NWB#settings-xfer_min_container$NWE\n"; + echo ""._QXZ("Allow Custom Dialplan Entries").": $NWB#settings-allow_custom_dialplan$NWE\n"; echo ""._QXZ("PLLB Grouping Limit").": $NWB#settings-pllb_grouping_limit$NWE\n"; @@ -52020,7 +52072,7 @@ if ($ADD==999990) if (preg_match("/MXAG/",$SShosted_settings)) { $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) { diff --git a/agc_2-X/trunk/www/vicidial/help_documentation.txt b/agc_2-X/trunk/www/vicidial/help_documentation.txt index 5047a7d3..185e3970 100644 --- a/agc_2-X/trunk/www/vicidial/help_documentation.txt +++ b/agc_2-X/trunk/www/vicidial/help_documentation.txt @@ -1,4 +1,4 @@ -# version: 20260126143901 +# version: 20260128083701 users-user User ID 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-. users-pass Password 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. users-force_change_password Force Change Password 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. @@ -699,6 +699,8 @@ inbound_groups-waiting_call_url_on Waiting Call URL On This feature allows inbound_groups-add_lead_url Add Lead URL This web URL address is not seen by the agent, but it is called every time a lead is added to the system through the inbound process. Default is blank. You must begin this URL with VAR if you want to use variables, and of course --A-- and --B-- around the actual variable in the URL where you want to use it. Here is the list of variables that are available for this function. lead_id, vendor_lead_code, list_id, phone_number, phone_code, did_id, did_extension, did_pattern, did_description, uniqueid inbound_groups-add_lead_timezone Add Lead Timezone This is the method that the system will use to determine the current timezone when a lead is created when a call is being routed through this in-group. SERVER will use the current timezone of the server. PHONE_CODE_AREACODE will look up the timezone based on the phone code set in the lead and the areacode of the phone number. Default is SERVER. inbound_groups-default_group_alias Default Group Alias If you have allowed Group Aliases for the campaign that the agent is logged into then this is the group alias that is selected first by default on a call coming in from this inbound group when the agent chooses to use a Group Alias for an outbound manual call. Default is NONE or empty. +inbound_groups-xfer_talk_minimum Transfer Talk Minimum If this option is enabled, and the Transfer Talk Minimum Second field below is greater than 0, then agents using the agent screen will only be able to transfer calls to this In-Group if they have been talking to the customer for at least that number of seconds. Default is DISABLED. You can change the default message that the agent receives when this happens using the Transfer Talk Minimum Container system setting. +inbound_groups-xfer_talk_minimum_sec Transfer Talk Minimum Seconds If this option is greater than 0, and the Transfer Talk Minimum field above is enabled, then agents using the agent screen will only be able to transfer calls to this In-Group if they have been talking to the customer for at least this number of seconds. Default is 0. You can change the default message that the agent receives when this happens using the Transfer Talk Minimum Container system setting. inbound_groups-dial_ingroup_cid Dial In-Group CID If the agent campaign allows for Manual In-Group Dialing, this caller ID number will be sent as the outgoing CID of the phone call if it is populated, overriding the campaign settings and list CID override setting. Default is empty. inbound_groups-extension_appended_cidname Extension Append CID If enabled, the calls coming in from this in-group will have a space and the phone extension of the agent appended to the end of the CallerID name for the call before it is sent to the agent. Default is N for disabled. If USER is part of the option, then the user ID will be used instead of the phone extension. If WITH_CAMPAIGN is used, then another space and the campaign ID will be included as well. inbound_groups-uniqueid_status_display Uniqueid Status Display If enabled, when an agent receives a call through this in-group they will see the uniqueid of the call added to the status line in their agent interface. The PREFIX option will add the prefix, defined below, to the beginning of the uniqueid in the display. Default is DISABLED. If there was already a Uniqueid defined on a call entering this in-group, then the original uniqueid will be displayed. If the PRESERVE option is used and the call is sent to a second agent, the uniqueid and prefix displayed to the first agent will also be displayed to the second agent. @@ -1184,6 +1186,7 @@ settings-web_loader_phone_strip Web Lead Loader Phone Prefix Strip If not D settings-manual_dial_phone_strip Manual Dial Phone Prefix Strip If not DISABLED, this setting will strip the entered characters from the beginning of the phone number of a lead when it is manual dialed by the agent in the agent screen. For example, if this field is set to 0 and the phone number the agent enters to manual dial is 0123456789, then the phone number would be changed to 123456789 before it is dialed and entered into the system. Default is DISABLED. settings-agent_man_dial_filter Agent Manual Dialstring Filter This setting allows you to filter characters from the agent screen manual dial dialstrings before calls are placed. This works by using the following character combinations to denote what to filter out of the dialstring:
DO - Digits only, filter out everything that is not a digit
DPO - Digits and plus sign only, filter out everything that is not a digit or a plus sign
DLO - Digits and letters only, filter out everything that is not a digit or letter
DLPO - Digits and letters and plus sign only, filter out everything that is not a digit or letter or a plus sign
L1 - Remove leading 1, remove the digit 1 from the beginning of the dialstring
L0 - Remove leading 0, remove the digit 1 from the beginning of the dialstring
R10 - Only dial the right 10 characters from the dialstring
NOTE: You can use a combination of the above filters together, separated by dashes, for example: DO-L1 for Digits-only and remove leading 1. Default is blank for disabled.
settings-agent_3way_dial_filter Agent 3-Way Dialstring Filter This setting allows you to filter characters from the agent screen 3-way dial dialstrings before calls are placed. This works by using the following character combinations to denote what to filter out of the 3-way call dialstring:
DO - Digits only, filter out everything that is not a digit
DPO - Digits and plus sign only, filter out everything that is not a digit or a plus sign
DLO - Digits and letters only, filter out everything that is not a digit or letter
DLPO - Digits and letters and plus sign only, filter out everything that is not a digit or letter or a plus sign
L1 - Remove leading 1, remove the digit 1 from the beginning of the dialstring
L0 - Remove leading 0, remove the digit 1 from the beginning of the dialstring
R10 - Only dial the right 10 characters from the dialstring
NOTE: You can use a combination of the above filters together, separated by dashes, for example: DO-L1 for Digits-only and remove leading 1. Default is blank for disabled.
+settings-xfer_min_container Transfer Talk Minimum Container If Allow Closers is enabled on a campaign, and one of the In-Groups that agents are sending calls to has its Transfer Talk Minimum features enabled, then this XFER_TALK_MIN_MESSAGE type container can be used to override the default message the agent receives when they attempt to transfer a call to an In-Group before it has reached its talk time minimum. This agent alert message can use the following variables: --A--group_id--B--, --A--group_name--B--, --A--talk_sec_minimum--B--. The default for this option is blank for disabled, and the default message the agent would receive is:
This transfer In-Group has a minimum talk-time threshold of X seconds. You cannot transfer to this In-Group until your talk time reaches that length.
settings-allow_custom_dialplan Allow Custom Dialplan Entries This option allows you to enter custom dialplan lines into Call Menus, Servers and System Settings. Default is 0 for inactive. settings-pllb_grouping_limit PLLB Grouping Limit Phone Login Load Balancing Grouping Limit. If PLLB Grouping is set to CASCADING at the campaign level then this setting will determine the number of agents acceptable on each server across all campaigns. Default is 100. settings-generate_cross_server_exten Generate Cross-Server Phone Extensions This option if set to 1 will generate dialplan entries for every phone on a multi-server system. Default is 0 for inactive.