astGUIclient LOGO VICIDIAL dialer -
(VEE-CHEE DIAL) An advanced Asterisk-based predictive dialer
astGUIclient LOGO
DOWNLOAD
Sourceforge SUMMARY
astGUIclient
ACQS
VICIDIAL
SCREENSHOTS
CONTACT / HELP
FORUM
REQUIREMENTS
SCRATCH_INSTALL
FAQ
CONSULTANTS
AND SERVICES
CONTRIBUTORS
WEB ADMIN DEMO
CODE UPDATES

Project Sponsor
Binfone Telecom

To donate to this project:
Support This Project
click here
SourceForge.net Logo
Get Firefox!
This system was initially created to fill the need of a customer service group being able to call up clients efficiently and without using a predictive dialer that would potentially lose calls and alienate clients. Since then we have added the ability to do predictive dialing alongside ratio dialing and the traditional one-call-at-a-time dialing as well as the ability to take inbound calls and set up campaigns to do blended inbound and outbound at the same time.

- Click here to download the VICIDIAL Brochure (PDF)
- A case-study presentation about a large VICIDIAL installation (PDF)
- Click here for the VICIDIAL Agent Manual
- Click here for the VICIDIAL Manager Manual
- Click here for the VICIDIAL Forums
- Click here for the VICIDIAL Wiki
- Click here for the VICIDIAL Bug Tracker
- Click here to see sample VICIDIAL reports
- Download the LiveCD ISO of ViciDial to try



MAJOR VICIDIAL FEATURES:
  • Inbound, Outbound and Blended call handling
  • Outbound agent-controlled, broadcast and predictive dialing
  • Full USA FTC-compliance capability
  • Web-based agent and administrative interfaces
  • Ability to have agents operate remotely
  • Integrated call recording
  • Three-Way calling within the agent application
  • Scheduled Callbacks: Agent-Only and Anyone
  • Web-configurable IVRs and Voicemail boxes
  • Scalable to hundreds of seats
  • Ability to use standard Telco lines and VOIP trunks
  • Open-Source AGPLv2 licensed, with no software licensing cost


Full Features List:
  • Ability for an agent to call clients in succession from a database through a web-client
  • Ability to display a script for the agent to read with fields like name, address, etc. filled-in
  • Ability to set a campaign to auto-dial and send live calls to available agents
  • Ability to dial predictively in a campaign with an adaptive dialing algorithm
  • Ability to dial on a single campaign across multiple Asterisk servers, or multiple campaigns on a single server
  • Ability to transfer calls with customer data to a closer/verifier on the local system or a remote Asterisk server
  • Ability to open a custom web page with user data from the call, per campaign
  • Ability to autodial campaigns to start with a simple IVR then direct to agent
  • Ability to broadcast dial to customers with a pre-recorded message
  • Ability to park the customer with custom music per campaign
  • Ability to send a dropped call to a voicemail box, queue or extension per campaign if no agent is available
  • Ability to set outbound CallerID per campaign or per list
  • Ability to take inbound calls gathering CallerID
  • Ability to function as an ACD for inbound and fronter/closer verification calls
  • Ability to have an agent take both inbound and outbound calls in one session(blended)
  • Ability to start and stop recording an agent's calls at any time
  • Ability to automatically record all calls
  • Ability to manually or automatically call upto two other customer numbers for the same lead
  • Automatically dial unlimited alternate numbers per customer until you get an answer
  • Ability to schedule a callback with a customer as either any-agent or agent-specific
  • Ability in Manual dial mode to preview leads before dialing
  • Ability for agents to be logged in remotely anywhere with just a phone and a web browser
  • Faster hangup and dispositioning of calls with one key press (HotKeys)
  • Definable Agent Wrapup-time per campaign
  • Ability to add custom call dispositions per campaign
  • Ability to use custom database queries in campaign dialing
  • Recycling of specified status calls at a specified interval without resetting a list
  • Dialing with custom TimeZone restrictions including per state and per day-of-the-week
  • Dialing with Answering Machine Detection, also playing a message for AM calls
  • Multiple campaigns and lead-lists are possible
  • Option of a drop timer with safe-harbor message for FTC compliance
  • Variable drop call percentage when dialing predictively for FTC compliance
  • System-wide and per-campaign DNC lists that can optionally be activated per campaign
  • All calls are logged and statuses of calls are logged as well as agent time breakdowns
  • Load Balancing of call across multiple inbound or outbound Asterisk servers is possible
  • Agent phone login balancing and failover across multiple ViciDial servers
  • Several real-time and summary reports available
  • Real-time campaign display screens
  • 3rd party conferencing(with DTMF macros and number presets)
  • 3rd party blind call transfer
  • 3rd party conferencing with agent drop-off
  • Custom Music-On-Hold and agent alert sound for inbound calls
  • Estimated hold time, place in line, overflow queues and several other inbound-only features
  • Skills-based ranking and call routing per inbound group(queues) and campaign
  • Queue Prioritization per campaign and inbound group
  • Single agent call queueing
  • Ability to set user levels and permissions for certain features and campaigns
  • Ability for managers to listen-in on agent conversations
  • Ability for managers to enter conversations with agents and customers
  • Ability for managers to change the selected queues for an agent
  • Ability for agents to select a Pause Code when they are not active
  • Ability for agents to control volume levels and mute themselves
  • Ability for agents to view the statuses of other agents on the system
  • Ability for agents to view details for calls in queue that the agent is selected to take calls from
  • Ability for agents to select and click to take calls in queue from their agent screen
  • Agent shift enforcement by day and time, defined per user group
  • Full QueueMetrics-compatible call logging, inbound and outbound
  • Several Vtiger integration features: user-sync, account-sync, data interconnection
  • Full integration with Sangoma Call Progress Detection(CDP) for better Answering Machine Detection(AMD)
  • Multi-function web-based agent API allowing for control of agent sessions including click-to-dial outside of the agent screen
  • Lead import web-based API
  • Web-based data export utilities
  • Separate Time-clock application to track user work time
  • Web-based administration
  • DID, phone and carrier trunk provisioning through the web interface
  • Client web-app web pages available in English, Spanish, Greek, German, French, Italian, Polish, Portuguese, Brazilian Portuguese, Slovak, Russian, Dutch, Swedish and Traditional Chinese.
  • Admin web pages available in English, Spanish, Greek, German, Italian, French and Brazilian Portuguese.


Required components:
- Asterisk server with Zap(T1/E1/PSTN), IAX or SIP trunks
- SIP/IAX/Zap phones(hard or soft single-line or multiple)
- Client Computer with Firefox or other compatible web browser installed
- Asterisk server with proper software installed
- astGUIclient must be installed with the Asterisk Central Queue System(ACQS) running

Approach:
This system is dependant on a MySQL server acting as the storage place of all data and settings for the system. This was done so that it would be very scalable and flexible. This application draws on a lot of the core scripting inside of the astGUIclient suite of applications and was built with flexibility in mind. We have used VICIDIAL for over two years now on up to 120 seats at once across 6 separate Asterisk servers all using the same MySQL server and dialing on the same campaign. It is important to keep in mind that because VICIDIAL uses Asterisk meetme rooms for it's dialing that the Asterisk server will see an increased load as compared to a simple Zap/SIP-only calls.

Installation:
Look at the INSTALL FROM SCRATCH documentation and start at phase 6

Process flow of a one-call-at-a-time call:
  1. all components are installed and running(with Asterisk and MySQL servers)
  2. user logs in to the client GUI [user/password/campaign]
  3. GUI assigns an open meetme extension to the user, this is called the session_id
  4. GUI sends manager command ORIGINATE to connect the user to the meetme ext
  5. user clicks DIAL NEXT NUMBER and GUI UPDATEs first available number-to-call in DB to PENDING status
  6. GUI SELECTs info on that number[name/address/...]
  7. GUI sends ORIGINATE command to call that client's number from meetme ext
  8. user is talking to the client
    • user transfers call to 3rd party, client Zap channel is REDIRECTed to 3rd party
      or
    • User transfers client to a closer to finish the call
      or
    • user puts client on park and dials 3rd party, then transfers client back to meetme room
  9. Call is Hung up
    • user hangs up call and clicks HANGUP CALL on GUI
      or
    • person called hangs up so user clicks on the CALL HUNGUP then HANGUP CALL
  10. call is disconnected
  11. user selects disposition status of the call and clicks OK
  12. goes back to step 4 and repeats


Process flow of an auto-dial call:
  1. The lead hopper app(AST_VDhopper.pl) that is running every minute keeps the hopper for each campaign up to at least the minimum hopper lead size providing there are enough leads to fill it.
  2. The predictive dialing control app(AST_VDadapt.pl) that is running constantly analyzes the current status of calls and agents and calculates the dial level that the campaign will need to be set at for the campaign's specific settings.
  3. The call center manager can either set the dial method (on the campaign screen of the admin web page) to Manual for no autodialing, Ratio for fixed lines-to-agent dialing or any of the Adapt predictive dialing models to use Predictive dialing.
  4. As soon as an agent logs into a campaign, the client app will look at the auto_dial_level setting of the campaign and determine whether
    • it will insert a record into the vicidial_live_agents table(and set status to READY) and update that record every second with a random 8 digit number to show that the client is still alive and ready. Also, the client app will show a "pause" and "resume" button to start or stop receiving calls automatically instead of the usual "dial next number" button.
      or
    • it will allow normal manual dialing operation
  5. The auto_dial app(AST_VDauto_dial.pl) will:
    1. count how many agents are READY,QUEUE,INCALL with updated last_update_time in the last 5 seconds
    2. look at the campaign's auto_dial_level to determine how many calls should be placed each specific campaign on each server.
    3. update the vicidial_auto_calls records by searching for active callerids in the vicidial_manager to see if they have hung up
    4. count the number of active calls that are occuring(vicidial_auto_calls records with a status of SENT,RINGING or LIVE)
    5. place the calls for each server if the active calls is less than the total that should be placed
  6. The auto_dial app will then:
    1. grab the next lead to be called from the vicidial_hopper for each campaign(it will update that lead record in the vicidial_hopper table to QUEUE with VDAD as the user)
    2. grab the lead information from vicidial_list and update called_since_last_reset Y, the user to VDAD and increment the called_count by 1
    3. delete the record from vicidial_hopper for that lead
    4. place the call first to the Zap trunk(Exten: 917275551212), then to a specified Local extension number(Channel: Local/99999@default) where the auto_dial_transfer_agent app(agi-VDADtransfer.agi) is waiting to take over.
    5. if the call is busy, disconnect or telco voicemail the call is never technically picked up so it never makes it to the auto_dial_transfer_agent app
    6. check for dead calls by looking in the call_log for and end time of the call keyed by callerID(caller_code) and delete them t=from the vicidial_auto_calls table
  7. The auto_dial_transfer_agent app takes the call and:
    1. immediately grabs the uniqueid and callerid of the call and updates the vicidial_auto_calls record to LIVE
    2. logs the call to vicidial_log using the callerid to find out the lead number(VmmddhhmmssLLLLLLLLL[where LLLLLLLLL is the zero-padded lead_id from vicidial_list])
    3. inserts the number_dialed and the caller_code in the vicidial_log table for the uniqueid record of the call
    4. attempts to update(limit 1) a record in the vicidial_live_agents table to see who is the next agent to receive a call(ordered by last_call_time)[update the status to QUEUE, the lead_id to the proper lead_id and the uniqueid and callerID to proper values for the call]
    5. if there are agents available[affected rows = 1](goto substep VII.)
    6. if there are no agents available:
      1. wait in 1 second increments and then checking substep IV.
      2. if no agent is available for the drop interval(usually 5 seconds on outbound campaigns), the call is hung up and logged as DROP in vicidial_log under user VDAD.
    7. grabs the agent info from the vicidial_live_agents[conf_exten] and does a redirect to the agent's meetme room.
    8. agent's app checks the vicidial_live_agents record every second for itself to see if it is changed to QUEUE
    9. agent's app changes the vicidial_live_agents status to INCALL and updates the vicidial_list record to INCALL and user to the agent's userID and the call progresses normally
  8. The agent hangs up and the vicidial_live_agents record is changed back to READY with the lead and call fields cleared out so the agent is ready to take another call

VICIDIAL Web-only client
With 1.1.6 release of astguiclient we have finished the rewrite of the VICIDIAL
client app in AJAX(PHP/Javascript/XMLHTTPRequest) to enable a full, real-time
GUI interface using only a web browser like we have done with astGUIclient.
The browser requirements for this are:
- Firefox 0.9 or greater (Firefox 1.0.7 is the recommended browser)
- Mozilla 1.7 or greater
- Netscape 8 or greater
- Opera 8.5 or greater
- Microsoft Internet Explorer 5.0 or greater (we have noticed some serious
  memory leaks in IE5 and IE6 when using this program, they do not occur in
  Firefox which is why we recommend it overall.)

This beta version is fully functional and has been tested in our production 
call center with no problems. On RedHat 9.0 Linux workstations we have noticed 
a decrease in system load running the web-client as compared to the Perl/Tk 
client. Also, the memory usage stayed at about 22MB for a full shift of 
activity, so no memory leaks with Firefox. 

To log into this app you will need a login setup in the vicidial_users table 
with a user_level of 1 or greater as well as an entry for the phone you are 
using in the phones table. You will first get a login prompt for the vicidial
login then you will have the phone login where you enter the Login and Password
for that phone entry. From there the app should display and you will see the 
VICIDIAL screen with your phone information.

The example web page you would go to on this installation would be:
http://10.10.10.15/agc/vicidial.php

One more feature that the VICIDIAL web-client offers is the ability to set up 
an EXTERNAL phone extension in the astguiclient admin section so that you can 
have agents log in to vicidial.php wherever they have access to a phone with 
an external phone number and a web browser. To do this follow these steps:
- "ADD A NEW PHONE" in the admin.php web page and enter whatever name you want
- For the dialplan number field put in the full digits that you would dial from
  the Asterisk server to get to that agent's external phone(with 91 if used)
- For the Protocol select EXTERNAL
- make sure the agent knows the login and password set for this phone entry.
Then the agent will go to the vicidial.php page and enter in their phone 
login/pass, their vicidial user/pass/campaign and their phone should ring in a 
few seconds, and they are logged in and ready to take calls.

Another thing to note is that you can have the agc folder(with the .php files 
in it) copied to multiple web servers, you just need to make sure that the 
MySQL database connection works (check the settings in the dbconnect.php file
that is in the agc directory). We have had astguiclient.php running on 3 
separate web servers for the same DB server and Asterisk server. This is an 
easy way to allow for auto failover and/or redundancy. Also, this client will 
work over SSL connections(https) for encrypted communications with the server.

New in astGUIclient release 1.1.7 is multi-language support. multi-language 
versions of web-clients and admin pages are available in the LANG_agc.zip and 
LANG_admin.zip files and can be unzipped into your webroot directory. Make sure
you check the dbconnect.php file in each directory.

Admin Note: If you want to enable your agents to login with only their user/pass
you can hardcode the phone_login and phone_pass into the query string(URL) and
use a bookmark on their desktop, taking one more step out of their login process
example: http://10.10.10.15/agc/vicidial.php?pl=gs102&pp=test

It is recommended if you are in a call center environment that you would disable
the "Saved Form Information" option in Firefox settings. This is a checkbox in 
the Privacy settings under the Options menu.
NOTE: make sure you have your machine time-syncing with an ntp server
Windows instructions: http://www.tech-recipes.com/windows_tips466.html
http://support.microsoft.com/kb/q216734/



If anyone has suggestions/praises/criticisms about VICIDIAL we would love to hear them.



All astGUIclient software elements are distributed freely through the GPL with no warranty.