Added In-Group in_queue_nanque options

Added optional phone_number search for lead_all_info function
Fix for Inbound Report with optional campaign-select AHT calc

git-svn-id: svn://192.168.202.10@3535 3d104415-ff17-0410-8863-d5cf3c621b8a
This commit is contained in:
mattf
2021-11-08 03:54:53 +00:00
parent 1ca244c6ae
commit 4242aeb447
13 changed files with 297 additions and 90 deletions
+103 -2
View File
@@ -248,6 +248,7 @@
# 210819-0029 - Added vicidial_inbound_caller_codes logging
# 210908-0851 - Added OWNERCUSTOMx options for call_handle_method
# 210911-2008 - Added populate_lead_owner in-group option
# 211106-1523 - Added in_queue_nanque options
#
$script = 'agi-VDAD_ALL_inbound.agi';
@@ -828,7 +829,7 @@ $affected_rows = $dbhA->do($stmtA);
### Grab inbound groups values from the database
$cbc=0;
$stmtA = "SELECT call_time_id,after_hours_action,after_hours_message_filename,after_hours_exten,after_hours_voicemail,welcome_message_filename,moh_context,onhold_prompt_filename,prompt_interval,agent_alert_exten,agent_alert_delay,drop_call_seconds,drop_action,drop_exten,next_agent_call,voicemail_ext,queue_priority,drop_inbound_group,afterhours_xfer_group,play_place_in_line,play_estimate_hold_time,hold_time_option,hold_time_option_seconds,hold_time_option_exten,hold_time_option_voicemail,hold_time_option_xfer_group,hold_time_option_callback_filename,hold_time_option_callback_list_id,hold_recall_xfer_group,no_delay_call_route,play_welcome_message,no_agent_no_queue,no_agent_action,no_agent_action_value,extension_appended_cidname,uniqueid_status_display,uniqueid_status_prefix,hold_time_option_minimum,hold_time_option_press_filename,hold_time_option_callmenu,onhold_prompt_no_block,onhold_prompt_seconds,hold_time_option_no_block,hold_time_option_prompt_seconds,hold_time_second_option,hold_time_third_option,wait_hold_option_priority,wait_time_option,wait_time_second_option,wait_time_third_option,wait_time_option_seconds,wait_time_option_exten,wait_time_option_voicemail,wait_time_option_xfer_group,wait_time_option_callmenu,wait_time_option_callback_filename,wait_time_option_callback_list_id,wait_time_option_press_filename,wait_time_option_no_block,wait_time_option_prompt_seconds,active,calculate_estimated_hold_seconds,add_lead_url,eht_minimum_prompt_filename,eht_minimum_prompt_no_block,eht_minimum_prompt_seconds,on_hook_ring_time,ingroup_recording_override,ingroup_rec_filename,on_hook_cid,action_xfer_cid,drop_callmenu,after_hours_callmenu,max_calls_method,max_calls_count,max_calls_action,populate_lead_ingroup,na_call_url,drop_lead_reset,after_hours_lead_reset,nanq_lead_reset,wait_time_lead_reset,hold_time_lead_reset,routing_initiated_recordings,on_hook_cid_number,populate_lead_province,areacode_filter,areacode_filter_seconds,areacode_filter_action,areacode_filter_action_value,populate_state_areacode,inbound_survey,inbound_survey_filename,inbound_survey_accept_digit,closing_time_action,closing_time_now_trigger,closing_time_filename,closing_time_end_filename,closing_time_lead_reset,closing_time_option_exten,closing_time_option_callmenu,closing_time_option_voicemail,closing_time_option_xfer_group,closing_time_option_callback_list_id,add_lead_timezone,populate_lead_source,populate_lead_vendor,enter_ingroup_url,cid_cb_confirm_number,cid_cb_invalid_filter_phone_group,cid_cb_valid_length,cid_cb_valid_filename,cid_cb_confirmed_filename,cid_cb_enter_filename,cid_cb_you_entered_filename,cid_cb_press_to_confirm_filename,cid_cb_invalid_filename,cid_cb_reenter_filename,cid_cb_error_filename,place_in_line_caller_number_filename,place_in_line_you_next_filename,answer_signal,no_agent_delay,agent_search_method,populate_lead_comments,drop_call_seconds_override,populate_lead_owner FROM vicidial_inbound_groups where group_id = '$channel_group';";
$stmtA = "SELECT call_time_id,after_hours_action,after_hours_message_filename,after_hours_exten,after_hours_voicemail,welcome_message_filename,moh_context,onhold_prompt_filename,prompt_interval,agent_alert_exten,agent_alert_delay,drop_call_seconds,drop_action,drop_exten,next_agent_call,voicemail_ext,queue_priority,drop_inbound_group,afterhours_xfer_group,play_place_in_line,play_estimate_hold_time,hold_time_option,hold_time_option_seconds,hold_time_option_exten,hold_time_option_voicemail,hold_time_option_xfer_group,hold_time_option_callback_filename,hold_time_option_callback_list_id,hold_recall_xfer_group,no_delay_call_route,play_welcome_message,no_agent_no_queue,no_agent_action,no_agent_action_value,extension_appended_cidname,uniqueid_status_display,uniqueid_status_prefix,hold_time_option_minimum,hold_time_option_press_filename,hold_time_option_callmenu,onhold_prompt_no_block,onhold_prompt_seconds,hold_time_option_no_block,hold_time_option_prompt_seconds,hold_time_second_option,hold_time_third_option,wait_hold_option_priority,wait_time_option,wait_time_second_option,wait_time_third_option,wait_time_option_seconds,wait_time_option_exten,wait_time_option_voicemail,wait_time_option_xfer_group,wait_time_option_callmenu,wait_time_option_callback_filename,wait_time_option_callback_list_id,wait_time_option_press_filename,wait_time_option_no_block,wait_time_option_prompt_seconds,active,calculate_estimated_hold_seconds,add_lead_url,eht_minimum_prompt_filename,eht_minimum_prompt_no_block,eht_minimum_prompt_seconds,on_hook_ring_time,ingroup_recording_override,ingroup_rec_filename,on_hook_cid,action_xfer_cid,drop_callmenu,after_hours_callmenu,max_calls_method,max_calls_count,max_calls_action,populate_lead_ingroup,na_call_url,drop_lead_reset,after_hours_lead_reset,nanq_lead_reset,wait_time_lead_reset,hold_time_lead_reset,routing_initiated_recordings,on_hook_cid_number,populate_lead_province,areacode_filter,areacode_filter_seconds,areacode_filter_action,areacode_filter_action_value,populate_state_areacode,inbound_survey,inbound_survey_filename,inbound_survey_accept_digit,closing_time_action,closing_time_now_trigger,closing_time_filename,closing_time_end_filename,closing_time_lead_reset,closing_time_option_exten,closing_time_option_callmenu,closing_time_option_voicemail,closing_time_option_xfer_group,closing_time_option_callback_list_id,add_lead_timezone,populate_lead_source,populate_lead_vendor,enter_ingroup_url,cid_cb_confirm_number,cid_cb_invalid_filter_phone_group,cid_cb_valid_length,cid_cb_valid_filename,cid_cb_confirmed_filename,cid_cb_enter_filename,cid_cb_you_entered_filename,cid_cb_press_to_confirm_filename,cid_cb_invalid_filename,cid_cb_reenter_filename,cid_cb_error_filename,place_in_line_caller_number_filename,place_in_line_you_next_filename,answer_signal,no_agent_delay,agent_search_method,populate_lead_comments,drop_call_seconds_override,populate_lead_owner,in_queue_nanque,in_queue_nanque_exceptions FROM vicidial_inbound_groups where group_id = '$channel_group';";
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
$sthArows=$sthA->rows;
@@ -970,6 +971,8 @@ if ($sthArows > 0)
$populate_lead_comments = $aryA[124];
$drop_call_seconds_override = $aryA[125];
$populate_lead_owner = $aryA[126];
$in_queue_nanque = $aryA[127];
$in_queue_nanque_exceptions = $aryA[128];
if ( (length($place_in_line_caller_number_filename) < 1) || ($place_in_line_caller_number_filename =~ /^NULL$/i) )
{$place_in_line_caller_number_filename='queue-thereare';}
@@ -991,6 +994,47 @@ if ($sthArows > 0)
{$VLcomments = $populate_lead_comments;}
}
}
$in_queue_nanque_trigger=0;
if ($in_queue_nanque =~ /NO_PAUSED_EXCEPTIONS/)
{
$inque_except_valid=0;
$inque_except_SQL='';
if ( (length($in_queue_nanque_exceptions) > 0) && ($in_queue_nanque_exceptions !~ /^DISABLED$/) )
{
$stmtA = "SELECT container_entry FROM vicidial_settings_containers where container_id='$in_queue_nanque_exceptions';";
if ($DBX) {print " |$stmtA|\n";}
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
$sthArows=$sthA->rows;
if ($sthArows > 0)
{
@aryA = $sthA->fetchrow_array;
$IQNEcontainer_entry = $aryA[0];
$IQNEcontainer_entry =~ s/\r|\t|\'|\"//gi;
@IQNEcontainer_array = split(/\n/,$IQNEcontainer_entry);
$IQNEc=0;
foreach(@IQNEcontainer_array)
{
if ( ($IQNEcontainer_array[$IQNEc] !~ /^;/) && (length($IQNEcontainer_array[$IQNEc]) > 0) )
{
$IQNEcontainer_array[$IQNEc] =~ s/[^0-9a-zA-Z]//gi;
if ($inque_except_valid > 0)
{$inque_except_SQL .= ",";}
$inque_except_SQL .= "'$IQNEcontainer_array[$IQNEc]'";
$inque_except_valid++;
}
$IQNEc++;
}
}
$sthA->finish();
}
if ($inque_except_valid < 1)
{
if ($AGILOG) {$agi_string = "in_queue_nanque_exceptions invalid! reverting in_queue_nanque to 'Y' |$in_queue_nanque|$in_queue_nanque_exceptions|"; &agi_output;}
$in_queue_nanque='Y';
}
}
}
$sthA->finish();
@@ -2584,6 +2628,8 @@ while ( ($drop_timer <= $DROP_TIME) && ($wait_in_queue > 0) && ($MCdrop_override
if ($sec < 10) {$sec = "0$sec";}
$hm = "$hour$min";
$hm = ($hm + 0);
### BEGIN check for closing time trigger
if ($closing_time_action !~ /DISABLED/)
{
if ($ct_default_stop =~ /$hm$/)
@@ -2609,6 +2655,47 @@ while ( ($drop_timer <= $DROP_TIME) && ($wait_in_queue > 0) && ($MCdrop_override
if ($AGILOG) {$agi_string = "CLOSING CHECK TRIGGER! ($hm <> $ct_default_stop) |$closing_time_now_trigger|$channel_group|"; &agi_output;}
}
}
### END check for closing time trigger
### BEGIN check for In-Queue No Agent No Queue(in_queue_nanque), start checking after 5 seconds
if ( ($in_queue_nanque =~ /Y|NO_PAUSED|NO_READY/) && ($drop_timer > 5) )
{
$in_queue_nanque_agent_ct=0;
$NPsql='';
$ADsql='';
$NCsql='';
$now_date_epoch = time();
if ($in_queue_nanque =~ /NO_PAUSED/)
{$NPsql = "and status NOT IN('PAUSED')";}
if ( ($in_queue_nanque =~ /NO_PAUSED_EXCEPTIONS/) && ($inque_except_valid > 0) )
{$NPsql = "and ( (status NOT IN('PAUSED')) or (status IN('PAUSED') and pause_code NOT IN($inque_except_SQL)) )";}
if ($in_queue_nanque =~ /NO_READY/)
{$NCsql = "and status IN('READY','CLOSER')";}
if ( ( ($in_queue_nanque =~ /AGENTDIRECT/i) || ($dial_ingroup_flag > 0) ) && (length($agent_only) > 1) )
{$ADsql = "and user='$agent_only'";}
$SQL_group_id=$channel_group; $SQL_group_id =~ s/_/\\_/gi;
$stmtA = "SELECT count(*) FROM vicidial_live_agents where closer_campaigns LIKE \"% $SQL_group_id %\" $NPsql $ADsql $NCsql;";
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
$sthArowsTRIG=$sthA->rows;
$dbhP=$dbhA; $mysql_count='02XXX'; $MEL_aff_rows=$sthArowsTRIG; &mysql_error_logging;
if ($sthArowsTRIG > 0)
{
@aryA = $sthA->fetchrow_array;
$in_queue_nanque_agent_ct = $aryA[0];
}
$sthA->finish();
if ($in_queue_nanque_agent_ct < 1)
{$in_queue_nanque_trigger++;}
else
{$in_queue_nanque_trigger=0;}
if ($AGILOG) {$agi_string = "in_queue_nanque check: $in_queue_nanque_trigger|$in_queue_nanque|$drop_timer|$channel_group|$callerid|$stmtA|"; &agi_output;}
}
### END check for In-Queue No Agent No Queue(in_queue_nanque)
$channel_status = $AGI->channel_status("$channel");
if ($channel_status < 1)
@@ -6126,6 +6213,14 @@ while ( ($drop_timer <= $DROP_TIME) && ($wait_in_queue > 0) && ($MCdrop_override
}
##### END NO AGENT NO QUEUE CHECK #####
### BEGIN in_queue_nanque_trigger process, trigger at 3 seconds of no-agents
if ($in_queue_nanque_trigger > 2)
{
if ($AGILOG) {$agi_string = "-- IQ-NANQUE triggered($drop_timer): |$callerid|$insert_lead_id|$channel|$in_queue_nanque_trigger|$no_agent_no_queue_checked"; &agi_output;}
$NQ_sec=$drop_timer;
&no_agent_no_queue_process;
}
##### wait before looking again for an agent to take the call
if ($wait_in_queue > 0)
@@ -8694,7 +8789,7 @@ sub no_agent_no_queue_process
$sthA->finish();
if ($AGILOG) {$agi_string = "-- NANQUE Check: |$group_agents_count|$stmtA"; &agi_output;}
if ( ($group_agents_count < 1) || ($MCnanque_override > 0) )
if ( ($group_agents_count < 1) || ($MCnanque_override > 0) || ($in_queue_nanque_trigger > 2) )
{
$VHqueryCID = "VA$CIDdate$hour$min$sec$sec";
$NQstatus='NANQUE';
@@ -8706,6 +8801,12 @@ sub no_agent_no_queue_process
$NQterm = $MCterm;
$NQcomments = $MCcomments;
}
if ($in_queue_nanque_trigger > 2)
{
$NQstatus = 'IQNANQ';
$NQterm = 'NOAGENT';
$NQcomments = 'IN-QUEUE NO AGENT DROP';
}
# set the log-user to the agentdirect destination user, if set
if ( ($channel_group =~ /AGENTDIRECT/i) && (length($agent_only) > 1) )
{$LOGuser = $agent_only;}