From a00e2006453570964e507b85576c2b07cec374c7 Mon Sep 17 00:00:00 2001 From: mattf Date: Sun, 22 Jun 2014 13:35:16 +0000 Subject: [PATCH] Added DID pre-filter phone-group redirection and no-agent-ingroup redirection options git-svn-id: svn://192.168.202.10@2135 3d104415-ff17-0410-8863-d5cf3c621b8a --- agc_2-X/trunk/UPGRADE | 5 + agc_2-X/trunk/agi/agi-DID_route.agi | 92 ++++++++++++++++++- .../trunk/extras/MySQL_AST_CREATE_tables.sql | 7 +- agc_2-X/trunk/extras/upgrade_2.10.sql | 8 ++ .../TO_BE_TRANSLATED_2.10.txt | 15 +++ agc_2-X/trunk/www/vicidial/admin.php | 61 ++++++++++-- agc_2-X/trunk/www/vicidial/help.php | 31 +++++++ 7 files changed, 207 insertions(+), 12 deletions(-) diff --git a/agc_2-X/trunk/UPGRADE b/agc_2-X/trunk/UPGRADE index a2b8833c..e0e5e568 100644 --- a/agc_2-X/trunk/UPGRADE +++ b/agc_2-X/trunk/UPGRADE @@ -59,7 +59,12 @@ OTHER CHANGES: 2. Added new Agent API function audio_playback to play audio files from the audio store in an active agent session. See AGENT_API.txt doc for more info. +3. Added option to DIDs to allow routing of calls to a redirect extension if + there are no agents available in a specific in-group +4. Added option to DIDs to allow pre-filtering by a specific filter phone group + before the stardard filtering process. The call can be redirected to a + specific DID entry if there is a match. diff --git a/agc_2-X/trunk/agi/agi-DID_route.agi b/agc_2-X/trunk/agi/agi-DID_route.agi index 619db7e3..f8cc8f7a 100644 --- a/agc_2-X/trunk/agi/agi-DID_route.agi +++ b/agc_2-X/trunk/agi/agi-DID_route.agi @@ -1,6 +1,6 @@ #!/usr/bin/perl # -# agi-DID_route.agi version 2.8 +# agi-DID_route.agi version 2.10 # # runs when a call comes into an inbound context on a trunk. This script will # send the calls to various places depending on the settings for each DID. @@ -34,6 +34,7 @@ # 130926-1549 - Added new queue_log IVR entries for QM # 140126-1138 - Added VMAIL_NO_INST options # 140404-0738 - Added DNC filter options and URL filter DID redirect option +# 140622-0240 - Added no-agent in-group redirect and pre-filter phone group redirect features # $script = 'agi-DID_route.agi'; @@ -200,7 +201,7 @@ $extension =~ s/\'|\"|\\\\|\\\|\\|\\;|\\\;|\;|;//gi; ### Grab DID values from the database $DIDs_in_system=0; -$stmtA = "SELECT did_id,did_pattern,did_description,did_active,did_route,extension,exten_context,voicemail_ext,phone,server_ip,user,user_unavailable_action,user_route_settings_ingroup,menu_id,record_call,filter_inbound_number,filter_phone_group_id,filter_url,filter_action,filter_extension,filter_exten_context,filter_voicemail_ext,filter_phone,filter_server_ip,filter_user,filter_user_unavailable_action,filter_user_route_settings_ingroup,filter_group_id,filter_call_handle_method,filter_agent_search_method,filter_list_id,filter_campaign_id,filter_phone_code,filter_menu_id,filter_clean_cid_number,group_id,filter_dnc_campaign,filter_url_did_redirect FROM vicidial_inbound_dids where did_pattern = '$extension' and did_active='Y';"; +$stmtA = "SELECT did_id,did_pattern,did_description,did_active,did_route,extension,exten_context,voicemail_ext,phone,server_ip,user,user_unavailable_action,user_route_settings_ingroup,menu_id,record_call,filter_inbound_number,filter_phone_group_id,filter_url,filter_action,filter_extension,filter_exten_context,filter_voicemail_ext,filter_phone,filter_server_ip,filter_user,filter_user_unavailable_action,filter_user_route_settings_ingroup,filter_group_id,filter_call_handle_method,filter_agent_search_method,filter_list_id,filter_campaign_id,filter_phone_code,filter_menu_id,filter_clean_cid_number,group_id,filter_dnc_campaign,filter_url_did_redirect,no_agent_ingroup_redirect,no_agent_ingroup_id,no_agent_ingroup_extension,pre_filter_phone_group_id,pre_filter_extension FROM vicidial_inbound_dids where did_pattern = '$extension' and did_active='Y';"; $sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; $sthA->execute or die "executing: $stmtA ", $dbhA->errstr; $sthArows=$sthA->rows; @@ -245,6 +246,11 @@ if ($sthArows > 0) $group_id = $aryA[35]; $filter_dnc_campaign = $aryA[36]; $filter_url_did_redirect = $aryA[37]; + $no_agent_ingroup_redirect = $aryA[38]; + $no_agent_ingroup_id = $aryA[39]; + $no_agent_ingroup_extension = $aryA[40]; + $pre_filter_phone_group_id = $aryA[41]; + $pre_filter_extension = $aryA[42]; $DIDs_in_system++; } @@ -253,7 +259,7 @@ $sthA->finish(); if ($sthArows < 1) { ### Grab DID values from the database for a default DID pattern if there is one - $stmtA = "SELECT did_id,did_pattern,did_description,did_active,did_route,extension,exten_context,voicemail_ext,phone,server_ip,user,user_unavailable_action,user_route_settings_ingroup,menu_id,record_call,filter_inbound_number,filter_phone_group_id,filter_url,filter_action,filter_extension,filter_exten_context,filter_voicemail_ext,filter_phone,filter_server_ip,filter_user,filter_user_unavailable_action,filter_user_route_settings_ingroup,filter_group_id,filter_call_handle_method,filter_agent_search_method,filter_list_id,filter_campaign_id,filter_phone_code,filter_menu_id,filter_clean_cid_number,group_id,filter_dnc_campaign,filter_url_did_redirect FROM vicidial_inbound_dids where did_pattern = 'default' and did_active='Y';"; + $stmtA = "SELECT did_id,did_pattern,did_description,did_active,did_route,extension,exten_context,voicemail_ext,phone,server_ip,user,user_unavailable_action,user_route_settings_ingroup,menu_id,record_call,filter_inbound_number,filter_phone_group_id,filter_url,filter_action,filter_extension,filter_exten_context,filter_voicemail_ext,filter_phone,filter_server_ip,filter_user,filter_user_unavailable_action,filter_user_route_settings_ingroup,filter_group_id,filter_call_handle_method,filter_agent_search_method,filter_list_id,filter_campaign_id,filter_phone_code,filter_menu_id,filter_clean_cid_number,group_id,filter_dnc_campaign,filter_url_did_redirect,no_agent_ingroup_redirect,no_agent_ingroup_id,no_agent_ingroup_extension,pre_filter_phone_group_id,pre_filter_extension FROM vicidial_inbound_dids where did_pattern = 'default' and did_active='Y';"; $sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; $sthA->execute or die "executing: $stmtA ", $dbhA->errstr; $DIDs_in_system=$sthA->rows; @@ -298,6 +304,11 @@ if ($sthArows < 1) $group_id = $aryA[35]; $filter_dnc_campaign = $aryA[36]; $filter_url_did_redirect = $aryA[37]; + $no_agent_ingroup_redirect = $aryA[38]; + $no_agent_ingroup_id = $aryA[39]; + $no_agent_ingroup_extension = $aryA[40]; + $pre_filter_phone_group_id = $aryA[41]; + $pre_filter_extension = $aryA[42]; } $sthA->finish(); } @@ -444,6 +455,42 @@ if (length($filter_clean_cid_number) > 1) ### END clean caller id number ### +##### BEGIN pre-filtering process ##### +if ( (length($pre_filter_phone_group_id)>0) && (length($pre_filter_extension)>0) ) + { + $pre_filter_match_found=0; + if ($AGILOG) {$agi_string = "pre-filtering active: |$extension|$pre_filter_phone_group_id|$pre_filter_extension|$filter_clean_cid_number|$callerid"; &agi_output;} + + $stmtA = "SELECT count(*) FROM vicidial_filter_phone_numbers where filter_phone_group_id='$pre_filter_phone_group_id' and phone_number='$callerid';"; + $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; + $pre_filter_match_found = $aryA[0]; + } + $sthA->finish(); + if ($pre_filter_match_found > 0) + { + $did_route='DID'; + $did_extension = $pre_filter_extension; + $filter_match_found = $pre_filter_extension; + $exten_context = 'trunkinbound'; + $route_type = 'PREFILTER'; + + if ($AGILOG) {$agi_string = "PRE-Filter match found: |$pre_filter_match_found|$pre_filter_phone_group_id|$pre_filter_extension|$did_route|"; &agi_output;} + + ### Update the call in vicidial_did_log + $stmtA = "UPDATE vicidial_did_log SET did_route='PF_$did_route' where uniqueid='$uniqueid' and channel='$channel' and server_ip='$VARserver_ip' and caller_id_number='$callerid' and call_date='$SQLdate';"; + if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;} + $affected_rowsL = $dbhA->do($stmtA); + if ($AGILOG) {$agi_string = "-- DID UPDATE LOG : |$affected_rowsL|$stmtA|"; &agi_output;} + } + } +##### END pre-filtering process ##### + + ##### BEGIN filtering process ##### if ($filter_inbound_number =~ /GROUP|URL|DNC_INTERNAL|DNC_CAMPAIGN/) { @@ -562,6 +609,45 @@ if ($filter_inbound_number =~ /GROUP|URL|DNC_INTERNAL|DNC_CAMPAIGN/) ##### END filtering process ##### +##### BEGIN no-agent redirect process ##### +if ($no_agent_ingroup_redirect =~ /Y|NO_PAUSED|READY_ONLY/) + { + $no_agent_redirect_bypass=1; + if ($AGILOG) {$agi_string = "filtering active: |$extension|$no_agent_ingroup_redirect|$no_agent_ingroup_id|$no_agent_ingroup_extension|$filter_clean_cid_number|"; &agi_output;} + + $NPsql=''; + if ($no_agent_ingroup_redirect =~ /NO_PAUSED/) + {$NPsql = "and status NOT IN('PAUSED')";} + if ($no_agent_ingroup_redirect =~ /READY_ONLY/) + {$NPsql = "and status IN('READY','CLOSER')";} + $stmtA = "SELECT count(*) FROM vicidial_live_agents where closer_campaigns LIKE \"% $no_agent_ingroup_id %\" $NPsql;"; + $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; + $no_agent_redirect_bypass = $aryA[0]; + } + $sthA->finish(); + + if ($no_agent_redirect_bypass < 1) + { + $did_route = 'EXTEN'; + $did_extension = $no_agent_ingroup_extension; + $exten_context = 'default'; + $route_type = 'NOAGENT'; + + if ($AGILOG) {$agi_string = "No-Agent Redirect: |$no_agent_redirect_bypass|$no_agent_ingroup_redirect|$did_extension|$no_agent_ingroup_id|"; &agi_output;} + + ### Update the call in vicidial_did_log + $stmtA = "UPDATE vicidial_did_log SET did_route='NA_$did_route' where uniqueid='$uniqueid' and channel='$channel' and server_ip='$VARserver_ip' and caller_id_number='$callerid' and call_date='$SQLdate';"; + if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;} + $affected_rowsL = $dbhA->do($stmtA); + if ($AGILOG) {$agi_string = "-- DID UPDATE LOG : |$affected_rowsL|$stmtA|"; &agi_output;} + } + } +##### END no-agent redirect process ##### ### Route call to a VICIDIAL-defined phone 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 e80104da..e53596ad 100644 --- a/agc_2-X/trunk/extras/MySQL_AST_CREATE_tables.sql +++ b/agc_2-X/trunk/extras/MySQL_AST_CREATE_tables.sql @@ -1859,6 +1859,11 @@ custom_five VARCHAR(100) default '', user_group VARCHAR(20) default '---ALL---', filter_dnc_campaign VARCHAR(8) default '', filter_url_did_redirect ENUM('Y','N') default 'N', +no_agent_ingroup_redirect ENUM('DISABLED','Y','NO_PAUSED','READY_ONLY') default 'DISABLED', +no_agent_ingroup_id VARCHAR(20) default '', +no_agent_ingroup_extension VARCHAR(50) default '9998811112', +pre_filter_phone_group_id VARCHAR(20) default '', +pre_filter_extension VARCHAR(50) default '', unique index (did_pattern), index (group_id) ) ENGINE=MyISAM; @@ -3269,4 +3274,4 @@ UPDATE vicidial_configuration set value='1766' where name='qc_database_version'; UPDATE system_settings set vdc_agent_api_active='1'; -UPDATE system_settings SET db_schema_version='1381',db_schema_update_date=NOW(),reload_timestamp=NOW(); +UPDATE system_settings SET db_schema_version='1382',db_schema_update_date=NOW(),reload_timestamp=NOW(); diff --git a/agc_2-X/trunk/extras/upgrade_2.10.sql b/agc_2-X/trunk/extras/upgrade_2.10.sql index 7f43a788..d49dd040 100644 --- a/agc_2-X/trunk/extras/upgrade_2.10.sql +++ b/agc_2-X/trunk/extras/upgrade_2.10.sql @@ -5,3 +5,11 @@ UPDATE system_settings SET db_schema_version='1380',version='2.10b0.5',db_schema ALTER TABLE vicidial_users ADD wrapup_seconds_override SMALLINT(4) default '-1'; UPDATE system_settings SET db_schema_version='1381',db_schema_update_date=NOW() where db_schema_version < 1381; + +ALTER TABLE vicidial_inbound_dids ADD no_agent_ingroup_redirect ENUM('DISABLED','Y','NO_PAUSED','READY_ONLY') default 'DISABLED'; +ALTER TABLE vicidial_inbound_dids ADD no_agent_ingroup_id VARCHAR(20) default ''; +ALTER TABLE vicidial_inbound_dids ADD no_agent_ingroup_extension VARCHAR(50) default '9998811112'; +ALTER TABLE vicidial_inbound_dids ADD pre_filter_phone_group_id VARCHAR(20) default ''; +ALTER TABLE vicidial_inbound_dids ADD pre_filter_extension VARCHAR(50) default ''; + +UPDATE system_settings SET db_schema_version='1382',db_schema_update_date=NOW() where db_schema_version < 1382; diff --git a/agc_2-X/trunk/translations/raw_translation_files/TO_BE_TRANSLATED_2.10.txt b/agc_2-X/trunk/translations/raw_translation_files/TO_BE_TRANSLATED_2.10.txt index 23d5c5f9..3e9449ce 100644 --- a/agc_2-X/trunk/translations/raw_translation_files/TO_BE_TRANSLATED_2.10.txt +++ b/agc_2-X/trunk/translations/raw_translation_files/TO_BE_TRANSLATED_2.10.txt @@ -2,6 +2,21 @@ Wrap Seconds Override|| If this setting is set to a number 0 or greater, then it will override the Campaign setting for Wrapup Seconds. This is a setting that is only refreshed in the agent interface at agent login time. Default is -1 for disabled|| This setting also limits the amount of time a 3-way call that has been left by an agent will stay up before it is terminated|| +No-Agent In-Group Redirect|| +This setting allows you to redirect calls on this DID if there are no logged-in agents set to take calls from a specific In-Group. If this field is set to Y or NO_PAUSED and there are no agents logged in to take calls from the specific In-Group the calls will go to the No Agent In-Group Extension set below. The NO_PAUSED option will only send the call to the defined Extension if there are only paused agents in the in-group. The READY_ONLY option will send the call to the defined Extension if there are no agents waiting for calls right now in the in-group. Default is DISABLED. See the No Agent In-Group Extension setting below for more information|| +No-Agent In-Group ID|| +For the No-Agent In-Group Redirect feature above to work properly, an in-Group must be selected from this menu. Default is blank|| +No-Agent In-Group Extension|| +For the No-Agent In-Group Redirect feature above to work properly, an Extension must be set in this field. Default is 9998811112. Below you will see some examples of default extensions that you can use in the system to terminate calls to,|| +ANSWERED, This number is not in service|| +UNANSWERED, signal 1, unallocated number, immediate hangup|| +UNANSWERED, signal 17, busy signal, immediate hangup|| +UNANSWERED, signal 27, out of order, immediate hangup|| +UNANSWERED, ring for 120 seconds then hangup|| +Pre-Filter Phone Group ID|| +This option allows you to filter calls through a Filter Phone Group before going through the standard filtering process below. If a match is found then the call is redirected to the Pre-Filter Phone Group DID as defined below. Default is blank for disabled|| +Pre-Filter Phone Group DID|| +For the Pre-Filter Phone Group ID feature above to work properly, a DID Pattern must be set in this field. Default is blank for disabled. It is recommended that you confirm the DID you enter here is properly set in the system before assigning it|| ########################## CHANGES TO EXISTING PHRASES IN ADMIN TRANSLATION diff --git a/agc_2-X/trunk/www/vicidial/admin.php b/agc_2-X/trunk/www/vicidial/admin.php index 37fcf26e..5b17d8fb 100644 --- a/agc_2-X/trunk/www/vicidial/admin.php +++ b/agc_2-X/trunk/www/vicidial/admin.php @@ -1846,6 +1846,16 @@ if (isset($_GET["timer_alt_seconds"])) {$timer_alt_seconds=$_GET["timer_alt_se elseif (isset($_POST["timer_alt_seconds"])) {$timer_alt_seconds=$_POST["timer_alt_seconds"];} if (isset($_GET["wrapup_seconds_override"])) {$wrapup_seconds_override=$_GET["wrapup_seconds_override"];} elseif (isset($_POST["wrapup_seconds_override"])) {$wrapup_seconds_override=$_POST["wrapup_seconds_override"];} +if (isset($_GET["no_agent_ingroup_redirect"])) {$no_agent_ingroup_redirect=$_GET["no_agent_ingroup_redirect"];} + elseif (isset($_POST["no_agent_ingroup_redirect"])) {$no_agent_ingroup_redirect=$_POST["no_agent_ingroup_redirect"];} +if (isset($_GET["no_agent_ingroup_id"])) {$no_agent_ingroup_id=$_GET["no_agent_ingroup_id"];} + elseif (isset($_POST["no_agent_ingroup_id"])) {$no_agent_ingroup_id=$_POST["no_agent_ingroup_id"];} +if (isset($_GET["no_agent_ingroup_extension"])) {$no_agent_ingroup_extension=$_GET["no_agent_ingroup_extension"];} + elseif (isset($_POST["no_agent_ingroup_extension"])) {$no_agent_ingroup_extension=$_POST["no_agent_ingroup_extension"];} +if (isset($_GET["pre_filter_phone_group_id"])) {$pre_filter_phone_group_id=$_GET["pre_filter_phone_group_id"];} + elseif (isset($_POST["pre_filter_phone_group_id"])) {$pre_filter_phone_group_id=$_POST["pre_filter_phone_group_id"];} +if (isset($_GET["pre_filter_extension"])) {$pre_filter_extension=$_GET["pre_filter_extension"];} + elseif (isset($_POST["pre_filter_extension"])) {$pre_filter_extension=$_POST["pre_filter_extension"];} if (isset($script_id)) {$script_id= strtoupper($script_id);} @@ -2589,6 +2599,9 @@ if ($non_latin < 1) $filter_dnc_campaign = preg_replace('/[^-_0-9a-zA-Z]/','',$filter_dnc_campaign); $manual_dial_search_checkbox = preg_replace('/[^-_0-9a-zA-Z]/','',$manual_dial_search_checkbox); $alt_number_dialing = preg_replace('/[^-_0-9a-zA-Z]/','',$alt_number_dialing); + $no_agent_ingroup_redirect = preg_replace('/[^-_0-9a-zA-Z]/','',$no_agent_ingroup_redirect); + $no_agent_ingroup_id = preg_replace('/[^-_0-9a-zA-Z]/','',$no_agent_ingroup_id); + $pre_filter_phone_group_id = preg_replace('/[^-_0-9a-zA-Z]/','',$pre_filter_phone_group_id); ### ALPHA-NUMERIC and underscore and dash and slash and dot $menu_timeout_prompt = preg_replace('/[^-\/\|\._0-9a-zA-Z]/','',$menu_timeout_prompt); @@ -2660,7 +2673,8 @@ if ($non_latin < 1) $filter_phone_code = preg_replace('/[^\*\#\.\_0-9a-zA-Z]/','',$filter_phone_code); $filter_phone = preg_replace('/[^\*\#\.\_0-9a-zA-Z]/','',$filter_phone); $preset_number = preg_replace('/[^\*\#\.\_0-9a-zA-Z]/','',$preset_number); - + $no_agent_ingroup_extension = preg_replace('/[^\*\#\.\_0-9a-zA-Z]/','',$no_agent_ingroup_extension); + $pre_filter_extension = preg_replace('/[^\*\#\.\_0-9a-zA-Z]/','',$pre_filter_extension); ### ALPHA-NUMERIC and spaces dots, commas, dashes, underscores $adaptive_dl_diff_target = preg_replace('/[^- \.\,\_0-9a-zA-Z]/','',$adaptive_dl_diff_target); @@ -3324,12 +3338,13 @@ else # 140521-2101 - Added timer_alt_seconds and more Manual Auto Dial options # 140612-2153 - branched 2.9 version, raised trunk to 2.10 # 140617-2017 - Added vicidial_users wrapup_seconds_override option +# 140621-2136 - Added DID pre-filter phone-group redirection and no-agent-ingroup redirection options # # make sure you have added a user to the vicidial_users MySQL table with at least user_level 8 to access this page the first time -$admin_version = '2.10-443a'; -$build = '140617-2017'; +$admin_version = '2.10-444a'; +$build = '140621-2136'; $STARTtime = date("U"); $SQLdate = date("Y-m-d H:i:s"); @@ -9007,7 +9022,7 @@ if ($ADD==2411) } else { - $stmt="INSERT INTO vicidial_inbound_dids (did_pattern,did_description,did_active,did_route,extension,exten_context,voicemail_ext,phone,server_ip,user,user_unavailable_action,user_route_settings_ingroup,group_id,call_handle_method,agent_search_method,list_id,campaign_id,phone_code,menu_id,record_call,filter_inbound_number,filter_phone_group_id,filter_url,filter_action,filter_extension,filter_exten_context,filter_voicemail_ext,filter_phone,filter_server_ip,filter_user,filter_user_unavailable_action,filter_user_route_settings_ingroup,filter_group_id,filter_call_handle_method,filter_agent_search_method,filter_list_id,filter_campaign_id,filter_phone_code,filter_menu_id,filter_clean_cid_number,custom_one,custom_two,custom_three,custom_four,custom_five,user_group,filter_dnc_campaign,filter_url_did_redirect) SELECT \"$did_pattern\",\"$did_description\",did_active,did_route,extension,exten_context,voicemail_ext,phone,server_ip,user,user_unavailable_action,user_route_settings_ingroup,group_id,call_handle_method,agent_search_method,list_id,campaign_id,phone_code,menu_id,record_call,filter_inbound_number,filter_phone_group_id,filter_url,filter_action,filter_extension,filter_exten_context,filter_voicemail_ext,filter_phone,filter_server_ip,filter_user,filter_user_unavailable_action,filter_user_route_settings_ingroup,filter_group_id,filter_call_handle_method,filter_agent_search_method,filter_list_id,filter_campaign_id,filter_phone_code,filter_menu_id,filter_clean_cid_number,custom_one,custom_two,custom_three,custom_four,custom_five,user_group,filter_dnc_campaign,filter_url_did_redirect from vicidial_inbound_dids where did_id=\"$source_did\";"; + $stmt="INSERT INTO vicidial_inbound_dids (did_pattern,did_description,did_active,did_route,extension,exten_context,voicemail_ext,phone,server_ip,user,user_unavailable_action,user_route_settings_ingroup,group_id,call_handle_method,agent_search_method,list_id,campaign_id,phone_code,menu_id,record_call,filter_inbound_number,filter_phone_group_id,filter_url,filter_action,filter_extension,filter_exten_context,filter_voicemail_ext,filter_phone,filter_server_ip,filter_user,filter_user_unavailable_action,filter_user_route_settings_ingroup,filter_group_id,filter_call_handle_method,filter_agent_search_method,filter_list_id,filter_campaign_id,filter_phone_code,filter_menu_id,filter_clean_cid_number,custom_one,custom_two,custom_three,custom_four,custom_five,user_group,filter_dnc_campaign,filter_url_did_redirect,no_agent_ingroup_redirect,no_agent_ingroup_id,no_agent_ingroup_extension,pre_filter_phone_group_id,pre_filter_extension) SELECT \"$did_pattern\",\"$did_description\",did_active,did_route,extension,exten_context,voicemail_ext,phone,server_ip,user,user_unavailable_action,user_route_settings_ingroup,group_id,call_handle_method,agent_search_method,list_id,campaign_id,phone_code,menu_id,record_call,filter_inbound_number,filter_phone_group_id,filter_url,filter_action,filter_extension,filter_exten_context,filter_voicemail_ext,filter_phone,filter_server_ip,filter_user,filter_user_unavailable_action,filter_user_route_settings_ingroup,filter_group_id,filter_call_handle_method,filter_agent_search_method,filter_list_id,filter_campaign_id,filter_phone_code,filter_menu_id,filter_clean_cid_number,custom_one,custom_two,custom_three,custom_four,custom_five,user_group,filter_dnc_campaign,filter_url_did_redirect,no_agent_ingroup_redirect,no_agent_ingroup_id,no_agent_ingroup_extension,pre_filter_phone_group_id,pre_filter_extension from vicidial_inbound_dids where did_id=\"$source_did\";"; $rslt=mysql_to_mysqli($stmt, $link); $stmt="SELECT did_id from vicidial_inbound_dids where did_pattern='$did_pattern';"; @@ -12885,7 +12900,7 @@ if ($ADD==4311) { echo "
DID MODIFIED: $did_pattern\n"; - $stmt="UPDATE vicidial_inbound_dids set did_pattern='$did_pattern',did_description='$did_description',did_active='$did_active',did_route='$did_route',extension='$extension',exten_context='$exten_context',voicemail_ext='$voicemail_ext',phone='$phone',server_ip='$server_ip',user='$user',user_unavailable_action='$user_unavailable_action',user_route_settings_ingroup='$user_route_settings_ingroup',group_id='$group_id',call_handle_method='$call_handle_method',agent_search_method='$agent_search_method',list_id='$list_id',campaign_id='$campaign_id',phone_code='$phone_code',menu_id='$menu_id',record_call='$record_call',filter_inbound_number='$filter_inbound_number',filter_phone_group_id='$filter_phone_group_id',filter_url='$filter_url',filter_action='$filter_action',filter_extension='$filter_extension',filter_exten_context='$filter_exten_context',filter_voicemail_ext='$filter_voicemail_ext',filter_phone='$filter_phone',filter_server_ip='$filter_server_ip',filter_user='$filter_user',filter_user_unavailable_action='$filter_user_unavailable_action',filter_user_route_settings_ingroup='$filter_user_route_settings_ingroup',filter_group_id='$filter_group_id',filter_call_handle_method='$filter_call_handle_method',filter_agent_search_method='$filter_agent_search_method',filter_list_id='$filter_list_id',filter_campaign_id='$filter_campaign_id',filter_phone_code='$filter_phone_code',filter_menu_id='$filter_menu_id',filter_clean_cid_number='$filter_clean_cid_number',custom_one='$custom_one',custom_two='$custom_two',custom_three='$custom_three',custom_four='$custom_four',custom_five='$custom_five',user_group='$user_group',filter_dnc_campaign='$filter_dnc_campaign',filter_url_did_redirect='$filter_url_did_redirect' where did_id='$did_id';"; + $stmt="UPDATE vicidial_inbound_dids set did_pattern='$did_pattern',did_description='$did_description',did_active='$did_active',did_route='$did_route',extension='$extension',exten_context='$exten_context',voicemail_ext='$voicemail_ext',phone='$phone',server_ip='$server_ip',user='$user',user_unavailable_action='$user_unavailable_action',user_route_settings_ingroup='$user_route_settings_ingroup',group_id='$group_id',call_handle_method='$call_handle_method',agent_search_method='$agent_search_method',list_id='$list_id',campaign_id='$campaign_id',phone_code='$phone_code',menu_id='$menu_id',record_call='$record_call',filter_inbound_number='$filter_inbound_number',filter_phone_group_id='$filter_phone_group_id',filter_url='$filter_url',filter_action='$filter_action',filter_extension='$filter_extension',filter_exten_context='$filter_exten_context',filter_voicemail_ext='$filter_voicemail_ext',filter_phone='$filter_phone',filter_server_ip='$filter_server_ip',filter_user='$filter_user',filter_user_unavailable_action='$filter_user_unavailable_action',filter_user_route_settings_ingroup='$filter_user_route_settings_ingroup',filter_group_id='$filter_group_id',filter_call_handle_method='$filter_call_handle_method',filter_agent_search_method='$filter_agent_search_method',filter_list_id='$filter_list_id',filter_campaign_id='$filter_campaign_id',filter_phone_code='$filter_phone_code',filter_menu_id='$filter_menu_id',filter_clean_cid_number='$filter_clean_cid_number',custom_one='$custom_one',custom_two='$custom_two',custom_three='$custom_three',custom_four='$custom_four',custom_five='$custom_five',user_group='$user_group',filter_dnc_campaign='$filter_dnc_campaign',filter_url_did_redirect='$filter_url_did_redirect',no_agent_ingroup_redirect='$no_agent_ingroup_redirect',no_agent_ingroup_id='$no_agent_ingroup_id',no_agent_ingroup_extension='$no_agent_ingroup_extension',pre_filter_phone_group_id='$pre_filter_phone_group_id',pre_filter_extension='$pre_filter_extension' where did_id='$did_id';"; $rslt=mysql_to_mysqli($stmt, $link); ### LOG INSERTION Admin Log Table ### @@ -24248,7 +24263,7 @@ if ($ADD==3311) $didSQL = "did_id='$did_id'"; if ( (strlen($did_id)<1) and (strlen($did_pattern)>0) ) {$didSQL = "did_pattern='$did_pattern'";} - $stmt="SELECT did_id,did_pattern,did_description,did_active,did_route,extension,exten_context,voicemail_ext,phone,server_ip,user,user_unavailable_action,user_route_settings_ingroup,group_id,call_handle_method,agent_search_method,list_id,campaign_id,phone_code,menu_id,record_call,filter_inbound_number,filter_phone_group_id,filter_url,filter_action,filter_extension,filter_exten_context,filter_voicemail_ext,filter_phone,filter_server_ip,filter_user,filter_user_unavailable_action,filter_user_route_settings_ingroup,filter_group_id,filter_call_handle_method,filter_agent_search_method,filter_list_id,filter_campaign_id,filter_phone_code,filter_menu_id,filter_clean_cid_number,custom_one,custom_two,custom_three,custom_four,custom_five,user_group,filter_dnc_campaign,filter_url_did_redirect from vicidial_inbound_dids where $didSQL $LOGadmin_viewable_groupsSQL;"; + $stmt="SELECT did_id,did_pattern,did_description,did_active,did_route,extension,exten_context,voicemail_ext,phone,server_ip,user,user_unavailable_action,user_route_settings_ingroup,group_id,call_handle_method,agent_search_method,list_id,campaign_id,phone_code,menu_id,record_call,filter_inbound_number,filter_phone_group_id,filter_url,filter_action,filter_extension,filter_exten_context,filter_voicemail_ext,filter_phone,filter_server_ip,filter_user,filter_user_unavailable_action,filter_user_route_settings_ingroup,filter_group_id,filter_call_handle_method,filter_agent_search_method,filter_list_id,filter_campaign_id,filter_phone_code,filter_menu_id,filter_clean_cid_number,custom_one,custom_two,custom_three,custom_four,custom_five,user_group,filter_dnc_campaign,filter_url_did_redirect,no_agent_ingroup_redirect,no_agent_ingroup_id,no_agent_ingroup_extension,pre_filter_phone_group_id,pre_filter_extension from vicidial_inbound_dids where $didSQL $LOGadmin_viewable_groupsSQL;"; if ($DB) {echo "$stmt\n";} $rslt=mysql_to_mysqli($stmt, $link); $row=mysqli_fetch_row($rslt); @@ -24301,7 +24316,11 @@ if ($ADD==3311) $user_group = $row[46]; $filter_dnc_campaign = $row[47]; $filter_url_did_redirect = $row[48]; - + $no_agent_ingroup_redirect = $row[49]; + $no_agent_ingroup_id = $row[50]; + $no_agent_ingroup_extension = $row[51]; + $pre_filter_phone_group_id = $row[52]; + $pre_filter_extension = $row[53]; $stmt="SELECT campaign_id,campaign_name from vicidial_campaigns $whereLOGallowed_campaignsSQL order by campaign_id;"; $rslt=mysql_to_mysqli($stmt, $link); @@ -24361,12 +24380,15 @@ if ($ADD==3311) $Dgroups_selected=0; $FDgroups_menu=''; $FDgroups_selected=0; + $PFDgroups_menu=''; + $PFDgroups_selected=0; $o=0; while ($Dgroups_to_print > $o) { $rowx=mysqli_fetch_row($rslt); $Dgroups_menu .= "\n"; $FDgroups_menu .= "value=\"$rowx[0]\">$rowx[0] - $rowx[1]\n"; + $PFDgroups_menu .= "value=\"$rowx[0]\">$rowx[0] - $rowx[1]\n"; $o++; } if ($Dgroups_selected < 1) @@ -24389,6 +24417,10 @@ if ($ADD==3311) {$FDgroups_menu .= "\n";} else {$FDgroups_menu .= "\n";} + if ($PFDgroups_selected < 1) + {$PFDgroups_menu .= "\n";} + else + {$PFDgroups_menu .= "\n";} echo "
MODIFY A DID RECORD: $row[0]
\n"; @@ -24449,7 +24481,6 @@ if ($ADD==3311) echo "Clean CID Number: $NWB#inbound_dids-filter_clean_cid_number$NWE\n"; - echo "Filter Inbound Number: $NWB#inbound_dids-filter_inbound_number$NWE\n"; $stmt="SELECT filter_phone_group_id,filter_phone_group_name from vicidial_filter_phone_groups $whereLOGadmin_viewable_groupsSQL order by filter_phone_group_id;"; $rslt=mysql_to_mysqli($stmt, $link); @@ -24463,6 +24494,20 @@ if ($ADD==3311) $i++; } + echo "No-Agent In-Group Redirect: $NWB#inbound_dids-no_agent_ingroup_redirect$NWE\n"; + + echo "No-Agent In-Group ID: $NWB#inbound_dids-no_agent_ingroup_id$NWE\n"; + + echo "No-Agent In-Group Extension: $NWB#inbound_dids-no_agent_ingroup_extension$NWE\n"; + + echo "Pre-Filter Phone Group ID: $NWB#inbound_dids-pre_filter_phone_group_id$NWE\n"; + + echo "Pre-Filter Phone Group DID: $NWB#inbound_dids-pre_filter_extension$NWE\n"; + + echo "Filter Inbound Number: $NWB#inbound_dids-filter_inbound_number$NWE\n"; + echo "Filter Phone Group ID: $NWB#inbound_dids-filter_phone_group_id$NWE\n"; echo "Filter URL: $NWB#inbound_dids-filter_url$NWE\n"; diff --git a/agc_2-X/trunk/www/vicidial/help.php b/agc_2-X/trunk/www/vicidial/help.php index 70d16e08..d3dd0e40 100644 --- a/agc_2-X/trunk/www/vicidial/help.php +++ b/agc_2-X/trunk/www/vicidial/help.php @@ -18,6 +18,7 @@ # 140509-2211 - Added frozen_server_call_clear # 140521-2020 - Changed alt_number_dialing and added timer_alt_seconds # 140617-2021 - Added vicidial_users wrapup_seconds_override option +# 140621-2151 - Added inbound did new filtering options # @@ -2492,6 +2493,36 @@ if ($SSqc_features_active > 0)
Clean CID Number - This field allows you to specify a number of digits to restrict the incoming caller ID number to by putting an R in front of the number of digits, for example to restrict to the right 10 digits you would enter in R10. You can also use this feature to remove only a leading digit or digits by putting an L in front of the specific digits that you want to remove, for example to remove a 1 as the first digit you would enter in L1. Default is empty. If more than one rule is specified make sure you separate them with a space and the R will run before the L. +
+ +
+No-Agent In-Group Redirect - This setting allows you to redirect calls on this DID if there are no logged-in agents set to take calls from a specific In-Group. If this field is set to Y or NO_PAUSED and there are no agents logged in to take calls from the specific In-Group the calls will go to the No Agent In-Group Extension set below. The NO_PAUSED option will only send the call to the defined Extension if there are only paused agents in the in-group. The READY_ONLY option will send the call to the defined Extension if there are no agents waiting for calls right now in the in-group. Default is DISABLED. See the No Agent In-Group Extension setting below for more information. + +
+
+
+No-Agent In-Group ID - For the No-Agent In-Group Redirect feature above to work properly, an in-Group must be selected from this menu. Default is blank. + +
+
+
+No-Agent In-Group Extension - For the No-Agent In-Group Redirect feature above to work properly, an Extension must be set in this field. Default is 9998811112. Below you will see some examples of default extensions that you can use in the system to terminate calls to,
+ - 9998811112 - ANSWERED, This number is not in service
+ - 9993333333 - UNANSWERED, signal 1, unallocated number, immediate hangup
+ - 9998888888 - UNANSWERED, signal 17, busy signal, immediate hangup
+ - 9994444444 - UNANSWERED, signal 27, out of order, immediate hangup
+ - 9995555555 - UNANSWERED, ring for 120 seconds then hangup
+ +
+
+
+Pre-Filter Phone Group ID - This option allows you to filter calls through a Filter Phone Group before going through the standard filtering process below. If a match is found then the call is redirected to the Pre-Filter Phone Group DID as defined below. Default is blank for disabled. + +
+
+
+Pre-Filter Phone Group DID - For the Pre-Filter Phone Group ID feature above to work properly, a DID Pattern must be set in this field. Default is blank for disabled. It is recommended that you confirm the DID you enter here is properly set in the system before assigning it. +