+------------------------------------------------------------------------------+
|                          Asterisk GUI client - TODO           v.1.1.12       |
|                                                                              |
| TODO file is a list of what is new from previous version as well a list of   |
| features that are planned to be completed for future releases. HIGH priority |
| items are usually going to be completed for the next release. This file is   |
| kept updated on the project website by the developers and does not           |
| necessarily reflect the status of features for the last release. If you are  |
| reading this file from the release package, then it is accurate for the      |
| version your downloaded.                                                     |
+------------------------------------------------------------------------------+

-	DONE	Fix several errors in the install script. moving -R to before 
the chmod rwx settings. changing call_park_CID to park_CID.

-	DONE	Added option to manual dialing to allow lookup of existing 
vicidial_list lead by phone number. If found, would not insert a new lead.

-	DONE	Add drop_call_seconds(TINYINT), safe_harbor_message(Y/N) and 
safe_harbor_exten(VARCHAR) to the vicidial_campaigns table to allow for the 
playing of the safe harbor message to outbound calls two seconds after customer 
completes greeting(average of 5 seconds from call pickup[definable by the 
safe_harbor_seconds variable]), also needs to be added to the 
vicidial/admin.php.

-	DONE	Modify all of the outbound AGI scripts to read the 
drop_call_seconds and safe_harbor_ fields and use them for DROP timeout as well 
as playing of the safe_harbor message if selected to do so.

-	DONE	Add drop_call_seconds(SMALLINT), drop_message(Y/N) and 
drop_exten(VARCHAR) to the vicidial_inbound_groups table to allow for the 
playing of drop call message to inbound calls a set number of seconds after 
customer calls in, also needs to be added to the vicidial/admin.php.

-	DONE	Modify all of the inbound(and closer) AGI scripts to read the 
drop_call_seconds and drop_ fields and use them for DROP timeout as well as 
playing of the drop message if selected to do so.

-	DONE	Fix agentonly_callback checkbox not-defined bug in scheduled 
callbacks screen

-	DONE	Fix alert message when transfer/conf is inactive for 
vicidial_user and they go to disposition a call the warning shows up even if 
they did not try to transfer/conf.

-	DONE	Fix permissions issue in vicidial.php where 
vicidial_campaigns.auto_dial_level=0 and vicidial_user.manual_dial=0 the manual 
dial link still shows up.

-	DONE	Fix recording filename display when the filename is longer than 
the span supports. chop off the last few characters to make it fit should be 
acceptable. If over 25 characters, it will chop off the end to 22 characters and 
place ... at the end of the display filename. This does not effect the actualy 
recording filename.

-	DONE	Added AST_timeonVDADall_SIPmonitor.php from Angelito Manansala 
that allows SIP listening of sessions through click on the campaign timeonVDAD 
script. Added link from server_stats.php page as well.

-	DONE	Add permissions to vicidial admin.php for admin interfaces to 
restrict going into the call times and deleting the call times records:

-	DONE	Add validation to only allow one state_call_times record per 
state per call_times record

-	DONE	Add method for disabling the showing of the 
leads-able-to-be-dialed in the campaign screen of vicidial/admin.php. This will 
help to reduce load time of the page and reduce load on the database for systems 
with very large vicidial_list tables(several million records or more). This will 
mean adding another field to the vicidial_campaigns table. Default is to display 
the count.

-	DONE	Add a popup link that would show the dialable leads count from 
the campaigns screen if the dialable leads count has been hidden.

-	DONE	Add link or form that would show the results and query of a 
filter in the filter modification page without making it the active filter.

-	DONE	Add state to the vicidial_hopper for compatibility with the new 
local_call_times functions.

-	DONE	Change local_call_time to allow for variable time ranges instead 
of the presets that are available in the current version. Allow definitions by 
days of the week as well as by state[state will be defined in another table and 
referenced in a many-to-many relationship through the ct_state_call_times field 
which will be pipe-delimited with a list of state_call_time_ids]. There would be 
a default time scheme for all calls not covered by state. This will require 
another new table and a new section under the vicidial/admin.php page.

-	DONE	For the call_times and state_call_times include some presets for 
records including several state restrictions on dialing hours and days in the 
United States(USA).

-	DONE	Fixed alt_number_dialing form element in admin.php campaign 
screen

-	DONE	Add wrapup_seconds and wrapup_message fields to 
vicidial_campaigns along with a function to force a minimum wrapup time into 
vicidial.php after an Agent hangs up a call. The timer would start when the 
agent clicks on the HANGUP CUSTOMER button and if the agent dispositions the 
call before the wrapup time is up then they would see a screen blanking out the 
vicidial screen that would display the wrapup message until the timer ran out. 
If the wrapup timer runs out before the agent is finished dispositioning a call, 
nothing would happen, so the agent would not be able to move on to the next call 
until they selected a disposition. Wrapup time would not be in effect if the 
Agent uses HotKeys.

-	DONE	Change all vicidial stats and reports scripts to use UTF-8 
instead of latin-english for multi-language support

-	DONE	Fix admin pages SQL errors(vicidial campaign when no active 
lists present and astguiclient phone searches)

-	DONE	Rewrite the multi-language translations to use one file per 
language and to allow translation to be done on a single file at a time. 
es_language.txt and es_language_admin.txt would be the files used for Spanish. 
Also, the order of the translated lines in the files would be unimportant 
because the translation script would order the phrases by character length to 
ensure that larger phrases that could contain parts of smaller phrases would be 
translated correctly, this allows for comments to be placed in-line with new 
sections of phrases for newer versions making it easier to find new un-verified 
translations sections and submit changes to translations files.

-	DONE	Create a table that will keep a current statistics cache for 
items like drop count and percentages per campaign per day(and for the future: 
last 1 minute/5 minutes/30 minutes) and dialable leads counts.

-	DONE	Add number of leads in hopper, link to admin.php campaign modify 
screen(and link from admin to this screen) and hopper and leads stats as well as 
drops and drop percentage to the AST_timeonVDADall page.

-	DONE	Convert the AST_VDhopper.pl script to DBD::MySQL perl library in 
place of Net::MySQL. DBD::MySQL is faster because it uses the MySQL client libs 
on the machine. One problem is that you need the mysqlclientlibs installed on 
every Asterisk server and the default installation of only the MySQL client libs 
will result in having to do a force install of cpan DBD::MySQL(because it tries 
to test with the local DB). Not to mention all of the code changes that would 
need to be made. There are also MySQL client licensing issues for certain 
installation circumstances(Net::MySQL doesn't use mysql client libs so it 
doesn't have those issues) but I really don't want to get into that discussion. 
The reason for this change is that Net::MySQL is limiting in the capacity of the 
queries that you can use because of how it's connection to MySQL is used. DBI 
doesn't have those issues and is much better supported. This is the first script 
to be converted to DBI, you can find the Net::MySQL version in the main 
directory and the DBI(DBD::mysql) version in the new DBI-scripts directory.

-	DONE	Test and package app_conference for beta usage with VICIDIAL as 
a meetme replacement. This has many performance benefits including not having to 
use a zaptel timer. Packaged and released on the project site. Tested in medium 
to low capacity VICIDIAL server, some random infrequent bugs. In contact with 
app_conference developers working on stabilizing code. Added instructions to 
SCRATCH_INSTALL on how to get app_conferenc working with VICIDIAL.

-	DONE	Add a link from the campaign-based reports pages to go back to 
the campaign screen.

-	DONE	Create a script to grab the login time stats from 
vicidial_agent_log and create a day-by-day timesheet log each week 
AST_agent_week.pl script. Add script to the cron instructions in SCRATCH_INSTALL 
doc.

-	DONE	Fix issues with ast_VDauto_dial script when you have two CLOSER 
campaigns in Blended mode dialing at the same time. To fix this we need to 
change many things in how the CLOSER campaigns work. We need to add a new field 
to the vicidial_auto_calls table to denote whether the call is from inbound or 
outbound(call_type ENUM('IN','OUT') default 'OUT'). For each CLOSER campaign, a 
special field needs to be added to vicidial_campaigns for allowable inbound 
groups. This will change what in-groups an agent logging into the campaign can 
select from as well as changing how the auto_dial script calculates how many 
calls to place on CLOSER campaigns in blended mode. the vicidial.php script 
needs to be changed as well as several changes in the admin.php script. The 
AST_VDauto_dial.pl script needs to be changed as well as all of the 
agi-VDAD....closer.agi scripts.

-	DONE	Fix active calls stats for multiple CLOSER campaigns in Realtime 
Campaign screen.

-	DONE	Add internal DNC list of phone numbers(vicidial_dnc table) that 
would be scrubbed against by the AST_VDhopper.pl script while putting leads into 
the hopper to be dialed and it would kick the internal DNC matches out with a 
special status as DNCL(Do-Not-Call-Load) so they would be in the system but 
unable to be dialed. Would need to add a mechanism to add a lead to this list 
upon agent-dispo of a call as DNC within vicidial.php. Would need to create a 
new admin page section to manually add leads to DNC list, ADD TO DNC link in the 
LISTS section. Also, would add a parameter to 
vicidial_campaigns(dnc_list_enabled ENUM('Y','N')) where a campaign could be 
exempted from the system's DNC list restrictions if set to N(would not be active 
by default 'N').

-	DONE	Add option for PRI T1 system usage with VICIDIAL outbound to 
automatically grab Busy and Disconnect information from PRI call termincation 
codes and use those for NA dispositions. VD_hangup.agi and AST_VDauto_dial.pl 
modified.

-	DONE	Remove gmt time validation of leads from AST_VDauto-dial because 
AST_VDhopper already removes leads that are outside of the appropriate range of 
GMT offsets when it is run every minute. Removing this redundancy should speed 
up the dialing slightly.

-	DONE	Fix VD_hangup to work with CLOSER transfer-from-fronter calls, 
different log contents than from CLOSER inbound call.

-	DONE	Add option for disposition-based lead recycling on an automated 
and timed basis per campaign. It will be some sort of method to be able to 
auto-insert Busy/Ring-no-answer/other-NA calls back into the hopper after a 
certain timeout. there will be a minimum of 120 seconds before the lead will be 
allowed to go back into the hopper and a lead can only go back into the hopper a 
maximum of 10 times before the list would need to be reset. The 
vicidial_list.called_since_last_reset field needs to be altered to allow for 
counting of recycle attempts. All scripts need to be able to keep the state of 
call_since_last_reset. A new table: vicidial_lead_recycle that will function 
somewhat like HotKeys on the campaign screen. admin.php and AST_VDhopper.pl will 
need to be modified.

-	DONE	Change ADMIN_area_code_populate.pl script to ignore the header 
row of the phone codes gmt file DB import

-	DONE	Add database GMT lookup to the VICIDIAL_IN_new_leads_file.pl 
lead loader lead import process.

-	DONE	Change ADMIN_adjust_GMTnow_on_leads.pl script to use database 
instead of flat text file.

-	DONE	Fix display issues with LIST MODIFY page on admin.php for 
statuses because of lead recycling and with GMT offset for positive GMT offsets.

-	DONE	Add listID override feature to the VICIDIAL_IN_new_leads_file.pl 
lead loader lead import process to force all leads being loaded into the same 
list_id.

-	DONE	Add listID override feature to the basic web-based lead loader 
lead import process to force all leads being loaded into the same list_id.

-	DONE	Add database GMT lookup to the basic web-based lead loader lead 
import process.

-	DONE	Add listID override feature to the super web-based lead loader 
lead import process to force all leads being loaded into the same list_id.

-	DONE	Add database GMT lookup to the super web-based lead loader lead 
import process. This one is more difficult because of the many scripts and 
sections used to parse and insert leads for the different formats and field 
orders: listloader_super.pl, listloader.pl, new_listloader_superL.php

-	DONE	standardize the query results variable in PHP scripts to $rslt.

-	DONE	SECURITY FIX, filter all variables relating to SQL queries in 
agc scripts(vicidial.php, astguiclient.php, etc...) This is for a SQL injection 
vulnerability where a malicious user puts SQL fragments into a variable field in 
order to manipulate or destroy the database.

-	DONE	SECURITY FIX, filter all variables relating to SQL queries in 
admin scripts(vicidial and astguiclient folders, admin.php, etc...)

-	DONE	Change the admin_search_lead page to include multiple results.

-	DONE	Add an AGI script to record audio for prompts with an 8-digit 
filename that can be played by dialing the 8 digit filename. 85100001-85199999. 
The AGI script would announce beginning of recording and to press pound when 
done recording, then would say thank-you and announce the filename of the 
recording. The recordings would be saved in GSM format and can be used in any of 
the fields within VICIDIAL that call for a message exten like the survey script. 
agi-record_prompts.agi script created.

-	DONE	Add link from reports pages back to main reports page.

-	DONE	fix MySQL errors on campaign modify and leads modify pages for 
dialable leads when no active lists for campaign lists.

-	DONE	Fix call_log entries for Zap client phones where call 
information is in different places than if calls are placed from SIP or IAX 
client phones. call_log and call_logCID AGI scripts.

-	DONE	Finish rough German Admin pages translations










-	MEDIUM	add option to disable detailed logging for VICIDIAL and 
astGUIclient server apps.

-	MEDIUM	add new ALLFORCE to recording method for campaigns. will force 
recording of all calls and disable the button for agents no matter their 
vicidial_users setting.

-	MEDIUM	add a basic predictive/adaptive algorithm to VICIDIAL to 
automatically speed-up and slow-down dialing by altering the dial_level at 
regular intervals. Would need more settings in the vicidial_campaigns table for 
adaptive like maximum lines per agent, dropped call ratio, dropped call rule to 
guide the predictive app. Would also need to change dial_level to be a DOUBLE or 
VARCHAR field to allow for different fractional increments. The admin.php page 
would have to be altered to ignore auto_dial_level changes when adaptive dialing 
is activated. The minimum dial_level would be set to '1' for adaptive dialing
	auto_dial_level VARCHAR(6),	# allow for just about anything. 
precision decimal too 
	adaptive_dial_level ENUM('Y','N'),	# turns on adaptive script and 
prevents dial_level admin changes
	adaptive_maximum_level VARCHAR(6),	# sets highest dial_level 
possible by adaptive app
	adaptive_dropped_percentage SMALLINT(3),	# percentage of 
accaptable dropped calls
	adaptive_dropped_rule ENUM('HARD_LIMIT','TAPERED','AVERAGE'),	# method 
for adhearing to % limit

-	MEDIUM	room manager documentation - manual. Probably a free 2 chapter 
black and white manual and a full color print download available for sale.

-	MEDIUM	Rewrite the inbound and closer call handling to allow for music 
on hold per in-group and a single queue app instead of multiple AGIs each 
running their own queries. Currently with large queues and long wait times a lot 
of load is generated with calls on hold in the queue. Switching to a central 
queue application would reduce the load and speed things up.

-	MEDIUM	Add optional field to phones table to allow for different 
recording file names in astguiclient.php, Similar to vicidial options.

-	MEDIUM	make 3rd party consultative transfers work for Local extensions, 
also for internal/local transfer to vicidial closers if possible.

-	MEDIUM	Attempt to make some kind of holiday schedule function for 
national and state holidays that would be able block out states on specific 
no-call days. This is rather difficult because of the way some holidays are 
scheduled, I.E. Easter.

-	MEDIUM	Add ChanSpy functionality to listen-in on VOIP channels in 
astguiclient.php. Maybe not since Chanspy can cause problems like crashing the 
Asterisk server. Need to do more testing.

-	MEDIUM	Create a script to allow vicidial agents to dial into an AGI 
script that would ask for user/pass and then place them onto their 
vicidial.php-defined sessionid.

-	MEDIUM	add link in astguiclient to login and logout from Asterisk 
Queues

-	MEDIUM	add script to get "show queues" information and place in a DB 
table to be used to see who is in an Asterisk Queue. This would mostly be used 
to give a LOGGED-IN and LOGGED-OUT display for astguiclient.php and possibly add 
an Asterisk Queue display tab or popup for astguiclient.php. Info would be 
updated one to four times a minute so it would not be real-time.

-	MEDIUM	add new tab to astguiclient.php script to show status of 
Asterisk queues

-	MEDIUM	Convert all scripts to DBD::MySQL perl library in place of 
Net::MySQL. DBD::MySQL is faster because it uses the MySQL client libs on the 
machine. One problem is that you need the mysqlclientlibs installed on every
Asterisk server and the default installation of only the MySQL client libs will 
result in having to do a force install of cpan DBD::MySQL(because it tries to 
test with the local DB). Not to mention all of the code changes that would need 
to be made. There are also MySQL client licensing issues for certain 
installation circumstances(Net::MySQL doesn't use mysql client libs so it 
doesn't have those issues) but I really don't want to get into that discussion. 
We will start by converting at least one perl script for each release until we 
have converted then all, then we will no longer support Net::MySQL. This will 
probably take some time, but the scripts that are added to the DBI-scripts 
folder will be drop-in replacements for the Net versions that are installed by 
default.

-	MEDIUM	Create a visual SQL builder for the filter SQL section.

-	MEDIUM	add ability to call CLOSER campaigns "BLEND" or "INBND". would 
require many script changes from server side to client side, not set in stone 
yet, but considering it.

-	MEDIUM	add some kind of intelligent call-routing to astguiclient so 
that you can auto-forward calls to another extension from within 
astguiclient.php instead of using your phone or something like Queues which can 
mess up other things. This will need it's own table in the DB and probably some 
extensions.conf entries and an AGI script or two to do the actual call routing.

-	MEDIUM	add skills-based routing to give the ability for a manager to 
set an agent at a higher or lower level per campaign or in-group. Defaults to 
level 0 possible values will be -9 through 9

-	MEDIUM	add all possible fields to the SCRIPT tab to auto-populate like 
in-group for inbound/closer, campaign and others

-	MEDIUM add ability to scrub leads being imported in the lead loader 
against the vicidial_dnc list as they are being imported.

-	MEDIUM	add ability upon vicidial.php login to take a number to dial as 
a password and a reserved word(something like MANUAL in all caps) that would 
allow the use of an EXTERNAL phone without setting it up as an asterisk.phones 
entry.

-	MEDIUM	rebuild the vdremote.php remote agents pages to use 
AJAX(PHP/Javascript/XMLHTTPRequest) for real-time popups of call data.

-	MEDIUM	allow custom audio welcome message for vicidial campaigns. This 
might be an app_conference only feature.

-	MEDIUM	create a cron script and method for creating new extensions in 
the sip.conf/iax.conf files as well as dialplan entries(extensions.conf). This 
will require more fields in the phones table to account for variables available 
to the protocols. The conf files would need to be altered before to have a flag 
for the beginning and ending of the auto-generated content. This would also 
necessitate a TEXT area for the extensions.conf content(that would be default 
generated but could be manually altered). The cron script would be run every 5 
minutes or so to see if any phones had altered content, and if so generate new 
auto-content and do a 'reload' on the asterisk server to activate the new 
content.

-	MEDIUM	add a count-up-timer to active channels on the astguiclient MAIN 
screen(this may be an Asterisk 1.2+ required feature).

-	MEDIUM	Change VICIDIAL autodialing configuration to allow dialing of 
alt_phone numbers as well as address3 phone numbers after dialing main number. 
It is already possible to dial an alternate phone number manually as an agent 
once the customer info is up on the screen, but this would be doing it in an 
automated fashion. Best way for this may be to reconfigure the 
called_since_last_reset field to allow N, 1, 2, Y. This would require 
reprogramming several server scripts and php pages.

-	MEDIUM	Try a few of the frequently launched scripts as C 
programs(call_log.agi and the AST_send child scripts) to see if they reduce 
system load and/or speed up those processes.

-	MEDIUM	Change the autodialing system around so that there can be 
dialing-out-only servers and agent-only servers in a multi-server load-balanced 
environment. This is suprisingly simple to do, but would require all servers to 
be controlled by a single instance of AST_VDauto_dial.pl running on one machine. 
Also, in the case of IAX2 channel native transfers, we would need to change the 
AGI scripts that route the calls and create a new script to alter the 
vicidial_auto_calls records to the agent server call_server_ip and channel name 
because the call would disappear from the originating server causing "customer 
hungup" warnings.

-	MEDIUM	Add method of picking up astGUIclient parked calls by only 
dialing digits on a regular extension without using the astGUIclient.

-	MEDIUM	admin/installer/maintainer documentation as well as 
troubleshooting guide

-	MEDIUM	Run some lab-style load tests on VICIDIAL and show recommended 
configurations as well as "highest recommended" settings



-	LOW	add the ability to run separate companies on the same VICIDIAL 
server. This will not be easy. All admin tasks as well asl user tasks and stats 
will need to have divisions so that nothing is accessible from the other groups. 
Also, the resources of the system(outbound trunks, hard drive space, other 
shared elements, etc...) so that one group cannot hog the shared resources of 
the the server.

-	LOW	Making the server install script a customizable with installer 
prompts

-	LOW	Create guidelines and suggestions for deactivating unused 
modules from Asterisk for astGUIclient users

-	LOW	Revisit possibility of using something other than CallerIDname 
to tag a call process, probably a long shot without altering the Asterisk code, 
but that may be an option.

-	LOW	add new method for capping the maximum number of attempts to try 
leads of a specific status. This would be set up like HotKeys are, per campaign 
where you would select the status and define the maximum number of attempts for 
that type of status for that campaign and the VDhopper wouldn't allow that kind 
of lead into the hopper if it was over the max value of call_count.(having 
filters reduced the priority of this item since you can do a lot of custom 
coding to duplicate this feature in vicidial_lead_filters)

-	LOW	add a new script for using SoX to analyze the first 5 seconds of 
a ring-time recording within 15 minutes of the NA call ending and detecting if 
it has the SIT tone at the beginning of it so the lead can be taken out of the 
list as a DC. adding PRI hangup codes has reduced priority for this item.

-	ON-HOLD	We are also looking at creating an inbound-agent-specific GUI 
that would ideally work with Asterisk queues but that is not very likely given 
the current lack of events being given off by queues(this is much less likely to 
be built now that VICIDIAL takes inbound calls)

-	ON-HOLD	add a way of checking that there is no more than 1 channel in 
the meetme room with the agent before another call to that agent. Currently this 
happens less than 0.1% of the time(mostly on heavily loaded systems), but 
another check might change that to zero.

-	ON-HOLD	Localization of each server based on Intl. dial codes and/or 
country codes. very difficult to do this based on dial-codes, if used in other 
country, best to not use the adjust_gmt script.

