Added List Weekday Resets, allowing for automatic list resets scheduled by day-of-the-week on a per-list basis.

git-svn-id: svn://192.168.202.10@3731 3d104415-ff17-0410-8863-d5cf3c621b8a
This commit is contained in:
mattf
2023-05-25 12:17:50 +00:00
parent 5695cdb5f6
commit 709434cd00
5 changed files with 135 additions and 11 deletions
+6
View File
@@ -797,6 +797,12 @@ OTHER CHANGES:
age-group, political-party, etc... For more information on this set of
features, read the DEMOGRAPHIC_QUOTAS.txt document.
224. Added Inbound Calls Credits, allowing per-User setting of a number of
inbound calls that can be handled, until reset by a manager.
225. Added List Weekday Resets, allowing for automatic list resets scheduled by
day-of-the-week on a per-list basis.
+110 -5
View File
@@ -164,9 +164,10 @@
# 230412-1405 - Added daily rolling of vicidial_agent_notifications table, truncating of vicidial_agent_notifications_queue table
# 230420-2321 - Added latency live agent detail updates and log rolling nightly
# 230511-0825 - Added log_latency_gaps trigger, demographic_quotas trigger
# 230524-2144 - Added weekday_resets
#
$build = '230511-0825';
$build = '230524-2144';
$DB=0; # Debug flag
$teodDB=0; # flag to log Timeclock End of Day processes to log file
@@ -461,7 +462,7 @@ $dbhA = DBI->connect("DBI:mysql:$VARDB_database:$VARDB_server:$VARDB_port", "$VA
##### Get the settings from system_settings #####
$stmtA = "SELECT sounds_central_control_active,active_voicemail_server,custom_dialplan_entry,default_codecs,generate_cross_server_exten,voicemail_timezones,default_voicemail_timezone,call_menu_qualify_enabled,allow_voicemail_greeting,reload_timestamp,meetme_enter_login_filename,meetme_enter_leave3way_filename,allow_chats,enable_auto_reports,enable_drop_lists,expired_lists_inactive,sip_event_logging,call_quota_lead_ranking,inbound_answer_config,log_latency_gaps,demographic_quotas FROM system_settings;";
$stmtA = "SELECT sounds_central_control_active,active_voicemail_server,custom_dialplan_entry,default_codecs,generate_cross_server_exten,voicemail_timezones,default_voicemail_timezone,call_menu_qualify_enabled,allow_voicemail_greeting,reload_timestamp,meetme_enter_login_filename,meetme_enter_leave3way_filename,allow_chats,enable_auto_reports,enable_drop_lists,expired_lists_inactive,sip_event_logging,call_quota_lead_ranking,inbound_answer_config,log_latency_gaps,demographic_quotas,weekday_resets FROM system_settings;";
# print "$stmtA\n";
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
@@ -490,6 +491,7 @@ if ($sthArows > 0)
$SSinbound_answer_config = $aryA[18];
$SSlog_latency_gaps = $aryA[19];
$SSdemographic_quotas = $aryA[20];
$SSweekday_resets = $aryA[21];
}
$sthA->finish();
if ($DBXXX > 0) {print "SYSTEM SETTINGS: $sounds_central_control_active|$active_voicemail_server|$SScustom_dialplan_entry|$SSdefault_codecs\n";}
@@ -5966,7 +5968,7 @@ if ($AST_VDadapt > 0)
}
$sthA->finish();
if ($DBX) {print "RESET LIST: $i|$reset_test";}
if ($DBX) {print "RESET LIST: $i|$reset_test\n";}
$i=0;
while ($sthBrows > $i)
@@ -5987,7 +5989,7 @@ if ($AST_VDadapt > 0)
$stmtA="INSERT INTO vicidial_admin_log set event_date='$now_date', user='VDAD', ip_address='1.1.1.1', event_section='LISTS', event_type='RESET', record_id='$list_id[$i]', event_code='ADMIN RESET LIST', event_sql=\"$SQL_log\", event_notes='$affected_rowsB leads reset, list resets today: $resets_today[$i]';";
$Iaffected_rows = $dbhA->do($stmtA);
if ($DB) {print "FINISHED: $affected_rows|$Iaffected_rows|$stmtA";}
if ($DB) {print "FINISHED: $affected_rows|$Iaffected_rows|$stmtA\n";}
}
else
{
@@ -5995,12 +5997,115 @@ if ($AST_VDadapt > 0)
$stmtA="INSERT INTO vicidial_admin_log set event_date='$now_date', user='VDAD', ip_address='1.1.1.1', event_section='LISTS', event_type='RESET', record_id='$list_id[$i]', event_code='ADMIN RESET LIST FAILED', event_sql=\"Reset Limit Reached $daily_reset_limit[$i] / $resets_today[$i]\", event_notes='Reset failed';";
$Iaffected_rows = $dbhA->do($stmtA);
if ($DB) {print "FINISHED: $affected_rows|$Iaffected_rows|$stmtA";}
if ($DB) {print "FINISHED: $affected_rows|$Iaffected_rows|$stmtA\n";}
}
$i++;
}
##### BEGIN Check weekday_resets #####
if ($SSweekday_resets > 0)
{
$weekday_resets_ct=0;
$stmtA = "SELECT list_id,daily_reset_limit,resets_today,weekday_resets_container FROM vicidial_lists where weekday_resets_container NOT IN('','DISABLED');";
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
$sthBrows=$sthA->rows;
$i=0;
while ($sthBrows > $i)
{
@aryA = $sthA->fetchrow_array;
$L_list_id[$i] = $aryA[0];
$L_daily_reset_limit[$i] = $aryA[1];
$L_resets_today[$i] = $aryA[2];
$L_weekday_resets_container[$i] = $aryA[3];
$i++;
}
$sthA->finish();
if ($DBX) {print "WEEKDAY RESET LISTS TO CHECK: $i\n";}
$i=0;
while ($sthBrows > $i)
{
if ( ($L_daily_reset_limit[$i] > $L_resets_today[$i]) || ($L_daily_reset_limit[$i] < 0) )
{
### list resets not over limit, check the settings container to see if we should reset the list
$reset_this_list=0;
$stmtA = "SELECT container_entry FROM vicidial_settings_containers where container_id='$L_weekday_resets_container[$i]';";
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
$sthSCrows=$sthA->rows;
if ($DB) {print "Checking Weekday Reset Container for list ID: $L_list_id[$i] - |$sthSCrows|$stmtA|\n";}
if ($sthSCrows > 0)
{
@aryA = $sthA->fetchrow_array;
$TEMPcontainer_entry = $aryA[0];
$TEMPcontainer_entry =~ s/\\//gi;
if (length($TEMPcontainer_entry) > 5)
{
@container_lines = split(/\n/,$TEMPcontainer_entry);
$c=0;
foreach(@container_lines)
{
$container_lines[$c] =~ s/;.*|\r|\t| //gi;
if (length($container_lines[$c]) > 5)
{
# define call_quota_run_time settings
if ( ($wday eq '1') && ($container_lines[$c] =~ /^monday/i) && ($container_lines[$c] =~ /$reset_test/) )
{$reset_this_list++; print " DB: List monday reset found: $i|$c|$container_lines[$c]|$reset_test|$wday|\n";}
if ( ($wday eq '2') && ($container_lines[$c] =~ /^tuesday/i) && ($container_lines[$c] =~ /$reset_test/) )
{$reset_this_list++; print " DB: List tuesday reset found: $i|$c|$container_lines[$c]|$reset_test|$wday|\n";}
if ( ($wday eq '3') && ($container_lines[$c] =~ /^wednesday/i) && ($container_lines[$c] =~ /$reset_test/) )
{$reset_this_list++; print " DB: List wednesday reset found: $i|$c|$container_lines[$c]|$reset_test|$wday|\n";}
if ( ($wday eq '4') && ($container_lines[$c] =~ /^thursday/i) && ($container_lines[$c] =~ /$reset_test/) )
{$reset_this_list++; print " DB: List thursday reset found: $i|$c|$container_lines[$c]|$reset_test|$wday|\n";}
if ( ($wday eq '5') && ($container_lines[$c] =~ /^friday/i) && ($container_lines[$c] =~ /$reset_test/) )
{$reset_this_list++; print " DB: List friday reset found: $i|$c|$container_lines[$c]|$reset_test|$wday|\n";}
if ( ($wday eq '6') && ($container_lines[$c] =~ /^saturday/i) && ($container_lines[$c] =~ /$reset_test/) )
{$reset_this_list++; print " DB: List saturday reset found: $i|$c|$container_lines[$c]|$reset_test|$wday|\n";}
if ( ($wday eq '0') && ($container_lines[$c] =~ /^sunday/i) && ($container_lines[$c] =~ /$reset_test/) )
{$reset_this_list++; print " DB: List sunday reset found: $i|$c|$container_lines[$c]|$reset_test|$wday|\n";}
}
$c++;
}
}
}
$sthA->finish();
if ($reset_this_list > 0)
{
$stmtA="UPDATE vicidial_lists set resets_today=(resets_today + 1) where list_id='$L_list_id[$i]';";
$affected_rows = $dbhA->do($stmtA);
$stmtB="UPDATE vicidial_list set called_since_last_reset='N' where list_id='$L_list_id[$i]';";
$affected_rowsB = $dbhA->do($stmtB);
$SQL_log = "$stmtA|$stmtB|";
$SQL_log =~ s/;|\\|\'|\"//gi;
$L_resets_today[$i] = ($L_resets_today[$i] + 1);
if ($DB) {print "List Weekday Reset DONE: $L_list_id[$i]($affected_rows|$affected_rowsB)\n";}
$stmtA="INSERT INTO vicidial_admin_log set event_date='$now_date', user='VDAD', ip_address='1.1.1.1', event_section='LISTS', event_type='RESET', record_id='$L_list_id[$i]', event_code='ADMIN RESET LIST', event_sql=\"$SQL_log\", event_notes='$affected_rowsB leads reset, list resets today: $L_resets_today[$i], weekday reset';";
$Iaffected_rows = $dbhA->do($stmtA);
if ($DB) {print "FINISHED: $affected_rows|$Iaffected_rows|$stmtA";}
}
else
{
if ($DBX) {print "List No Weekday Reset found: $L_list_id[$i]|$L_weekday_resets_container[$i] \n";}
}
}
else
{
if ($DBX) {print "List Reset Over Limit: $L_list_id[$i](Reset Limit $L_daily_reset_limit[$i] / $L_resets_today[$i])\n";}
}
$i++;
}
if ($DB) {print "Weekday resets complete: $weekday_resets_ct/$i \n";}
}
##### END Check weekday_resets #####
### set expired lists to inactive, only run at 12 minutes past the hour
if ( ($SSexpired_lists_inactive > 0) && ($min =~ /12/) )
{
@@ -1163,7 +1163,8 @@ qc_statuses_id VARCHAR(20) DEFAULT '',
qc_web_form_address VARCHAR(255) DEFAULT '',
auto_alt_threshold TINYINT(3) default '-1',
cid_group_id VARCHAR(20) default '---DISABLED---',
dial_prefix VARCHAR(20) default ''
dial_prefix VARCHAR(20) default '',
weekday_resets_container VARCHAR(40) default 'DISABLED'
) ENGINE=MyISAM;
CREATE TABLE vicidial_statuses (
@@ -2001,7 +2002,8 @@ abandon_check_queue ENUM('0','1','2','3','4','5','6','7') default '0',
agent_notifications ENUM('0','1','2','3','4','5','6','7') default '0',
demographic_quotas ENUM('0','1','2','3','4','5','6','7') default '0',
log_latency_gaps ENUM('0','1','2','3','4','5','6','7') default '1',
inbound_credits ENUM('0','1','2','3','4','5','6','7') default '0'
inbound_credits ENUM('0','1','2','3','4','5','6','7') default '0',
weekday_resets ENUM('0','1','2','3','4','5','6','7') default '0'
) ENGINE=MyISAM;
CREATE TABLE vicidial_campaigns_list_mix (
@@ -5408,6 +5410,7 @@ INSERT INTO vicidial_settings_containers(container_id,container_notes,container_
INSERT INTO vicidial_settings_containers(container_id,container_notes,container_type,user_group,container_entry) VALUES ('CONFETTI_SETTINGS', 'Confetti settings for screen display', 'OTHER', '---ALL---', '; Confetti settings, to add visual interest to certain events\r\n; duration is how long the confetti animation runs, maxParticleCount is the\r\n; max number of confetti \"pieces\", and particleSpeed is how fast they float\r\nduration => 2\r\nmaxParticleCount => 2350\r\nparticleSpeed => 2\r\n');
INSERT INTO vicidial_settings_containers(container_id,container_notes,container_type,user_group,container_entry) VALUES ('HOPPER_CLI_FLAGS', 'Comand-line flags for hopper process', 'PERL_CLI', '---ALL---', '');
INSERT INTO vicidial_settings_containers(container_id,container_notes,container_type,user_group,container_entry) VALUES ('AGENT_LATENCY_LOGGING','Default agent latency logging settings','PERL_CLI','---ALL---','minimum_gap => 30\r\nemail_sender => \r\nemail_list => \r\nemail_subject => Agent Network Alert');
INSERT INTO vicidial_settings_containers(container_id,container_notes,container_type,user_group,container_entry) VALUES ('EXAMPLE_LIST_WEEKDAY_RESETS','Example Weekday List Resets Container settings','LIST_WEEKDAY_RESETS','---ALL---','; weekday => reset-times in 24-hour time separated by dashes\r\nmonday => 0830-1230-1800\r\ntuesday => 0900-1400-1830\r\nwednesday => 0930-1200-1730-1900\r\nthursday => 1030-1330-1900\r\nfriday => 0800-1300-1530\r\nsaturday => 0930-1100\r\nsunday => 1000');
INSERT INTO `vicidial_settings_containers` VALUES ('VERM_STATUS_NAMES_OVERRIDE','Override dialer status names in enhanced reporting','OTHER','---ALL---','; For each status name you want overridden, type the status followed by\r\n; a pipe, then the new status name\r\n; Ex:\r\n; NZ|Taumatawhakatangihangakoauauotamateaturipukakapikimaungahoronukupoka\r\n201214|Request To Cancel\r\n210200|No Answer-Incomplete Call\r\n210201|Contact Established\r\n210202|Provider Review - HB\r\n210203|Promise to Pay\r\n210204|Setup Payment Plan\r\n210205|Research-Inquiry\r\n210206|Voice Mail Left - HB\r\n210207|Do Not Call\r\n210208|Appeal Verification\r\n210209|Bad Phone\r\n210210|Bad Address\r\n210211|Direct Pay Verification\r\n210213|Provider Approved\r\n210215|Update Notes Only\r\n210216|Voicemail-No Status Change\r\n210217|Sent Letter Request - HB\r\n210218|Auto VoiceMail Left - HB\r\n210219|Auto VoiceMail-No Status Change\r\n210302|Provider Review - LB\r\n210306|Voice Mail Left - LB\r\n210317|Sent Letter Request - LB\r\n210318|Auto VoiceMail Left - LB\r\n211503|Provider - COVID-19\r\n211603|Transferred Call to MLA\r\n'), ('VERM_REPORT_OPTIONS','Container for customizing VERM report output','OTHER','---ALL---','; This is the report queue used if none is chosen by the user\r\n; It\'s preloaded in some forms as well\r\nVERM_default_report_queue => ALL\r\n\r\n; If there are statuses to exclude from reports, list them here\r\n; Separate with commas. Default is AFTHRS\r\nexc_addtl_statuses => AFTHRS\r\n\r\n; Set the below value to 1 (or anything non-blank/non-zero) in order to \r\n; show the agents ID in addition to their full name in the report results\r\nshow_full_agent_info => 1\r\n\r\n; Some reports count \"lost\" calls - which are defined by the below variable\r\n; listing what you define as \"lost\" dispos. Separate with commas.\r\nlost_statuses => LOST,210208,DISPO\r\n\r\n; You can create a detailed IVR survey report for ingroups by defining\r\n; \"ivr_survey_ingroups_detail\" and \"ivr_survey_ingroups_voicemails.\"\r\n; For \"details\", supply an ingroup used as a tracking group on call menus.\r\n; Then, add a pipe and after that list all call menus that use the ingroup\r\n; as the tracking group, separating each with a comma\r\n; To track whether the calls went to voicemail, list every call menu/option\r\n; combination that goes to voicemail, separating the call menu from the \r\n; option with a pipe. One callmenu/option combo per line.\r\nivr_survey_ingroups_detail => 521205|561401,561402,561403,561404,561505\r\nivr_survey_ingroups_voicemails => 561505|t\r\n\r\n; #####################################################\r\n; # ALL of the below are used in the wallboard report #\r\n; #####################################################\r\nVERM_default_outb_widget_queue => ALL_OUT\r\nVERM_default_inb_widget_queue1 => 514915v_USA_Shared\r\nVERM_default_inb_widget_queue2 => 515915v_MLA_Shared\r\n\r\n; Used specifically for the SLA widget\r\n; Uses ingroups - separate multiple ingroups by commas\r\n; Comment out or leave blank to count all ingroups\r\nSLA_LEVEL_PCT_ingroups => 514915v,515915v\r\n\r\n; This removes remote agents from the wallboard reports\r\n; Comment out to include remote agents (or set to zero)\r\nomit_remote_agents => 1\r\n\r\n\r\n; #### AUTO DOWNLOAD ####\r\n; If the "total calls" value on any report requested exceeds the below \r\n; limit, automatically download the three "DETAILS" reports instead\r\n; of attempting to display that many records on-screen\r\nauto_download_limit => 50000\r\n\r\n; #### OUTCOMES report overrides ####\r\n; Use "outcome_lagged_status_overrides" for conditions where the call \r\n; record in the vicidial_log or vicidial_closer_log table has no uniqueid\r\n; value despite having a status/outcome, which can indicate a call \r\n; affected by network lag for certain statuses. This will change the call \r\n; status to "LAGGED". Separate statuses with commas. Default is the \r\n; automatic "PU" status.\r\noutcome_lagged_status_overrides => PU\r\n\r\n; Use "unknown_network_statuses" to change call statuses to read "Network/\r\n; LAGGED" on the OUTCOMES report. Separate statuses with commas.\r\n; IMPORTANT: if you are using the outcome_lagged_status_overrides option \r\n; above, make sure "LAGGED" is one of the unknown_network_statuses here\r\n; unknown_network_statuses => LAGGED\r\n\r\n; Use "outcome_status_overrides" to change one status to another on the \r\n; OUTCOMES report. Overrides are comma-separated pairs of dispositions \r\n; where the first disposition is the disposition to change, and the second\r\n; is the disposition to change to. Separate pairs with a pipe character as\r\n; in the below example. Off by default.\r\n; outcome_status_overrides => CBHOLD,DISPO|XFER,AL');
INSERT INTO `wallboard_widgets` VALUES ('queues_widget_1','AGENTS_AND_QUEUES','queues','','TEXT',5,'N',1,'Queue Information','','',NULL,'','',NULL,2),('queues_widget_0','AGENTS_AND_QUEUES','queues','','LOGO',2,'N',1,NULL,'','',NULL,'','',NULL,1),('queues_widget_2','AGENTS_AND_QUEUES','queues','SLA Level %','SLA_LEVEL_PCT',1,'N',1,NULL,'','>60',NULL,'','',NULL,3),('queues_widget_3','AGENTS_AND_QUEUES','queues','Outbound calls','LIVE_QUEUE_INFO',1,'N',1,'','201201','','','','','yellow_alarm,|red_alarm,',4),('queues_widget_4','AGENTS_AND_QUEUES','queues','USA Ded Inbound','LIVE_QUEUE_INFO',1,'N',1,'','ALL_IN','','','','','yellow_alarm,|red_alarm,',5),('queues_widget_5','AGENTS_AND_QUEUES','queues','MLA Ded Inbound','LIVE_QUEUE_INFO',1,'N',1,'','514911','','','','','yellow_alarm,|red_alarm,',6),('queues_widget_6','AGENTS_AND_QUEUES','queues','N Waiting Calls','N_WAITING_CALLS',1,'N',1,NULL,'','',NULL,'','',NULL,7),('queues_widget_7','AGENTS_AND_QUEUES','queues','Offered Calls','OFFERED_CALLS',1,'N',1,NULL,'','',NULL,'','',NULL,8),('queues_widget_8','AGENTS_AND_QUEUES','queues','Answered Calls','ANSWERED_CALLS',1,'N',1,NULL,'','',NULL,'','',NULL,9),('queues_widget_9','AGENTS_AND_QUEUES','queues','Lost Calls','LOST_CALLS',1,'N',1,NULL,'','',NULL,'','',NULL,10),('queues_widget_10','AGENTS_AND_QUEUES','queues','Longest Wait','LONGEST_WAIT',1,'N',1,NULL,'','',NULL,'','',NULL,11),('queues_widget_11','AGENTS_AND_QUEUES','queues','Live Queues','LIVE_QUEUES',1,'Y',1,NULL,'','',NULL,'','',NULL,12),('queues_widget_12','AGENTS_AND_QUEUES','queues','Live Calls','LIVE_CALLS',1,'Y',2,NULL,'','',NULL,'','',NULL,13),('agent_widget_0','AGENTS_AND_QUEUES','agents','','LOGO',2,'N',1,NULL,'','',NULL,'','',NULL,1),('agent_widget_1','AGENTS_AND_QUEUES','agents','N Waiting Calls','N_WAITING_CALLS',1,'N',1,NULL,'','',NULL,'','',NULL,2),('agent_widget_2','AGENTS_AND_QUEUES','agents','Agents Ready','AGENTS_READY',1,'N',1,NULL,'','',NULL,'','',NULL,3),('agent_widget_3','AGENTS_AND_QUEUES','agents','Agents On Call','N_AGENTS_ON_CALL',1,'N',1,NULL,'','',NULL,'','',NULL,4),('agent_widget_4','AGENTS_AND_QUEUES','agents','N Answered Calls','N_ANSWERED_CALLS',1,'N',1,NULL,'','',NULL,'','',NULL,5),('agent_widget_5','AGENTS_AND_QUEUES','agents','Clock','CLOCK',1,'N',1,NULL,'','',NULL,'','',NULL,6),('agent_widget_6','AGENTS_AND_QUEUES','agents','Live Agents','LIVE_AGENTS',1,'Y',3,NULL,'','',NULL,'','',NULL,7);
@@ -5416,4 +5419,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='1686',db_schema_update_date=NOW(),reload_timestamp=NOW();
UPDATE system_settings SET db_schema_version='1687',db_schema_update_date=NOW(),reload_timestamp=NOW();
+8
View File
@@ -2362,3 +2362,11 @@ ALTER TABLE system_settings ADD inbound_credits ENUM('0','1','2','3','4','5','6'
ALTER TABLE vicidial_users ADD inbound_credits MEDIUMINT(7) default '-1';
UPDATE system_settings SET db_schema_version='1686',db_schema_update_date=NOW() where db_schema_version < 1686;
ALTER TABLE system_settings ADD weekday_resets ENUM('0','1','2','3','4','5','6','7') default '0';
ALTER TABLE vicidial_lists ADD weekday_resets_container VARCHAR(40) default 'DISABLED';
INSERT INTO vicidial_settings_containers(container_id,container_notes,container_type,user_group,container_entry) VALUES ('EXAMPLE_LIST_WEEKDAY_RESETS','Example Weekday List Resets Container settings','LIST_WEEKDAY_RESETS','---ALL---','; weekday => reset-times in 24-hour time separated by dashes\r\nmonday => 0830-1230-1800\r\ntuesday => 0900-1400-1830\r\nwednesday => 0930-1200-1730-1900\r\nthursday => 1030-1330-1900\r\nfriday => 0800-1300-1530\r\nsaturday => 0930-1100\r\nsunday => 1000');
UPDATE system_settings SET db_schema_version='1687',db_schema_update_date=NOW() where db_schema_version < 1687;
@@ -1,4 +1,4 @@
# version: 20230522215501
# version: 20230524180001
users-user User ID <QXZ>This field is where you put the users ID number, can be up to 20 digits in length, Must be at least 2 characters in length. We strongly recommend not reusing user accounts for different users, for reporting accuracy. To disable a user account, set the Active option to -N-.</QXZ>
users-pass Password <QXZ>This field is where you put the users password. Must be at least 2 characters in length. Only letters and numbers are allowed in user passwords. A medium strength user password will be at least 10 characters in length, and a strong user password will be at least 20 characters in length and have letters as well as at least one number. It is recommended that you use a longer password if possible, stringing together several unrelated words with no spaces, and a number somewhere in the string. The maximum size of a password is 100 characters.</QXZ>
users-force_change_password Force Change Password <QXZ>If this option is set to Y then the user will be prompted to change their password the next time they log in to the administration webpage or the agent screen. Default is N.</QXZ>
@@ -436,6 +436,7 @@ lists-campaign_id Campaign <QXZ>This is the campaign that this list belongs to.
lists-active Active <QXZ>This defines whether the list is to be dialed on or not.</QXZ>
lists-reset_list Reset Lead-Called-Status for this list <QXZ>This resets all leads in this list to N for not called since last reset and means that any lead can now be called if it is the right status as defined in the campaign screen.</QXZ>
lists-reset_time Reset Times <QXZ>This field allows you to put times in, separated by a dash-, that this list will be automatically reset by the system. The times must be in 24 hour format with no punctuation, for example 0800-1700 would reset the list at 8AM and 5PM every day. Default is empty.</QXZ>
lists-weekday_resets_container Weekday Resets Container <QXZ>If set to a valid LIST_WEEKDAY_RESETS Settings Container, this option will let you define reset times for this list on a day-of-the-week basis. Within the container, you can set the list reset times for each weekday. Here is an example configuration: <BR>; weekday => reset-times in 24-hour time separated by dashes<BR>monday => 0830-1230-1800<BR>tuesday => 0900-1400-1830<BR>wednesday => 0930-1200-1730-1900<BR>thursday => 1030-1330-1900<BR>friday => 0800-1300-1530<BR>saturday => 0930-1100<BR>sunday => 1000<br><br>Note: if you want to leave a day blank, either don't include it or put no numbers after it. This will not override any Reset Times set above for this list, those will still run every day. Default is DISABLED.</QXZ>
lists-daily_reset_limit Daily Reset Limit <QXZ>This setting is only editable by a level 9 user. This setting allows an Administrator to limit the number of times that a list can be reset per day. The Resets Today number is counted from the Timeclock End Of Day time that is set in the system. Default is -1 for disabled.
lists-expiration_date Expiration Date <QXZ>This option allows you to set the date after which leads in this list will not be allowed to be auto-dialed or manual-list-dialed by the system. Default is 2099-12-31.</QXZ>
lists-local_call_time Local Call Time <QXZ>This is a setting for this list only, where you set during which hours you would like to dial leads within this specific list, as determined by the local time in the area in which you are calling. This is controlled by the time zone, as defined by that list setting, and is adjusted for Daylight Savings time if applicable. However, state rules are based on the state field for the lead and not only the time zone that is set. This call time setting is applied after the campaign local call time has been applied to the list and will NOT override the campaign settings. This setting will only narrow down call times in relation to the campaign local call time setting. It will NOT allow calling outside the hours set by the campaign local call time setting. This is useful if you have lists that need different call times within the same campaign. For example calling business numbers between 9am to 5pm and consumer phones between 9am to 9pm within the same campaign. General Guidelines in the USA for Business to Business is 9am to 5pm and Business to Consumer calls is 9am to 9pm. Default is campaign.</QXZ>
@@ -1156,6 +1157,7 @@ settings-expanded_list_stats Enable Expanded List Stats <QXZ>This setting enable
settings-hide_inactive_lists Hide Inactive Lists <QXZ>This setting allows you to hide inactive lists from the Lists Listing page. Similar to the default Users feature, a link to display all lists will be available at the top of the listings section. Default is 0 for disabled.</QXZ>
settings-country_code_list_stats Country Code List Stats <QXZ>This setting if enabled will show a country code breakdown summary on the list modify screen. Default is 0 for disabled.</QXZ>
settings-enable_did_entry_list_id Enable DID Entry List ID <QXZ>This setting if enabled will allow a manager to define an entry list id to use on the DID modify screen. Default is 0 for disabled.</QXZ>
settings-weekday_resets Enable List Weekday Resets <QXZ>If enabled, this option will allow you to select a LIST_WEEKDAY_RESETS Settings Container on a per-list basis that can define reset times for a list on a day-of-the-week basis. Default is 0 for disabled.</QXZ>
settings-allow_manage_active_lists Lead Manager Active Lists <QXZ>This setting if enabled will allow a manager to select active lists for modification within the Lead Management admin utilities. We do not recommend enabling this option since it can cause issues with leads that could be part of active calling within the system. Default is 0 for disabled.</QXZ>
settings-expired_lists_inactive Expired Lists Auto Inactive <QXZ>This setting if enabled will automatically change lists that have an expiration date set to a past date to Active equals N. This is performed through both a check every time the List Modify screen is loaded for a specific list as well as a once an hour check on all lists. Default is 0 for disabled.</QXZ>
settings-enable_gdpr_download_deletion Enable GDPR-compliant Data Download Deletion <QXZ>This setting if enabled will allow for the complete download and/or deletion of all customer data for a particular lead, in compliance with the General Data Protection Regulation (GDPR). Default is 0 for disabled. A setting of 1 will enable downloading data, and a setting of 2 will enable not just downloading, but also deletion of data, including any recordings.</QXZ>
@@ -1379,7 +1381,7 @@ DIDsummary Inbound DID Summary Report <QXZ>This report breaks down activity for
agentDIDstats Agent DID Report <QXZ>This report breaks down agent call handling activity for a DID or a group of DIDs over a given time interval. The results will show the number of calls handled for each agent per day and per week, with column breakdowns for each DID using the DID name for the column header.</QXZ>
DIDdetail Inbound DID Detail Report <QXZ>This report displays the details for every call received for a DID or a list of DIDs over a given time interval.</QXZ><BR><BR><QXZ><U>CALL DATE</U> = The date and time the call arrived on your system.</QXZ><BR><BR><QXZ><U>DID EXTEN</U> = The DID number your carrier sent this call to.</QXZ><BR><BR><QXZ><U>DID PATTERN</U> = The DID pattern that your system used to route the call.</QXZ><BR><BR><QXZ><U>SERVER</U> = The server that received the call on your system.</QXZ><BR><BR><QXZ><U>UNIQUEID</U> = The server unique ID of the call.</QXZ><BR><BR><QXZ><U>CALL ROUTE</U> = Where the call was routed. If there is a prefix of F_, PF_, PFR_ on this value, then the call matched one of the filters set on the DID and it was routed accordingly. A prefix of MQ_ indicates the DID Max Call Queue settings triggered. A prefix of NA_ indicated the No Available Agents settings triggered.</QXZ><BR><BR><U>DID ROUTE</U> = Where the DID is currently routed to when a call reaches it.</QXZ><BR><BR><QXZ><U>DID ID</U> = The internal system ID of the DID.</QXZ><BR><BR><QXZ><U>CID NUMBER</U> = The CallerID Number as received from your carrier.</QXZ><BR><BR><QXZ><U>CID NAME</U> = The CallerID Name as received from your carrier.</QXZ><BR><BR><QXZ><U>CHANNEL</U> = The server channel ID of the call.</QXZ>
email_log_report Email Log Report <QXZ>This report gives a detailed log report of any emails handled by the dialer, including links to the full text of received emails. It will display the date the email was received, the address and name of the sender, a bit of the beginning of the emails text (with a link to the full text), and the status that the agent dispositioned the email as.</QXZ>
inbound_daily_report Inbound Daily Report <QXZ>This report will give a daily or hourly, weekly, monthly, and quarterly count on all calls received by the in-groups selected for the given date range.</QXZ><BR><QXZ><U>TOTAL CALLS OFFERED</U> = Total calls taken by the in-group.</QXZ><BR><QXZ><U>TOTAL CALLS ANSWERED</U> = Total calls answered by the in-group.</QXZ><BR><QXZ><U>TOTAL AGENTS ANSWERED</U> = Total number of distinct agents who fielded calls to this in-group.</QXZ><BR><QXZ><U>TOTAL CALLS ABANDONED</U> = Total calls ended in queue (dropped).</QXZ><BR><QXZ><U>TOTAL ABANDON PERCENT</U> = Percentage of calls abandoned (<U>TOTAL CALLS ABANDONED</U> / <U>TOTAL CALLS OFFERED</U>).</QXZ><BR><QXZ><U>AVG ABANDON TIME</U> = Average amount of time a caller waited in queue before abandoning the call.</QXZ><BR><QXZ><U>AVG ANSWER SPEED</U> = Average amount of time a caller waited in queue before an agent answered.</QXZ><BR><QXZ><U>AVG TALK TIME</U> = Average amount of time an agent remained on the line with the caller before the call was hung up - does not include caller queue time.</QXZ><BR><QXZ><U>TOTAL TALK TIME</U> = Total amount of time agents remained on the line with callers before calls ended - does not include caller queue time.</QXZ><BR><QXZ><U>TOTAL WRAP TIME</U> = Total amount of time agents used to -wrap- the call - assumed to be 15 second per answered call.</QXZ><BR><QXZ><U>TOTAL CALL TIME</U> = Total talk time plus total wrap time.</QXZ>
inbound_daily_report Inbound Daily Report <QXZ>This report will give a daily or hourly, weekly, monthly, and quarterly count on all calls received by the in-groups selected for the given date range.</QXZ><BR><QXZ><U>TOTAL CALLS OFFERED</U> = Total calls taken by the in-group.</QXZ><BR><QXZ><U>TOTAL CALLS ANSWERED</U> = Total calls answered by the in-group.</QXZ><BR><QXZ><U>TOTAL AGENTS ANSWERED</U> = Total number of distinct agents who fielded calls to this in-group.</QXZ><BR><QXZ><U>TOTAL CALLS ABANDONED</U> = Total calls ended in queue (term reason = "abandon").</QXZ><BR><QXZ><U>TOTAL ABANDON PERCENT</U> = Percentage of calls abandoned (<U>TOTAL CALLS ABANDONED</U> / <U>TOTAL CALLS OFFERED</U>).</QXZ><BR><QXZ><U>AVG ABANDON TIME</U> = Average amount of time a caller waited in queue before abandoning the call.</QXZ><BR><QXZ><U>AVG ANSWER SPEED</U> = Average amount of time a caller waited in queue before an agent answered.</QXZ><BR><QXZ><U>AVG TALK TIME</U> = Average amount of time an agent remained on the line with the caller before the call was hung up - does not include caller queue time.</QXZ><BR><QXZ><U>TOTAL TALK TIME</U> = Total amount of time agents remained on the line with callers before calls ended - does not include caller queue time.</QXZ><BR><QXZ><U>TOTAL WRAP TIME</U> = Total amount of time agents used to -wrap- the call - assumed to be 15 second per answered call.</QXZ><BR><QXZ><U>TOTAL CALL TIME</U> = Total talk time plus total wrap time.</QXZ>
IVRstats Inbound IVR Report <QXZ>This report shows a breakdown of IVR paths followed by callers on selected IVRs based on the date range.</QXZ><BR><QXZ><U>IVR CALLS</U> = Total calls taken by or made through the selected IVRs that follow the -CALL PATH-.</QXZ><BR><QXZ><U>QUEUE CALLS</U> = Total inbound calls taken by the selected IVRs that follow the -CALL PATH-.</QXZ><BR><QXZ><U>QUEUE DROP CALLS</U> = Total inbound calls taken by the selected IVRs that follow the -CALL PATH- that were dropped.</QXZ><BR><QXZ><U>QUEUE DROP PERCENT</U> = Percentage of dropped inbound calls taken by the selected IVRs (QUEUE DROP CALLS / QUEUE CALLS).</QXZ><BR><QXZ><U>IVR AVG TIME</U> = Average amount of time spent in-call, taken by dividing IVR CALLS by the total time spent in the selected IVRs.</QXZ><BR><QXZ><U>TOTAL AVG TIME</U> = Total call time spent in the selected IVRs.</QXZ><BR><QXZ><U>CALL PATH</U> = The specific call path followed on the IVR - report will display each distinct path followed by all the selected IVRs for the selected date range.</QXZ>
CMstats Callmenu Survey Report <QXZ>This report shows one of two report types. The first displays all responses to callmenu prompts on calls handled by a given agent, within a list of selected campaigns, for a given time frame. Each call is displayed in chronological order, and for each call, the prompts and responses given are displayed. Each prompt response is treated as its numerical value to create a point total for the call, and total points per prompt and call are given at the bottom of the report. The second report is a multiple agent report, which utilizes the dates given and campaigns selected (the value in the agent field is ignored). The resulting report gives a summary per agent of the prompts met and total value of the responses given. The results for this report are sorted in descending order based on the total points the agent accrued.</QXZ><BR><BR><QXZ><U>SINGLE AGENT REPORT</U> </QXZ><BR><QXZ><U>PHONE</U> = The customer's phone number on the call.</QXZ><BR><QXZ><U>START TIME</U> = The call time from the live_inbound_log table.</QXZ><BR><QXZ><U>TOTAL POINTS</U> = The sum of the numeric values given for all callmenu survey prompts reached on the call.</QXZ><BR><BR><QXZ><U>ALL AGENT REPORT</U> </QXZ><BR><QXZ><U>AGENT</U> = The name of the agent.</QXZ><BR><QXZ><U>TOTAL POINTS</U> = The sum of the numeric values given for all callmenu survey prompts for calls the agent handled within the report parameters.</QXZ>
LISTS_campaign_stats Lists Campaign Statuses Report <QXZ><U>LIST ID SUMMARY</U> = Shows each list in the campaign(s) selected by the user, the count of leads in each list, and whether the list is active or inactive.</QXZ><BR><QXZ><U>STATUS FLAGS SUMMARY</U> = Shows a breakdown of the status flags for all the selected lists in all the selected campaigns combined. Status flags are set in the -Statuses- section of a campaign or the -System Statuses-.</QXZ><BR><QXZ><U>CUSTOM STATUS CATEGORY STATS</U> = Shows a breakdown of the custom status categories for all the selected lists in all the selected campaigns combined. Categories can be defined under the -System Statuses- in the admin section.</QXZ><BR><QXZ><U>PER LIST DETAIL STATS</U> = Shows each list in the campaign(s) selected by the user, with a breakdown of each status flag (and percentage of each flag) and status within that list.</QXZ>