Branching from trunk to 2.4 branch at 1808

git-svn-id: svn://192.168.202.10@1809 3d104415-ff17-0410-8863-d5cf3c621b8a
This commit is contained in:
mattf
2012-04-20 20:06:57 +00:00
parent 46ba8b9d21
commit e878f07a58
2233 changed files with 1524573 additions and 0 deletions
+93
View File
@@ -0,0 +1,93 @@
+------------------------------------------------------------------------------+
| Asterisk GUI client - astguiclient |
| Description of the Asterisk Central Queue System |
| created by Matt Florell <mattf@vicimarketing.com> <info@eflo.net> |
| project started 2003-10-06 http://sourceforge.net/projects/astguiclient/ |
+------------------------------------------------------------------------------+
This suite of programs is designed to work with the Asterisk Open-source PBX
(http://www.asterisk.org) as a cross-platform GUI client and the supporting
server side applications necessary for the features of the GUI application to
work with Asterisk.
Scripts that are involved with the ACQS backend are:
- /etc/astguiclient.conf - file where you define your variables for the server apps
+ Must be present and configured through the install.pl script
- AST_manager_listen.pl - listener for the Asterisk Central Queue System (ACQS)
+ Must be present in the /home/cron/ directory
+ Requires Net::Telnet, Net::MySQL and Time::HiRes perl Modules
- AST_manager_send.pl - send-spawn for the ACQS
+ Must be present in the /home/cron/ directory
+ Requires Net::Telnet, Net::MySQL and Time::HiRes perl Modules
- AST_send_action_child.pl - blind-send for the ACQS
+ Must be present in the /home/cron/ directory
+ Requires Net::Telnet, Net::MySQL perl Modules
- ADMIN_keepalive_ALL.pl - checks to see that ACQS is running
+ Must put entry for this script in the cron as "* * * * * /path/script"
- ADMIN_restart_roll_logs.pl - rolls logs over datestamp upon restart
+ put this script in your machine's startup routine
DESCRIPTION:
This set of programs was created to reduce the risk of deadlocks that occur when
the manager interface connection from a remote machine to the Asterisk server
becomes severed or backlogged in some way resulting in a buffer-overflow of the
manager interface on the Asterisk box and a deadlock of the Asterisk PBX. The
probability of this happening is rare on a system where you may have 100 or less
action commans being executed a day, but when the action commands rise to the
level of 3000+ per server across 30 machines you will have at least 1 deadlock
per day if not one per hour. That's why we needed to find a way to still issue
manager Actions but not have to maintain a connection with the Asterisk Manager
interface. Here is a rundown of how the ACQS works:
There is a simple database table where the action information with unique IDs is
stored and where each action's information is updated by the listener. The table
I use is called vicidial_manager and is detailed in the CONF_MySQL.txt file in
this distribution.
1. First, the GUI client application inserts a record into the table as a NEW
action and includes a unique callerID for REDIRECT and ORIGINATE commands(the
callerID field is how the listener will update the record in the DB)
INSERT INTO vicidial_manager values('','','2004-01-30
17:22:53','NEW','N','10.10.11.12','','Originate','DL40130172253cc160','Channel:
local/8600011@demo','Context: default','Exten: 917274515135','Priority:
1','Callerid: DL40130172253cc160','','','','','');
2. Second, there is a constantly running application on the Asterisk box that
selects queues from the database to be processed, and launches a new child
script to send the action to the database, then marks the action as SENT.
3. Third, each child process logs into the manager interface and sends the
action immediately, then stays open for 10 seconds to not cause any problems,
clears it's buffer and then logs out and exits.
4. Fourth, the listener app is constantly connected on the Asterisk box to the
manager interface and parses all output from the manager interface. Every time a
"Newstate Ringing" event is seen an update statement is sent to the DB based
upon the callerid of the call filling in the channel that the call is on and the
uniqueID of the call and sets the record to "UPDATED"
5. Fifth, the listener also listens for "Hangup" events and sends an update to
the DB with a "DEAD" status keyed by the call's uniqueID.
The above process is executed extremely fast and actually has suprisingly little
effect on the load of the Asterisk box. Because each action is sent through it's
own child process there is no risk of the system deadlocking because of a single
bad action thread.
NOTES:
This started out as a desperate quick fix that evolved into a system that has
been up and running reliably on two separate Asterisk servers. Since we
implemented ACQS we haven't had a single deadlock on either of these servers.
If anyone has suggestions/praises/criticisms I would love to hear them.
To use, follow the instructions in the docs/SCRATCH_INSTALL.txt document.
+622
View File
@@ -0,0 +1,622 @@
AGENT API DOCUMENT Started: 2008-07-03 Updated: 2011-11-14
This document describes the functions of an API(Application Programming Interface)
for the VICIDIAL Agent screen. This functionality will be rather limited at first
and will be built upon as critical functions are identified and programmed into it.
There is also a new NON-agent API script, for more information on that, please
read the NON-AGENT_API.txt document.
API functions:
version - shows version and build of the API, along with the date/time
external_hangup - sends command to hangup the current phone call for one specific agent(Hangup Customer)
external_status - sends command to set the disposition for one specific agent and move on to next call
external_pause - sends command to pause/resume an agent now if not on a call, or pause after their next call if on call
external_dial - sends command to manually dial a number on the agent's screen
external_add_lead - Adds a lead in the manual dial list of the campaign for logged-in agent
change_ingroups - changes the selected in-groups for a logged-in agent
update_fields - changes values for selected data fields in the agent interface
set_timer_action - sets timer action for the current call the agent is on
st_login_log - looks up the vicidial_users.custom_three field and logs event from CRM
st_get_agent_active_lead - looks up active lead info for an agent and outputs lead information
ra_call_control - remote agent call control: hangup/transfer calls being handled by remote agents
send_dtmf - sends dtmf signal string to agent's session
transfer_conference - sends several commands related to the agent transfer-conf frame
park_call - sends command to park customer or grab customer from park or ivr
logout - logs the agent out of the agent interface
New scripts:
/agc/api.php - the script that is accessed to execute commands
Required variables for all API calls:
# user - is the API user
# pass - is the API user password
# agent_user - is the vicidial agent user whose session that you want to affect
# source - description of what originated the API call (maximum 20 characters)
Optional variable for all API calls:
# close_window_link - will display a link to close the window, useful if you pop up the API link in a browser window
# language - currently only works for close window link: en=English, es=Spanish
To hangup the call, disposition it and then pause the agent, do the following in order:
http://server/agc/api.php?source=test&user=6666&pass=1234&agent_user=1000&function=external_pause&value=PAUSE
http://server/agc/api.php?source=test&user=6666&pass=1234&agent_user=1000&function=external_hangup&value=1
http://server/agc/api.php?source=test&user=6666&pass=1234&agent_user=1000&function=external_status&value=A
Response to calls will return either an ERROR or a SUCCESS along with an explanation.
for example:
SUCCESS: external_status function set - 6666|A
ERROR: agent_user is not logged in - 6666
DETAIL OF EACH FUNCTION:
--------------------------------------------------------------------------------
version -
DESCRIPTION:
shows version and build of the API, along with the date/time
VALUES: NONE
EXAMPLE URL:
http://server/agc/api.php?function=version
RESPONSES:
VERSION: 2.0.5-2|BUILD: 90116-1229|DATE: 2009-01-15 14:59:33|EPOCH: 1222020803
--------------------------------------------------------------------------------
external_hangup -
DESCRIPTION:
Hangs up the current customer call on the agent screen
VALUES: (value)
1 - the only valid value for this function
EXAMPLE URL:
http://server/agc/api.php?source=test&user=6666&pass=1234&agent_user=1000&function=external_hangup&value=1
RESPONSES:
ERROR: external_hangup not valid - 1|6666
ERROR: no user found - 6666
ERROR: agent_user is not logged in - 6666
SUCCESS: external_hangup function set - 1|6666
--------------------------------------------------------------------------------
external_status -
DESCRIPTION:
Sets the status of the current customer call on the agent dispotion screen
VALUES: (value)
value -
Any valid status in the VICIDIAL system will work for this function
callback_datetime -
YYYY-MM-DD+HH:MM:SS, date and time of scheduled callback. REQUIRED if callback is set and status is flagged as a scheduled callback
callback_type -
USERONLY or ANYONE, default is ANYONE
callback_comments -
Optional comments to appear when the callback is called back, must be less than 200 characters in length
qm_dispo_code -
Option callstatus code used if QM is enabled
EXAMPLE URL:
http://server/agc/api.php?source=test&user=6666&pass=1234&agent_user=1000&function=external_status&value=A
http://server/agc/api.php?source=test&user=6666&pass=1234&agent_user=1000&function=external_status&value=CALLBK&callback_datetime=2012-01-25+12:00:00&callback_type=USERONLY&callback_comments=callback+comments+go+here&qm_dispo_code=1234
RESPONSES:
ERROR: external_status not valid - A|6666
ERROR: no user found - 6666
ERROR: agent_user is not logged in - 6666
SUCCESS: external_status function set - A|6666
--------------------------------------------------------------------------------
external_pause -
DESCRIPTION:
Pauses or Resumes the agent. If a Pause and the agent is on a live call will pause after the live call is dispositioned
VALUES: (value)
PAUSE - Pauses the agent session
RESUME - Resumes the agent session
EXAMPLE URLS:
http://server/agc/api.php?source=test&user=6666&pass=1234&agent_user=1000&function=external_pause&value=PAUSE
http://server/agc/api.php?source=test&user=6666&pass=1234&agent_user=1000&function=external_pause&value=RESUME
RESPONSES:
ERROR: external_pause not valid - PAUSE|6666
ERROR: no user found - 6666
ERROR: agent_user is not logged in - 6666
SUCCESS: external_pause function set - PAUSE|1232020456|6666
--------------------------------------------------------------------------------
logout -
DESCRIPTION:
Logs the agent out of the agent interface. If the agent is on a live call, will logout after the live call is dispositioned
VALUES: (value)
LOGOUT - Logout the agent session
EXAMPLE URLS:
http://server/agc/api.php?source=test&user=6666&pass=1234&agent_user=1000&function=logout&value=LOGOUT
RESPONSES:
ERROR: logout not valid - PAUSE|6666
ERROR: no user found - 6666
ERROR: agent_user is not logged in - 6666
SUCCESS: logout function set - LOGOUT|1232020456|6666
--------------------------------------------------------------------------------
external_dial -
DESCRIPTION:
Places a manual dial phone call on the agent screen, you can define whether to search for the lead in the existing database or not and you can define the phone_code and the number to dial. This action will pause the agent after their current call, enter in the information to place the call, and dialing the call on the agent screen.
VALUES:
value -
Any valid phone number (7275551212)
lead_id -
Any valid lead_id from the system(either value or lead_id are required) if both are defined, lead_id will override value
phone_code -
Any valid phone country code (1 for USA/Canada, 44 for UK, etc...)
search -
YES - perform a search in the campaign-defined vicidial_list list for this phone number and bring up that lead
NO - do not search, create a new vicidial_list record for the call
preview -
YES - preview the lead in the vicidial screen without dialing
NO - do not preview the lead, place call immediately
focus -
YES - change the focus of the screen to the vicidial.php agent interface, brings up an alert in the browser window
NO - do not change focus
vendor_id -
OPTIONAL, any valid Vendor lead code
dial_prefix -
OPTIONAL, any dial prefix that you want to add to the beginning of the dial string for this call
group_alias -
OPTIONAL, the outbound callerID(from an existing group-alias) that you want to use for this call
vtiger_callback -
OPTIONAL, YES or NO, will lookup the phone number and Vtiger account ID from the provided Event ID
alt_user -
OPTIONAL, instead of agent_user, this is to lookup the agent_user using the vicidial_users.custom_three field
alt_dial -
OPTIONAL, if using lead_id you can set this flag to dial the ALT number or the ADDR3 number
EXAMPLE URLS:
http://server/agc/api.php?source=test&user=6666&pass=1234&agent_user=1000&function=external_dial&value=7275551212&phone_code=1&search=YES&preview=NO&focus=YES
http://server/agc/api.php?source=test&user=6666&pass=1234&agent_user=1000&function=external_dial&value=7275551212&phone_code=1&search=YES&preview=NO&focus=YES&dial_prefix=88&group_alias=DEFAULT
RESPONSES:
ERROR: external_dial not valid - 7275551212|1|YES|6666
ERROR: no user found - 6666
ERROR: agent_user is not logged in - 6666
ERROR: agent_user is not allowed to place manual dial calls - 6666
ERROR: caller_id_number from group_alias is not valid - 6666|TESTING|123
ERROR: group_alias is not valid - 6666|TESTING
ERROR: vtiger callback activity does not exist in vtiger system - 12345
ERROR: phone_number is already in this agents manual dial queue - 6666|7275551211
ERROR: lead_id is not valid - 6666|1234567
ERROR: phone number is not valid - 6666||1234567|
SUCCESS: external_dial function set - 7275551212|6666|1|YES|NO|YES|123456|1232020456|9|TESTING|7275551211|
--------------------------------------------------------------------------------
external_add_lead -
DESCRIPTION:
Adds a lead in the manual dial list of the campaign for logged-in agent. A much simplified add lead function compared to the Non-Agent API function
VALUES:
agent_user -
REQUIRED alphanumeric string for agent user
dnc_check -
OPTIONAL - Check for number against system DNC
campaign_dnc_check -
OPTIONAL - Check for number against campaign DNC from the agent's campaign
LEAD DATA (must populate at least one)
NOTE: Only fields that are specified in the API call will be modified
address1
address2
address3
alt_phone
city
comments
country_code
date_of_birth
email
first_name
gender
gmt_offset_now
last_name
middle_initial
phone_number
phone_code
postal_code
province
security_phrase
source_id
state
title
vendor_lead_code
rank
owner
EXAMPLE URLS:
http://server/agc/api.php?source=test&user=6666&pass=1234&agent_user=1000&function=external_add_lead&phone_number=7275551212&phone_code=1&first_name=Bob&last_name=Smith=NO&dnc_check=YES
RESPONSES:
ERROR: external_add_lead not valid - 7275551212|1|6666|
ERROR: no user found - 6666
ERROR: lead insertion failed - 7275551212|TESTCAMP|101|6666
ERROR: add_lead PHONE NUMBER IN DNC - 7275551212|6666
ERROR: add_lead PHONE NUMBER IN CAMPAIGN DNC - 7275551212|TESTCAMP|6666
ERROR: campaign manual dial list undefined - 7275551212|TESTCAMP|6666
ERROR: agent_user is not logged in - 6666
SUCCESS: lead added - 7275551212|TESTCAMP|101|123456|6666
--------------------------------------------------------------------------------
change_ingroups -
DESCRIPTION:
This function will change the selected in-groups for an agent that is logged into a campaign that allows for inbound calls to be handled. Allows the selected in-groups for an agent to be changed while they are logged-in to the ViciDial Agent screen only. Once changed in this way, the agent would need to log out and back in to be able to select in-groups themselves(If Agent Choose In-Groups is enabled for that user). The blended checkbox can also be changed using this function. The API user performing this function must have vicidial_users.change_agent_campaign = 1.
VALUES:
value -
CHANGE - will change all in-groups to those defined in ingroup_choices
REMOVE - will only remove the listed in-groups
ADD - will only add the listed in-groups
blended -
YES - set the agent to take outbound auto-dialed calls (not applicable in MANUAL and INBOUND_MAN dial method campaigns)
NO - set the agent to only take inbound calls
ingroup_choices -
OPTIONAL, a space-delimited(use plusses + in the URL) list of in-groups to allow the agent to take calls from, example: " TEST_IN2 SALESLINE TRAINING_IN -"
set_as_default -
OPTIONAL, YES or NO - overwrites the settings for the agent in the user modification screen, default is NO
EXAMPLE URLS:
http://server/agc/api.php?source=test&user=6666&pass=1234&agent_user=1000&function=change_ingroups&value=CHANGE&set_as_default=YES&blended=YES&ingroup_choices=+TEST_IN+SALESLINE+FAKE_IN+-
http://server/agc/api.php?source=test&user=6666&pass=1234&agent_user=1000&function=change_ingroups&value=REMOVE&blended=NO&ingroup_choices=+TEST_IN2+TEST_IN4+-
http://server/agc/api.php?source=test&user=6666&pass=1234&agent_user=1000&function=change_ingroups&value=ADD&blended=NO&ingroup_choices=+TEST_IN2+-
RESPONSES:
ERROR: change_ingroups not valid - N| TEST_IN SALESLINE -
ERROR: agent_user is not logged in - 6666
ERROR: campaign does not allow inbound calls - 6666
ERROR: user is not allowed to change agent in-groups - 6666|TESTING|123
ERROR: campaign dial_method does not allow outbound autodial - 6666|TESTING
ERROR: ingroup does not exist - FAKE_IN| TEST_IN FAKE_IN SALESLINE -
ERROR: ingroup_choices are required for ADD and REMOVE values - ADD|
SUCCESS: change_ingroups function set - YES| TEST_IN SALESLINE -|6666
--------------------------------------------------------------------------------
update_fields -
DESCRIPTION:
Updates the fields that are specified with the values. This will update the data that is on the agent's screen in the customer information section.
VALUES:
agent_user -
REQUIRED alphanumeric string for agent user
LEAD DATA (must populate at least one)
NOTE: Only fields that are specified in the API call will be modified
address1
address2
address3
alt_phone
city
comments
country_code
date_of_birth
email
first_name
gender
gmt_offset_now
last_name
middle_initial
phone_number
phone_code
postal_code
province
security_phrase
source_id
state
title
vendor_lead_code
rank
owner
EXAMPLE URLS:
http://server/agc/api.php?source=test&user=6666&pass=1234&function=update_fields&agent_user=6666&vendor_lead_code=1234567&address1=
RESPONSES:
ERROR: update_fields not valid - 6666
ERROR: agent_user is not logged in - 6666
ERROR: user is not allowed to modify lead information - 6666|1234
ERROR: agent_user does not have a lead on their screen - 6666|1234
ERROR: no fields have been defined - 6666
SUCCESS: update_fields lead updated - 6666|1234|87498|vendor_lead_code='1234567',address1=''
--------------------------------------------------------------------------------
set_timer_action -
DESCRIPTION:
Updates the fields that are specified with the values. This will update the data that is on the agent's screen in the customer information section.
VALUES:
agent_user -
REQUIRED, alphanumeric string for agent user
value -
REQUIRED, one of these choices: 'NONE','WEBFORM','WEBFORM2','D1_DIAL','D2_DIAL','D3_DIAL','D4_DIAL','D5_DIAL','MESSAGE_ONLY'
notes -
Optional, the message to be displayed with the timer action
rank -
Optional, the number of seconds into the call to display
EXAMPLE URLS:
http://server/agc/api.php?source=test&user=6666&pass=1234&function=set_timer_action&agent_user=6666&value=MESSAGE_ONLY&notes=test+message&rank=15
RESPONSES:
ERROR: set_timer_action not valid - 6666
ERROR: agent_user is not logged in - 6666
ERROR: user is not allowed to modify campaign settings - 6666|1234
SUCCESS: set_timer_action lead updated - 6666|1234|MESSAGE_ONLY|test message|15
--------------------------------------------------------------------------------
st_login_log -
DESCRIPTION:
Looks up the vicidial_users.custom_three field(as "agentId") to associate with a vicidial user ID. If found it will populate the custom_four field with a "teamId" value, then output the vicidial user ID
VALUES:
value -
REQUIRED alphanumeric string for CRM AgentID
vendor_id -
REQUIRED alphanumeric string for CRM TeamID
EXAMPLE URLS:
http://server/agc/api.php?source=test&user=6666&pass=1234&function=st_login_log&value=876543&vendor_id=207
RESPONSES:
ERROR: st_login_log not valid - 6666|207
ERROR: no user found - 6666
SUCCESS: st_login_log user found - 6666
--------------------------------------------------------------------------------
st_get_agent_active_lead -
DESCRIPTION:
Looks up the vicidial_users.custom_three field(as "agentId") to associate with a vicidial user ID. If found it will output the active lead_id and phone number, vendor_lead_code, province, security_phrase and source_id fields.
VALUES:
value -
REQUIRED alphanumeric string for CRM AgentID
vendor_id -
REQUIRED alphanumeric string for CRM TeamID
EXAMPLE URLS:
http://server/agc/api.php?source=test&user=6666&pass=1234&function=st_get_agent_active_lead&value=876543&vendor_id=207
RESPONSES:
ERROR: st_get_agent_active_lead not valid - 6666|207
ERROR: no user found - 6666
ERROR: user not logged in - 6666
ERROR: no active lead found - 6666
SUCCESS: st_get_agent_active_lead lead found - 6666|7275551212|123456|9987-1234765|SK|WILLIAMS|JUH764AJJJ9
--------------------------------------------------------------------------------
ra_call_control -
DESCRIPTION:
Allows for remote agent call control: hangup/transfer calls being handled by remote agents, also options for recording a disposition and call length
VALUES:
value -
REQUIRED, The call ID of the call as received as CallerIDname field or a special SIP-header, i.e. Y0315201639000402027
agent_user -
REQUIRED, alphanumeric string for remote agent user
stage -
REQUIRED, one of these choices: 'HANGUP','EXTENSIONTRANSFER','INGROUPTRANSFER'
ingroup_choices -
OPTIONAL, only required if INGROUPTRANSFER stage is used, must be a single active in-group, reserved option of "DEFAULTINGROUP" can be used to send the call to the default in-group for the in-group or campaign that originated the call to the remote agent
phone_number -
OPTIONAL, only required if EXTENSIONTRANSFER stage is used, must be a full number when dialed that will dial through the default context
status -
OPTIONAL, status of the call, maximum of 6 characters, if not set, status will be RAXFER
EXAMPLE URLS:
http://server/agc/api.php?source=test&user=6666&pass=1234&agent_user=1028&function=ra_call_control&stage=INGROUPTRANSFER&ingroup_choices=DEFAULTINGROUP&value=Y0316001655000402028
RESPONSES:
ERROR: ra_call_control not valid - Y0315201639000402027|6666|INGROUPTRANSFER
ERROR: no user found - 6666
ERROR: user not logged in - 6666
ERROR: no active call found - Y0315201639000402027
ERROR: phone_number is not valid - 9
ERROR: ingroup is not valid - TESTINGROUP
ERROR: stage is not valid - XYZ
SUCCESS: ra_call_control transferred - 6666|Y0315201639000402027|SALESLINE
SUCCESS: ra_call_control hungup - 6666|Y0315201639000402027|HANGUP
--------------------------------------------------------------------------------
send_dtmf -
DESCRIPTION:
Sends dtmf signal string to agent's session
VALUES: (value)
only valid DTMF characters with these replacements:
P = # (pound or hash)
S = * (star)
Q = (one second of silence)
EXAMPLE URLS:
http://server/agc/api.php?source=test&user=6666&pass=1234&agent_user=1000&function=send_dtmf&value=QQQQ1234SQQQQQ6654P
RESPONSES:
ERROR: send_dtmf not valid - QQ|6666
ERROR: no user found - 6666
ERROR: agent_user is not logged in - 6666
SUCCESS: send_dtmf function set - QQQQ1234SQQQQQ6654P|6666
--------------------------------------------------------------------------------
park_call -
DESCRIPTION:
sends command to park customer or grab customer out of park
VALUES:
value -
REQUIRED, choices are below
PARK_CUSTOMER - send customer to the park extension as defined in the campaign the agent is logged into
GRAB_CUSTOMER - grab customer from the park extension and send them to the agent session
PARK_IVR_CUSTOMER - send customer to the park ivr as defined in the campaign the agent is logged into, customer will come back after finishing IVR
GRAB_IVR_CUSTOMER - grab customer from the park ivr and send them to the agent session
EXAMPLE URLS:
http://server/agc/api.php?source=test&user=6666&pass=1234&agent_user=1000&function=park_call&value=PARK_CUSTOMER
http://server/agc/api.php?source=test&user=6666&pass=1234&agent_user=1000&function=park_call&value=GRAB_CUSTOMER
http://server/agc/api.php?source=test&user=6666&pass=1234&agent_user=1000&function=park_call&value=PARK_IVR_CUSTOMER
http://server/agc/api.php?source=test&user=6666&pass=1234&agent_user=1000&function=park_call&value=GRAB_IVR_CUSTOMER
RESPONSES:
ERROR: park_call not valid - PARK_CUSTOMER|6666
ERROR: no user found - 6666
ERROR: agent_user is not logged in - 6666
ERROR: agent_user does not have a lead on their screen - 6666
SUCCESS: park_call function set - PARK_CUSTOMER|6666
--------------------------------------------------------------------------------
transfer_conference -
DESCRIPTION:
sends several commands related to the agent transfer-conf frame
VALUES:
value -
REQUIRED, choices are below
HANGUP_XFER - hangup the third party line
HANGUP_BOTH - hangup customer and third party line
BLIND_TRANSFER - send a call to a defined phone number
LEAVE_VM - blind transfer customer to the campaign-defined voicemail message
LOCAL_CLOSER - send call to another ViciDial agent, must have in-group, optional phone_number field for AGENTDIRECT agent
DIAL_WITH_CUSTOMER - 3-way call with customer on the line
PARK_CUSTOMER_DIAL - send customer to park and place a call to a third party
LEAVE_3WAY_CALL - leave customer and third party in conference and go to the disposition screen
phone_number -
OPTIONAL/REQUIRED, required for any transfer or dial value
ingroup_choices -
OPTIONAL/REQUIRED, required for local_closer and consultative transfers, must be a single active in-group, reserved option of "DEFAULTINGROUP" can be used to select the default in-group for the in-group or campaign that the call originated from
consultative -
OPTIONAL, when you want to do a consultative transfer with your customer and another ViciDial agent, 'YES' and 'NO' are valid options, you can only use this with DIAL_WITH_CUSTOMER or PARK_CUSTOMER_DIAL
dial_override -
OPTIONAL, dials exactly the phone number specified with no campaign-defined phone code or prefix
EXAMPLE URLS:
http://server/agc/api.php?source=test&user=6666&pass=1234&agent_user=1000&function=transfer_conference&value=HANGUP_XFER
http://server/agc/api.php?source=test&user=6666&pass=1234&agent_user=1000&function=transfer_conference&value=HANGUP_BOTH
http://server/agc/api.php?source=test&user=6666&pass=1234&agent_user=1000&function=transfer_conference&value=BLIND_TRANSFER&phone_number=8500
http://server/agc/api.php?source=test&user=6666&pass=1234&agent_user=1000&function=transfer_conference&value=LEAVE_VM
http://server/agc/api.php?source=test&user=6666&pass=1234&agent_user=1000&function=transfer_conference&value=LOCAL_CLOSER&ingroup_choices=DEFAULTINGROUP
http://server/agc/api.php?source=test&user=6666&pass=1234&agent_user=1000&function=transfer_conference&value=LOCAL_CLOSER&ingroup_choices=AGENTDIRECT&phone_number=6666
http://server/agc/api.php?source=test&user=6666&pass=1234&agent_user=1000&function=transfer_conference&value=LOCAL_CLOSER&ingroup_choices=SALESLINE
http://server/agc/api.php?source=test&user=6666&pass=1234&agent_user=1000&function=transfer_conference&value=DIAL_WITH_CUSTOMER&ingroup_choices=TEST_IN3&consultative=YES
http://server/agc/api.php?source=test&user=6666&pass=1234&agent_user=1000&function=transfer_conference&value=DIAL_WITH_CUSTOMER&phone_number=8500
http://server/agc/api.php?source=test&user=6666&pass=1234&agent_user=1000&function=transfer_conference&value=DIAL_WITH_CUSTOMER&phone_number=919998888112&dial_override=YES
http://server/agc/api.php?source=test&user=6666&pass=1234&agent_user=1000&function=transfer_conference&value=PARK_CUSTOMER_DIAL&ingroup_choices=TEST_IN3&consultative=YES
http://server/agc/api.php?source=test&user=6666&pass=1234&agent_user=1000&function=transfer_conference&value=LEAVE_3WAY_CALL
RESPONSES:
ERROR: transfer_conference not valid - QQ|6666
ERROR: value is not valid - XYZFUNCTION|6666
ERROR: no user found - 6666
ERROR: ingroup is not valid - XYZINGROUP
ERROR: agent_user is not logged in - 6666
ERROR: agent_user does not have a live call - 6666
SUCCESS: transfer_conference function set - LOCAL_CLOSER|SALESLINE||YES|6666
--------------------------------------------------------------------------------
Other information:
Example MySQL query options for executing API functions(not available for all functions):
update vicidial_live_agents set external_hangup=1 where user='1000';
update vicidial_live_agents set external_status='A' where user='1000';
CREATE TABLE vicidial_api_log (
api_id INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
user VARCHAR(20) NOT NULL,
api_date DATETIME,
api_script VARCHAR(10),
function VARCHAR(20) NOT NULL,
agent_user VARCHAR(20),
value VARCHAR(255),
result VARCHAR(10),
result_reason VARCHAR(255),
source VARCHAR(20),
data TEXT,
index(api_date)
);
@@ -0,0 +1,140 @@
ALTERNATE NUMBER DIALING Redesign Started: 2008-08-20 Updated: 2011-08-02
*** THIS SECTION OUTLINES PROPOSED CHANGES TO ALT-NUMBER-DIALING in the 2.0.5 version ***
*** FOR INFORMATION ON THE 2.0.3 AND 2.0.4 VERSION OF ALT NUMBER DIALING LOOK BELOW THIS SECTION ***
As of the 2.4 svn version 2011-08-02 the MULTI_LEAD option has been enabled and is fully functional
(see the MULTI LEAD section below)
As of the 2.2.0 version a lot of bugs have been fixed, and DNC statuses can now be used as auto-alt-dial triggering statuses
Some important rules:
- never duplicate the same number for the same lead in phone_number, alt_phone, address3 or any of the vicidial_list_alt_phones entries, doing so will mess up the auto-alt-dialing process causing numbers to be dialed many more times than they should
- make sure you do not have conflicting lead recycling and auto-alt-dial statuses, this can cause other duplicate dialing problems
In order to allow for more alt-numbers per lead to dial we built a new method of storing and dialing alt-numbers for leads.
CLI lead loader will be changed to allow for the importation of upto 65,000 phone numbers per lead. The new file format is shown below.
vicidial.php agent screen and vdc_db_query.php scripts have been changed to allow for alt-number display and setting alt numbers to inactive if needed.
AST_VDauto_dial.pl, AST_VDauto_dial_FILL.pl and the VDhangup process in FastAGI_log.pl have all been modified to work with the new alt number data structure.
non_agent_api.php has been changed in 2.2.0 to accept new multiple-alt-numbers per inserted lead(see the NON_AGENT_API.txt doc for more information)
File structure for CLI lead loader goes here:
standard
vendor_lead_code|source_code|list_id|phone_code|phone_number|title|first_name|middle|last_name|address1|address2|address3|city|state|province|postal_code|country|gender|date_of_birth|alt_phone|email|security_phrase|COMMENTS|called_count|status|entry_date|multi-alt-entries
3857822|31022|105|01144|1625551212|MRS|B||BURTON|249 MUNDON ROAD|MALDON|ESSEX||||CM9 6PW|UK||||||COMMENTS|2|B|2007-08-09 00:00:00|7275551212_1_work!7275551213_61_sister house!7275551214_44_neighbor
The multi-alt-entries field is formatted as a field of phone-number/phone-code/phone-note set of data(phone code and alt_note are both optional and the phone code can be overridden by the force phone code flag). The record delimiter is an exclamation point with the optional phone code and note delimited within the record by an underscore character _.
MULTI LEAD Auto Alt number dialing:
Using MULTI_LEAD is different from the other standard Auto-Alt-Dial functions, it allows you to use a separate lead for each number on a customer account that all share a common vendor_lead_code, and the type of phone number for each is to be defined with a label in the Owner field. This option will disable some options on the Modify Campaign screen and show a link to the Multi-Alt Settings page which allows you to set which phone number types, defined by the label of each lead, will be dialed and in what order. This will create a special lead filter and will alter the Rank field of all of the leads inside the lists set to this campaign in order to call them in the order you have specified.
The Auto-Alt-Statuses are still in used for MULTI_LEAD so you may want to make sure that statuses like DROP, PDROP and others to your campaign's auto-alt-dial statuses so that the other leads tied by vendor_lead_code in the campaign's lists are not deactivated.
Changes to database:
*** DO NOT MAKE THESE CHANGES, for documentation only ***
CREATE TABLE vicidial_list_alt_phones (
alt_phone_id INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
lead_id INT(9) UNSIGNED NOT NULL,
phone_code VARCHAR(10),
phone_number VARCHAR(18),
alt_phone_note VARCHAR(30),
alt_phone_count SMALLINT(5) UNSIGNED,
active ENUM('Y','N') default 'Y',
index (lead_id),
index (phone_number)
);
ALTER TABLE vicidial_hopper MODIFY alt_dial VARCHAR(6) default 'NONE';
ALTER TABLE vicidial_auto_calls MODIFY alt_dial VARCHAR(6) default 'NONE';
ALTER TABLE vicidial_campaigns MODIFY auto_alt_dial ENUM('NONE','ALT_ONLY','ADDR3_ONLY','ALT_AND_ADDR3','ALT_AND_EXTENDED','ALT_AND_ADDR3_AND_EXTENDED','EXTENDED_ONLY') default 'NONE';
ALTER TABLE vicidial_log ADD alt_dial VARCHAR(6) default 'NONE';
ALTER TABLE vicidial_campaigns ADD agent_extended_alt_dial ENUM('Y','N') default 'N';
UPDATE system_settings SET db_schema_version='1104';
ALTERNATE NUMBER DIALING Summary and Overview 2007-01-15
*** ALTERNATE NUMBER DIALING IN AUTODIAL MODE HAS BEEN ADDED IN THE 2.0.3 RELEASE ***
This document will outline the methods used to automatically dial the alt_phone and/or address3 fields containing phone numbers for a lead while in Auto-dial modes(RATIO or ADAPT*). This feature does not function for leads dialed with the MANUAL dial_method.
If you will be using automatic alt number dialing, it is strongly recommended that you filter your alternate numbers to be the proper length, and remove any non-numeric characters from those fields.
First, a new field in vicidial_campaigns was needed to tell the dialer that it should look for contact numbers in the alt_phone and/or address3 fields if a call to a regular number results in a no-contact(NA/B/DC/N)[defined in the auto_alt_dial_statuses field in the vicidial_campaigns table].
ALTER TABLE vicidial_campaigns ADD auto_alt_dial ENUM('NONE','ALT_ONLY','ADDR3_ONLY','ALT_AND_ADDR3') default 'NONE';
Second, a new field in vicidial_auto_calls and vicidial_hopper tables was needed to tell the dialer that when this call is terminated as no-contact(NA/B/DC/N), it needs to try dialing the next alternate number(s). This field is populated accordingly:
- If the main phone_number is currently being dialed, the alt_dial field will be MAIN
- If the alt_phone is being dialed, ALT
- If the address3 field is being dialed, ADDR3
- If the campaign has AUTO_ALT_DIAL set to NONE or the alt numbers are invalid, then this field will also be set to NONE
This tells the scripts handling the call termination what needs to be done with the call status and what number(if any) it should place in the hopper next.
ALTER TABLE vicidial_auto_calls ADD alt_dial ENUM('NONE','MAIN','ALT','ADDR3') default 'NONE';
ALTER TABLE vicidial_hopper ADD alt_dial ENUM('NONE','ALT','ADDR3') default 'NONE';
Third, because of how the insertion into the hopper of the next attempt has to work when the call is answered by an agent we need to modify the status field in the vicidial_hopper to allow for a HOLD status that can be made READY once the lead is dispositioned:
ALTER TABLE vicidial_hopper MODIFY status ENUM('READY','QUEUE','INCALL','DONE','HOLD') default 'READY';
Fourth, so that the no-answer statuses can be definable, we need to add a new field to vicidial_campaigns to hold the statuses and allow the admin.php interface to be able to modify them.
ALTER TABLE vicidial_campaigns ADD auto_alt_dial_statuses VARCHAR(255) default ' B N NA DC -';
STEPS OF AN AUTO-ALT-DIAL CALL:
1. When a call to a lead's main phone_number is placed by AST_VDauto_dial.pl or AST_VDauto_dial_FILL.pl and the auto_alt_dial field is NOT set to NONE, a flag will be set in the vicidial_auto_calls field as MAIN to note that this lead needs to be called again under it's alternate number(s) if it is terminated under a no-connect status(NA/B/DC/N).
2. What happens when one of these calls is terminated:
2a. If the call has an alt_dial value of MAIN or ALT and went to an agent and was defined as no-contact(NA/B/DC/N) then the vdc_db_query.php script will immediately place that lead back into the vicidial_hopper to be dialed under it's alternate phone number or addr3.
2b. If call has an alt_dial value of MAIN or ALT and was terminated as no-contact by no-answer(NA/B/DC) then the VDhangup process will immediately place that lead back into the vicidial_hopper to be dialed under it's alternate phone number.
3. When the alt_phone is dialed of the same lead, the alt_dial flag in vicidial_auto_calls will be set to ALT, then repeat step 2
4. When the address3 field is dialed from the same lead, the alt_dial flag is set to ADDR3
5. When a call is terminated in auto-dial mode and the number dialed was not the main phone_number, the status will not be changed in the vicidial_list table unless the status is a connect status and it came from an agent.
@@ -0,0 +1,86 @@
VICIDIAL and app_conference
(1.2 tree) EXPERIMENTAL!!!
app_conference offers the plusses of being able to do conferencing
without any zaptel hardware or timers as well as doing native codec
streaming, meaning no manditory downsampling to slin like meetme.
These two features alone mean a rather significant performance boost
to companies who only use VOIP for agents and trunks as well as not
requiring the cost of zaptel hardware or the nightmare of getting
ztdummy to work on some systems.
As of right now, I have a test system fully up and running using
app_conference with VICIDIAL on Asterisk 1.2.8. I have made several
modifications to the app_conference code to make it more of a drop-in
replacement for meetme so that it does not require any changes to the
VICIDIAL codebase. I have added entry and exit sounds(slightly
different from meetme's) as well as "only one in this conference"
message in addition to changing the default member type to speaker(S).
So far I have tested with IAX and SIP channels only and everything
works just like on meetme but I have not done any capacity testing or
tested it in production yet.
If you want to use app_conference instead of meetme for VICIDIAL then follow these instructions:
cd /usr/src/asterisk
wget http://www.eflo.net/files/VD_app_conference_0.6.zip
unzip VD_app_conference_0.6.zip
cd app_conference
make clean
make
make install
In your extensions.conf file you would replace these lines:
exten => 8600051,1,Meetme,8600051
exten => 8600052,1,Meetme,8600052
...continue through 8600100...
exten => 78600051,1,Meetme,8600051|q
exten => 78600052,1,Meetme,8600052|q
...continue through 78600100...
exten => 68600051,1,Meetme,8600051|mq
exten => 68600052,1,Meetme,8600052|mq
...continue through 68600100...
with these lines:
exten => 8600051,1,Conference(8600051)
exten => 8600052,1,Conference(8600052)
...continue through 8600100...
exten => 78600051,1,Conference(8600051|q)
exten => 78600052,1,Conference(8600052|q)
...continue through 78600100...
exten => 68600051,1,Conference(8600051|Lq)
exten => 68600052,1,Conference(8600052|Lq)
...continue through 68600100...
NOTES:
Here are the possible feature flags for this version of app_conference:
o M: Moderator (presently same as speaker) [default]
o S: Speaker
o L: Listener
o T: "Telephone caller" (just for stats?).
o V: Do VAD on this caller
o D: Use Denoise filter on this caller.
o d: Send manager events when DTMF is received.
o q: Do not play enter or exit sounds.
o i: use inband dtmf broadcast.
o t: use rfc dtmf signal broadcast.
COMPILE NOTES:
Some Makefile alterations may be necessary for your system:
From Alek Barkley:
I am running FC4 with latest updates ( 2.6.16 kernel )
My CPU is AMD K6 and GCC 4.0.2.
I edited Makefile in app_conference distribution.
To enter CPU architecture in my case -march=k6
========================================================
PROC = k6
# this is fun for x86
#CFLAGS += -march=pentium3 -msse -mfpmath=sse,387
CFLAGS += -march=k6
===========================================================
@@ -0,0 +1,275 @@
ASTERISK CONF FILE GENERATION Started: 2009-02-11 Updated: 2011-10-04
This file details the process for how the system automatically generates Asterisk conf files purely from VICIDIAL settings.
The conf files that are generated are:
/etc/asterisk/extensions-vicidial.conf
/etc/asterisk/iax-vicidial.conf
/etc/asterisk/sip-vicidial.conf
/etc/asterisk/voicemail.conf
/etc/asterisk/meetme-vicidial.conf
/etc/asterisk/musiconhold-vicidial.conf
All of the above files are included in their respective conf files by #include links that you can see if you look at the sample conf files in the docs directory.
IMPORTANT!!! - Files will only be generated for SIP and IAX phones and carriers that are listed as active=Y in the VICIDIAL administration web interface.
- Files will only be generated on servers where the server record is set to active_asterisk_server='Y' and generate_vicidial_conf='Y'
- The automatic reloading of new conf files by the system is only possible if you started Asterisk with the start_asterisk_boot.pl script, or if Asterisk is running in a screen session named 'asterisk'.
After any phone, server, carrier, musiconhold, call menu or voicemail entry is edited in the admin interface, a flag(rebuild_conf_files='Y') will be set to have the ADMIN_keepalive_ALL.pl script(that should be running once a minute in the crontab) run and generate new conf files and reload Asterisk.
Phones are defined in the admin.php -> Admin -> Show Phones
Carriers are defined in the admin.php -> Admin -> Servers -> Show Carriers
If you have special settings that you want to use for phones such as codecs you can use either a Template(admin.php -> Admin -> Servers -> Show Templates) or enter in the full account record(not including the "[extension]") into the "Conf Override" field.
If you are using a SIP carrier, then you may need to manually set "externip=XXX.XXX.XXX.XXX" in the /etc/asterisk/sip.conf file where XXX.XXX.XXX.XXX is the external IP address of your server as the outside world(or your carrier) sees it.
CALL MENUS (aka IVRs):
The Call Menus feature allows for the creation of IVR segments that can be linked together through contexts in the dialplan. In this way, both simple and complex menus can be created, to deliver anything from a simple Automated Atttendant to more detailed IVR applications.
The Menu ID is the unique identifier of the call menu and it is also used as the context when the entry is created in the dialplan.
Call Menu Options:
0,1,2,3,4,5,6,7,8,9,*,#,A,B,C,D,TIMECHECK,TIMEOUT,INVALID,INVALID_2ND,INVALID_3RD
The options are the DTMF digits that a caller can select within this Call Menu, with the exception of the TIMECHECK, TIMEOUT and INVALID options which are used when the call is taking place outside of the call_time as defined in the Call menu, when the menu times out or when an invalid choice is made.
Call Menu Routes:
CALLMENU,HANGUP,DID,EXTENSION,PHONE,VOICEMAIL,AGI
The option route is similar to the DID route since it defines what method to use to send the call to the option route value. The route value is dependant upon the route selected, for example if you selected DID as the route you would then need to select a value DID to send the call to. Or if you selected PHONE as the route, the route value would need to be a valid phone login as defined in the phones section of Administration.
Log Key Press - This option if enabled will log the DTMF key press by the caller in this Call Menu. Default is 0 for disabled.
Log Field - If the Log Key Press option is enabled, this optional setting can allow the response to also be stored in this list field. vendor_lead_code, source_id, phone_code, title, first_name, middle_initial, last_name, address1, address2, address3, city, state, province, postal_code, country_code, alt_phone, email, security_phrase, comments, rank, owner, status, user. Default is NONE for disabled.
An example of a call menu:
menu_id = test_menu
menu_name = this is only a test
menu_prompt = hello
menu_timeout = 10
menu_timeout_prompt = vm-goodbye
menu_invalid_prompt =
menu_repeat = 1
menu_time_check = 1
call_time_id = 9am-5pm
track_in_vdac = 1
custom_dialplan_entry =
tracking_group = CALLMENU
dtmf_log = 0
dtmf_field = NONE
menu_id = test_menu
option_value = 1
option_description = This is what happens when you press 1
option_route = DID
option_route_value = 6666
option_route_value_context =
menu_id = test_menu
option_value = 2
option_description = This is what happens when you press 2
option_route = DID
option_route_value = 6667
option_route_value_context =
menu_id = test_menu
option_value = 3
option_description = This is what happens when you press 3
option_route = EXTENSION
option_route_value = 101
option_route_value_context = default
menu_id = test_menu
option_value = 4
option_description = This is what happens when you press 4
option_route = PHONE
option_route_value = 350
option_route_value_context =
menu_id = test_menu
option_value = 5
option_description = This is what happens when you press 5
option_route = CALLMENU
option_route_value = test_menu_2
option_route_value_context =
menu_id = test_menu
option_value = 6
option_description = This is what happens when you press 6
option_route = HANGUP
option_route_value = vm-goodbye
option_route_value_context =
menu_id = test_menu
option_value = 7
option_description = This is what happens when you press 7
option_route = VOICEMAIL
option_route_value = 350
option_route_value_context =
menu_id = test_menu
option_value = 8
option_description = This is what happens when you press 8
option_route = AGI
option_route_value = agi-test.agi,variables-go-here
option_route_value_context =
menu_id = test_menu
option_value = TIMECHECK
option_description =
option_route = EXTENSION
option_route_value = 101
option_route_value_context = default
This is what it would look like in the dialplan:
; this is only a test
[test_menu]
exten => s,1,AGI(agi-VDAD_inbound_calltime_check.agi,-----YES-----test_menu-----24hours-----EXTENSION-----101-----default)
exten => s,n,Background(hello)
exten => s,n,WaitExten(10)
exten => s,n,Background(hello)
exten => s,n,WaitExten(10)
exten => s,n,Hangup
; This is what happens when you press 1
exten => 1,1,Goto(6666,1,trunkinbound)
; This is what happens when you press 2
exten => 2,1,Goto(6667,1,trunkinbound)
; This is what happens when you press 3
exten => 3,1,Goto(101,1,default)
; This is what happens when you press 4
exten => 4,1,Goto(350,1,default)
; This is what happens when you press 5
exten => 5,1,Goto(s,1,test_menu_2)
; This is what happens when you press 6
exten => 6,1,Playback(vm-goodbye)
exten => 6,n,Hangup
; This is what happens when you press 7
exten => 7,1,Goto(85026666666666350,1,default)
; This is what happens when you press 8
exten => 8,1,AGI(agi-test.agi,variables-go-here)
exten => i,1,Goto(s,2)
exten => t,1,Playback(vm-goodbye)
exten => t,n,Goto(s,2)
exten => h,1,DeadAGI(agi://127.0.0.1:4577/call_log--HVcauses--PRI-----NODEBUG-----${HANGUPCAUSE}-----${DIALSTATUS}-----${DIALEDTIME}-----${ANSWEREDTIME})
Example of an inbound IVR using Call Menus and updating existing customer records after querying for a vendor_lead_code with TTS confirmation of last name:
1. Make sure Admin -> System Settings options are set:
- Allow Custom Dialplan Entries = 1
- Enable TTS Integration = 1
2. Make sure Cepstral TTS is installed(with licenses) and create this TTS prompt in Admin -> Text To Speech
- TTS ID: lastname_oneyestwono
- TTS Name: Confirm last name one for yes two for no
- TTS Active: Y
- TTS Voice: Allison-8kHz
- TTS Text: Is this the members last name? <break time='500ms'/> --A--last_name--B-- <break time='1000ms'/> Press one for yes, or two for no.
3. Create first Call Menu in Inbound -> Add A New Call Menu
- Menu ID: enter_your_id
- Menu Name: Enter a Member ID
- Menu Prompt: <record a prompt and add it through the Admin -> Audio Store> (remember, 8k/16bit/mono/pcm/wav files)
- Menu Timeout: 10
- Menu Repeat: 1
- Menu Timecheck: 0
- Log Key Press: 0
- Log Field: NONE
- Custom Dialplan Entry:
exten => _XXXXXXXX,1,AGI(cm_lookup.agi,vendor_lead_code---CAMPLISTSALL---TESTCAMP---lastname_oneyestwono)
<submit to save changes>
4. Create second Call Menu -
- Menu ID: enter_date
- Menu Name: Enter visit date mmdd
- Menu Prompt: <recorded prompt>
- Menu Timeout: 10
- Menu Repeat: 1
- Menu Timecheck: 0
- Log Key Press: 1
- Log Field: email <this is the field that will get the date stored in>
- Custom Dialplan Entry:
exten => _XXXX,1,AGI(cm.agi,CALLMENU-----${EXTEN}-----email)
exten => _XXXX,n,Goto(complete_visit,s,1)
<submit to save changes>
5. Create third Call Menu -
- Menu ID: complete_visit
- Menu Name: Was visit complete or not
- Menu Prompt: <recorded prompt>
- Menu Timeout: 10
- Menu Repeat: 1
- Menu Timecheck: 0
- Log Key Press: 1
- Log Field: province <this is the field that will get the response stored in>
<submit to save changes>
6. Create fourth Call Menu -
- Menu ID: incomplete_reason
- Menu Name: Reason visit was incomplete
- Log Key Press: 1
- Log Field: security_phrase <this is the field that will get the response stored in>
<submit to save changes>
7. Create fifth Call Menu -
- Menu ID: followup_required
- Menu Name: Is a follow-up required
- Log Key Press: 1
- Log Field: alt_phone <this is the field that will get the response stored in>
<submit to save changes>
8. Create sixth Call Menu -
- Menu ID: followup_action
- Menu Name: Follow-up action
- Log Key Press: 1
- Log Field: owner <this is the field that will get the response stored in>
<submit to save changes>
9. Create seventh Call Menu -
- Menu ID: update_another_record
- Menu Name: Ask if you want to update another record
- Log Key Press: 0
- Log Field: NONE
<submit to save changes>
10. Add the following options to these call menus that we have just created:
- enter_your_id
- Add a "A" option to go to CALLMENU "enter_date", matching IDs will move on
- Add a "B" option to go to CALLMENU "enter_your_id", no-match will repeat prompt
- enter_date
- Add a "INVALID" option to go to CALLMENU "enter_date"
- complete_visit
- Add a "1" option to go to CALLMENU "update_another_record"
- Add a "2" option to go to CALLMENU "incomplete_reason"
- incomplete_reason
- Add options "1-5" to go to CALLMENU "followup_required"
- followup_required
- Add a "1" option to go to CALLMENU "followup_action"
- Add a "2" option to go to CALLMENU "update_another_record"
- Add a "3" option to go to CALLMENU "update_another_record"
- incomplete_reason
- Add options "1-9" to go to CALLMENU "update_another_record"
- followup_required
- Add a "1" option to go to CALLMENU "enter_your_id"
- Add a "2" option to go to HANGUP with audio prompt "vm-goodbye"
@@ -0,0 +1,42 @@
VICIDIAL Dialing-out Balance FILL proces flow 2006-11-20
** FULL VICIDIAL BALANCE DIALING FUNCTIONALITY WAS ADDED IN THE 2.0.2 RELEASE **
This will outline the process I have thought through in my head for a way to allow for dialing-out only servers and for dialing-out-trunk-lines on one VICIDIAL server to be utilized when another dialing server does not have enough lines to meet it's dial level for the number of agents that are on the server.
This process is made much more complicated by the addition of the new campaign-reserved-trunks feature for servers, meaning that you need to check on the trunk reservations and their settngs before being able to place any calls.
This script(AST_VDauto_dial_FILL.pl) will be a constantly running script that needs to only be run on one server in a VICIDIAL cluster of servers.
This script will be started up and monitored by the ADMIN_keepalive_ALL.pl script.
This script is not needed on a single-server or single-VICIDIAL/Asterisk server setup.
MySQL database changes needed for this new feature:(already in upgrade_2.0.2.sql file)
ALTER TABLE vicidial_auto_calls MODIFY call_type ENUM('IN','OUT','OUTBALANCE') default 'OUT';
- Added OUTBALANCE to keep track of the calls that were originated by the Balance FILL process.
Changes to existing AST_VDauto_dial.pl script:
Only one notable change for CLOSER campaigns to look for OUTBALANCE in addition to OUT calls in vicidial_auto_calls when dialing BLENDED on CLOSER campaigns.
Process Flow of the AST_VDauto_dial_FILL.pl script:
- Check if there are any servers with vicidial_balance_active=Y and no trunk shortage
- Get a count of the shortages and what campaigns they are on
- Start looping through the campaigns with trunk shortages
- Get a count of the DB value and current balance_trunk_fill
- Get list of servers with trunk shortfall
- Get a count of the servers that have no shortfall and allow balance dialing
- Get dialing variable values for servers with balance available and no shortfall
- Loop through these servers
- Calculate the available trunks for this campaign per server
- Calculate the number of trunks to dial for this server for this campaign
- Select leads from the hopper and dial
(this step is identical to normal AST_VDauto_dial.pl script)
@@ -0,0 +1,682 @@
Asterisk/astguiclient install from existing server. v.2.2.0 2010-01-07
By the VICIDIAL group info@vicidial.com
This document is meant to be more of an overview of a VICIDIAL/astGUIclient
installation. If you are looking for more detail or are having problems with
installation please read the SCRATCH_INSTALL.txt document.
End-user Manuals for Agents and Managers are available from http://www.eflo.net
There is also an easier Ubuntu install doc: Ubuntu_Install.txt
If you want to skip the experience of installing step-by-step completely, take
a look at our ISO installer: http://www.vicibox.com
REQUIREMENTS:
- root access on the server you want to install asGUIclient/VICIDIAL on to.
- Zap trunks(T1/E1 or PSTN lines), IAX2 trunks or SIP trunks required
- You must have a zaptel timer like a PSTN/T1/E1 card or ztdummy
or you can use the experimental app_conference module
- Client phones can be SIP/IAX/Zap
- SoX 12.17.5 or greater must be installed
- GNU screen 3.9.15 or greater must be installed
- ntp must be installed and syncd to same time source as any other servers
- Perl5 with several CPAN modules(Time::HiRes, DBI, DBD::mysql, Net::Telnet, Net::Server etc)
- asterisk-perl 0.08, do NOT use newer versions, they do not work with VICIDIAL
- MySQL server or mysqlclientlibs, must be version 5.0.X or higher
- If you will be installing Asterisk 1.4 releases you need Gnu Make 3.81
- Apache/PHP server with php.ini memory_limit set to 48M or higher
PHASE 1: INSTALLING ASTERISK
1. follow these command line steps:
mkdir /usr/src/asterisk-1.4
cd /usr/src/asterisk-1.4
wget http://downloads.digium.com/pub/asterisk/old-releases/asterisk-1.4.21.2.tar.gz
wget http://downloads.digium.com/pub/zaptel/zaptel-1.4.12.1.tar.gz
wget http://downloads.digium.com/pub/libpri/libpri-1.4.9.tar.gz
tar xzf asterisk-1.4.21.2.tar.gz
tar xzf zaptel-1.4.12.1.tar.gz
tar xzf libpri-1.4.9.tar.gz
cd libpri-1.4.9
make clean; make; make install
cd ../zaptel-1.4.12.1
./configure; make clean; make; make install
cd ../asterisk-1.4.21.2
wget http://www.eflo.net/files/enter.h
wget http://www.eflo.net/files/leave.h
mv -f enter.h apps/enter.h
mv -f leave.h apps/leave.h
wget http://download.vicidial.com/asterisk-patches/1.4-gsm-gcc4.2.patch
patch -p1 ./codecs/gsm/Makefile 1.4-gsm-gcc4.2.patch
wget http://download.vicidial.com/conf/res_agi_defunct.patch
patch -p1 < res_agi_defunct.patch
File to patch: res/res_agi.c
cd apps/
rm -f app_waitforsilence.c
wget http://download.vicidial.com/conf/app_waitforsilence.c
cd ../channels/
rm chan_sip.c
wget http://download.vicidial.com/conf/chan_sip.c
cd ../
./configure; make clean; make; make install
# this makes sample conf files (only use for new installs)
make samples
modprobe zaptel
modprobe ztdummy (if you have no timer)
- install the module for the digium device that you are using, we are
using the T100P single span T1 card so we use:
modprobe wct1xxp
Here's the list of all digium cards and the modules you use with
them:
Card Module
-----------------
TDM400P wctdm
X100P wcfxo
TDM* wcfxs
S100U wcusb
T100P wct1xxp
E100P wct1xxp
T400P tor2
E400P tor2
TE110P wcte11xp
TE410P wct4xxp
TE405P wct4xxp
TE411P wct4xxp
TE406P wct4xxp
TE210P wct2xxp
TE205P wct2xxp
TDM2400P wctdm24xxp
- If you have chosen a Sangoma T1/E1 or analog card, you will need to
follow their instructions for installation of their driver software
LATEST Sangoma Wanpipe drivers:
ftp://ftp.sangoma.com/linux/current_wanpipe/wanpipe-3.3.9.tgz
- now your asterisk installation is built and loaded and it's time to
configure it.
NOTES: If you want to install zttool diagnostics you may need the newt package installed:
http://download.vicidial.com/packages/newt-0.51.6.tar.gz
ln -s /usr/lib/libnewt.so.0.51.6 /usr/lib/libnewt.so.0.51
then go to your zaptel folder and do 'make zttool'
Digium/Clone X100P EXAMPLE for reliable cheap hardware timer:
./conf_examples/zaptel.conf.x100p.sample
./conf_examples/zapata.conf.x100p.sample
Digium/Clone T100P EXAMPLE, also works for TE4xxp cards
./conf_examples/zaptel.conf.t100p.sample
./conf_examples/zapata.conf.t100p.sample
PHASE 2: CONFIGURING ASTERISK
### Mostly depricated, ViciDial now allows you to configure phones, carriers, voicemail and musiconhold in the admin
web interface
Sample conf files for a system with:
- astGUIclient and VICIDIAL
- two SIP phones
- one IAX phone
- a SIP trunk
- an IAX trunk
- a set of Zap phones through a channelbank
- a Zap T1 PRI line with 23 voice channels
These are available in these sample conf files:
./conf_examples/sip.conf.sample
./conf_examples/iax.conf.sample
./conf_examples/extensions.conf.sample
./conf_examples/meetme.conf.sample
./conf_examples/voicemail.conf.sample
./conf_examples/manager.conf.sample
./conf_examples/logger.conf.sample
./conf_examples/dnsmgr.conf.sample
For more information on configuring Asterisk or your phones read the
SCRATCH_INSTALL document.
PHASE 3: INSTALLING ASTGUICLIENT AND VICIDIAL
Now that Asterisk is installed and running we can add the astGUIclient and
VICIDIAL components to the system.
There are two methods for downloading astGUIclient/VICIDIAL, a release and SVN
1. Go to http://astguiclient.sf.net/ and download the latest astguiclient
package(as of this writing it is 2.2.0)
- for 2.0.X release:
mkdir /usr/src/astguiclient
cd /usr/src/astguiclient
wget http://internap.dl.sourceforge.net/sourceforge/astguiclient/astguiclient_2.2.0.zip
unzip astguiclient_2.2.0.zip
perl install.pl
- for SVN 2.2.0 branch:
mkdir /usr/src/astguiclient
cd /usr/src/astguiclient
svn checkout svn://svn.eflo.net:3690/agc_2-X/branches/agc_2.2.0
cd agc_2.2.0
perl install.pl
- for SVN 2.4 trunk:
mkdir /usr/src/astguiclient
cd /usr/src/astguiclient
svn checkout svn://svn.eflo.net:3690/agc_2-X/trunk
cd trunk
perl install.pl
select to do interactive setup and customize to your server
- there is one more file you need that's not included with the download
package, it's the conf.gsm file(this is the half-hour music file that we use
to put people on hold). I have a free classical music file that is available
free for download at the following two sites:
http://download.vicidial.com/sounds/conf.gsm
http://astguiclient.sf.net/conf.gsm
Once you have downloaded it, you will need to copy it to this folder:
/var/lib/asterisk/sounds/
Then you will need to execute this command to copy it as the park file
'cp /var/lib/asterisk/sounds/conf.gsm /var/lib/asterisk/sounds/park.gsm'
Here are the steps spelled out:
cd /var/lib/asterisk/sounds
wget http://download.vicidial.com/sounds/conf.gsm
cp conf.gsm park.gsm
- you are done
If you will be doing native music-on-hold for your inbound calls, you will need
musiconhold audio files to be converted to native formats like GSM, ULAW and ALAW:
cd /var/lib/asterisk/mohmp3/
mpg123 -s --rate 44100 --mono /var/lib/asterisk/mohmp3/fpm-sunshine.mp3 > /var/lib/asterisk/mohmp3/fpm-sunshine.raw
sox -r 44100 -w -s -c 1 fpm-sunshine.raw -r 8000 -c 1 fpm-sunshine.wav
sox fpm-sunshine.wav -t gsm -r 8000 -b -c 1 fpm-sunshine.gsm
sox fpm-sunshine.wav -t ul -r 8000 -b -c 1 fpm-sunshine.pcm
mpg123 -s --rate 44100 --mono /var/lib/asterisk/mohmp3/fpm-calm-river.mp3 > /var/lib/asterisk/mohmp3/fpm-calm-river.raw
sox -r 44100 -w -s -c 1 fpm-calm-river.raw -r 8000 -c 1 fpm-calm-river.wav
sox fpm-calm-river.wav -t gsm -r 8000 -b -c 1 fpm-calm-river.gsm
sox fpm-calm-river.wav -t ul -r 8000 -b -c 1 fpm-calm-river.pcm
mpg123 -s --rate 44100 --mono /var/lib/asterisk/mohmp3/fpm-world-mix.mp3 > /var/lib/asterisk/mohmp3/fpm-world-mix.raw
sox -r 44100 -w -s -c 1 fpm-world-mix.raw -r 8000 -c 1 fpm-world-mix.wav
sox fpm-world-mix.wav -t gsm -r 8000 -b -c 1 fpm-world-mix.gsm
sox fpm-world-mix.wav -t ul -r 8000 -b -c 1 fpm-world-mix.pcm
mkdir ../orig-mp3
mv -f *.mp3 ../orig-mp3/
mkdir ../quiet-mp3
cd ../quiet-mp3
sox -r 44100 -w -s -c 1 ../mohmp3/fpm-sunshine.raw -r 8000 -c 1 fpm-sunshine.wav vol 0.25
sox fpm-sunshine.wav -t gsm -r 8000 -b -c 1 fpm-sunshine.gsm
sox fpm-sunshine.wav -t ul -r 8000 -b -c 1 fpm-sunshine.pcm
sox -r 44100 -w -s -c 1 ../mohmp3/fpm-calm-river.raw -r 8000 -c 1 fpm-calm-river.wav vol 0.25
sox fpm-calm-river.wav -t gsm -r 8000 -b -c 1 fpm-calm-river.gsm
sox fpm-calm-river.wav -t ul -r 8000 -b -c 1 fpm-calm-river.pcm
sox -r 44100 -w -s -c 1 ../mohmp3/fpm-world-mix.raw -r 8000 -c 1 fpm-world-mix.wav vol 0.25
sox fpm-world-mix.wav -t gsm -r 8000 -b -c 1 fpm-world-mix.gsm
sox fpm-world-mix.wav -t ul -r 8000 -b -c 1 fpm-world-mix.pcm
rm -f ../mohmp3/*.raw
PHASE 4: CREATING MYSQL DATABASE AND POPULATING IT
we will create the database and add a few initial records so that we can
use the administrative web interface. Since this is a new install it is easier
to use our new mysql script file to add the tables to the database:
Make sure to use reasonable settings for mysql huge.cnf does not look as huge anymore
in light of current systems.
Plus you should increase the connect_timeout so connections do not fail on
a more loaded system.
1. at the command prompt type go to the mysql client:
/usr/local/mysql/bin/mysql
2. type the following into the mysql client prompt:
(make sure you put your IP address in place of "10.10.10.15" in the queries below)
######------ BEGIN Mysql data entry(you can copy and paste this into terminal) #
SET GLOBAL connect_timeout=60;
CREATE DATABASE `asterisk` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
GRANT SELECT,INSERT,UPDATE,DELETE,LOCK TABLES on asterisk.* TO cron@'%' IDENTIFIED BY '1234';
GRANT SELECT,INSERT,UPDATE,DELETE,LOCK TABLES on asterisk.* TO cron@localhost IDENTIFIED BY '1234';
GRANT RELOAD ON *.* TO cron@'%';
GRANT RELOAD ON *.* TO cron@localhost;
GRANT ALTER,CREATE on asterisk.* TO custom@'%' IDENTIFIED BY 'custom1234';
GRANT ALTER,CREATE on asterisk.* TO custom@localhost IDENTIFIED BY 'custom1234';
flush privileges;
use asterisk;
\. /usr/src/astguiclient/trunk/extras/MySQL_AST_CREATE_tables.sql
or you may need to run this if you get an error:
\. /usr/src/astguiclient/agc_2.2.0/extras/MySQL_AST_CREATE_tables.sql
\. /usr/src/astguiclient/astguiclient/MySQL_AST_CREATE_tables.sql
### to load in default IAX and SIP phone accounts run the following query
\. /usr/src/astguiclient/trunk/extras/sip-iax_phones.sql
or you may need to run this if you get an error:
\. /usr/src/astguiclient/agc_2.2.0/extras/sip-iax_phones.sql
\. /usr/src/astguiclient/astguiclient/sip-iax_phones.sql
### to load the initial server values for this first system install
\. /usr/src/astguiclient/trunk/extras/first_server_install.sql
or you may need to run this if you get an error:
\. /usr/src/astguiclient/agc_2.2.0/extras/first_server_install.sql
\. /usr/src/astguiclient/astguiclient/first_server_install.sql
quit
to change the server_ip address from default to match your system run:
- /usr/share/astguiclient/ADMIN_update_server_ip.pl --old-server_ip=10.10.10.15
to populate the timezone/country table run this command from command line:
- /usr/share/astguiclient/ADMIN_area_code_populate.pl
to load the performance testing leads run these commands:
- cp /usr/src/astguiclient/trunk/extras/performance_test_leads.txt /usr/share/astguiclient/LEADS_IN/
or
- cp /usr/src/astguiclient/agc_2.2.0/extras/performance_test_leads.txt /usr/share/astguiclient/LEADS_IN/
- cp /usr/src/astguiclient_2.2.0/trunk/extras/performance_test_leads.txt /usr/share/astguiclient/LEADS_IN/
- /usr/share/astguiclient/VICIDIAL_IN_new_leads_file.pl --forcelistid=107 --forcephonecode=1
######------ END Mysql data entry ------######
NOTE: if you are not installing using default user/pass or have MySQL on another
server, you will need to edit either the /etc/astguiclient.conf file or the
dbconnect.php files in the astguiclient, vicidial and agc directories of your
webroot.
NOTE: if you have a dedicated MySQL database server with a lot of RAM(8GB or
greater) then you should consider running the following MySQL queries to
turn heavily used tables into MEMORY tables to speed up execution and reduce
load on your database server:
ALTER TABLE vicidial_live_agents MODIFY closer_campaigns VARCHAR(8000) default '';
ALTER TABLE vicidial_live_agents MODIFY external_ingroups VARCHAR(8000) default '';
ALTER TABLE vicidial_live_agents MODIFY agent_territories VARCHAR(1000) default '';
ALTER TABLE vicidial_live_agents ENGINE=MEMORY;
ALTER TABLE vicidial_manager ENGINE=MEMORY;
3. Enter the astguiclient administration page:
http://10.10.10.15/vicidial/admin.php
NOTE: if you click on the Logout button you must leave the user/pass empty and click OK
- Here you will enter the login and password that you inserted into the mysql
database in the vicidial_users table (above [6666/1234])
- Now that you are logged into the astGUIclient administration system we can
add a new phone entry for each of the sipura lines we created.
- click on the "PHONES" link at the top, then the "ADD PHONE" link below
that and enter in the proper information for each of the new phone lines.
Here's what we entered for spa2000:
- Phone extension: spa2000
- Dialplan Number: 2000
- Voicemail Box: 2000
- Phone IP address: 10.10.10.17
- Computer IP address: 10.10.9.17
- Server IP: 10.10.10.15
- Login: spa2000
- Password: test
- Conf File Secret: test
- Status: ACTIVE
- Active Account: Y
- Phone Type: Sipura SPA-2000 line 1
- Full Name: Sipura line 1 test
- Company: TEST
- Picture:
- Protocol: SIP
- for the next phone simply replace 2000 with 2001 in the above example
- now your phones are all all set up in the astguiclient system and you can
use this website to add new phones to be used with astguiclient and monitor
the number of calls people are making.
- click on the "LIST ALL SERVERS" link at the top then click on the
server to modify. Verify that the GMT time zone and all other fields
are what you want them to be. There is a setting(Max VICIDIAL Trunks)
that can be modified to limit the number of VICIDIAL outbound trunks
that will be allowed to use on this server.
**OPTIONAL** For Zap clients you will need to use full Zap Channel name as the
extension on the admin page entry: "1-1" for our Zap phone example
previously. And do not forget to set the protocol on this page to Zap
PHASE 5: ADDING STARTUP ENTRIES FOR ASTGUICLIENT/VICIDIAL SCRIPTS
1. Make several entries in the rc.local of your system:
- on the command line type:
- vi /etc/rc.d/rc.local
- add the following entries(here's what we used):
# OPTIONAL enable ip_relay(for same-machine trunking and blind monitoring)
# /usr/share/astguiclient/ip_relay/relay_control start 2>/dev/null 1>&2
# Disable console blanking and powersaving
setterm -blank
setterm -powersave off
setterm -powerdown
### start time server
/usr/local/bin/ntpdate -u ntp.myfloridacity.us
/usr/sbin/ntpd
### start up the MySQL server
/usr/local/mysql/bin/mysqld_safe --user=mysql --skip-name-resolve --skip-host-cache &
### roll the Asterisk logs upon reboot
/usr/share/astguiclient/ADMIN_restart_roll_logs.pl
### clear the server-related records from the database
/usr/share/astguiclient/AST_reset_mysql_vars.pl
### start up the apache web server
/usr/local/apache2/bin/apachectl start
### load digium zaptel 4xT1 drivers into system
# if using Sangoma card, put wanrouter start in place or modprobes
modprobe zaptel
modprobe wct4xxp
/sbin/ztcfg -vvvvvvvvvvvv
### sybsys local login
touch /var/lock/subsys/local
### sleep for 10 seconds before launching Asterisk
sleep 10
### start up asterisk
/usr/share/astguiclient/start_asterisk_boot.pl
- you are done
PHASE 6: ADDING CRONTAB ENTRIES FOR ASTGUICLIENT/VICIDIAL SCRIPTS
1. Make several entries in the cron of your system:
- on the command line type:
- cd /usr/share/astguiclient
- crontab -e
- add the following entries(here's what we used):
### recording mixing/compressing/ftping scripts
#0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57 * * * * /usr/share/astguiclient/AST_CRON_audio_1_move_mix.pl
0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57 * * * * /usr/share/astguiclient/AST_CRON_audio_1_move_mix.pl --MIX
0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57 * * * * /usr/share/astguiclient/AST_CRON_audio_1_move_VDonly.pl
1,4,7,10,13,16,19,22,25,28,31,34,37,40,43,46,49,52,55,58 * * * * /usr/share/astguiclient/AST_CRON_audio_2_compress.pl --GSM
#2,5,8,11,14,17,20,23,26,29,32,35,38,41,44,47,50,53,56,59 * * * * /usr/share/astguiclient/AST_CRON_audio_3_ftp.pl --GSM
### keepalive script for astguiclient processes
* * * * * /usr/share/astguiclient/ADMIN_keepalive_ALL.pl
### kill Hangup script for Asterisk updaters
* * * * * /usr/share/astguiclient/AST_manager_kill_hung_congested.pl
### updater for voicemail
* * * * * /usr/share/astguiclient/AST_vm_update.pl
### updater for conference validator
* * * * * /usr/share/astguiclient/AST_conf_update.pl
### flush queue DB table every hour for entries older than 1 hour
###### SHOULD ONLY BE RUN ON ONE SERVER IN A CLUSTER!!!!! #####
11 * * * * /usr/share/astguiclient/AST_flush_DBqueue.pl -q
### fix the vicidial_agent_log once every hour and the full day run at night
33 * * * * /usr/share/astguiclient/AST_cleanup_agent_log.pl
50 0 * * * /usr/share/astguiclient/AST_cleanup_agent_log.pl --last-24hours
## uncomment below if using QueueMetrics
#*/5 * * * * /usr/share/astguiclient/AST_cleanup_agent_log.pl --only-qm-live-call-check
# cleanup of the scheduled callback records
25 0 * * * /usr/share/astguiclient/AST_DB_dead_cb_purge.pl --purge-non-cb -q
## uncomment below if using Vtiger
#1 1 * * * /usr/share/astguiclient/Vtiger_optimize_all_tables.pl --quiet
### updater for VICIDIAL hopper
* * * * * /usr/share/astguiclient/AST_VDhopper.pl -q
### adjust the GMT offset for the leads in the vicidial_list table
1 1,7 * * * /usr/share/astguiclient/ADMIN_adjust_GMTnow_on_leads.pl --debug --list-settings
### reset several temporary-info tables in the database
2 1 * * * /usr/share/astguiclient/AST_reset_mysql_vars.pl
### optimize the database tables within the asterisk database
3 1 * * * /usr/share/astguiclient/AST_DB_optimize.pl
## adjust time on the server with ntp
30 * * * * /usr/local/bin/ntpdate -u pool.ntp.org 2>/dev/null 1>&2
### VICIDIAL agent time log weekly summary report generation
2 0 * * 0 /usr/share/astguiclient/AST_agent_week.pl
### remove old recordings more than 7 days old
#24 0 * * * /usr/bin/find /var/spool/asterisk/monitorDONE -maxdepth 2 -type f -mtime +7 -print | xargs rm -f
### roll logs monthly on high-volume dialing systems
#30 1 1 * * /usr/share/astguiclient/ADMIN_archive_log_tables.pl
### roll call_log and vicidial_log_extended daily on very high-volume dialing systems
#20 1 * * * /usr/share/astguiclient/ADMIN_archive_log_tables.pl --daily
### remove old vicidial logs and asterisk logs more than 2 days old
28 0 * * * /usr/bin/find /var/log/astguiclient -maxdepth 1 -type f -mtime +2 -print | xargs rm -f
29 0 * * * /usr/bin/find /var/log/asterisk -maxdepth 3 -type f -mtime +2 -print | xargs rm -f
30 0 * * * /usr/bin/find / -maxdepth 1 -name "screenlog.0*" -mtime +4 -print | xargs rm -f
### remove text to speech file more than 4 days old
#20 0 * * * /usr/bin/find /var/lib/asterisk/sounds/tts/ -maxdepth 2 -type f -mtime +4 -print | xargs rm -f
- once your system starts up you can attach to the screen running asterisk by
typing "screen -r <screen>" find which screen by typing "screen -r" and
looking for the lowest screen number. Then to detach again from the screen
while you are in it type 'Ctrl+a' then 'd'
- you are done
PHASE 7: ADDING TEST LEADS TO VICIDIAL AND CONFIGURING A TEST CAMPAIGN AND USERS
First we will add a few test leads to the vicidial_list table so that we can
test our system. There is also an application included with the distribution
that will accept a delimited file of leads placed in the /usr/share/astguiclient/VICIDIAL/LEADS_IN/
directory and load it into the database automatically(VICIDIAL_IN_new_leads_file.pl
[a sample lead file in the proper format is included with this release:
- test_VICIDIAL_lead_file.txt])
If you want to use the lead import script I suggest looking at the code to make
sure it is entering what you want it to. We are not going to go over that
particular script in this document.
Also, there is a web-based lead loader available and is accessible from the
VICIDIAL admin.php web page(click on the "LOAD NEW LEADS" link in the LIST
section at the top of the admin page). To get to this page you must have
permissions in the vicidial_user table(Load Leads set to 1). Instructions on
it's use are included on the page through the help question mark link.
NOTE: in PHP you must have "fileuploads" enabled for this page to work.
NOTE: it is important to have your proper country code in the phone_code field
of your leads so that the GMT offset encodding will properly code the time
zones for your leads. For the USA/Canada/Caribbean this would be 1. For the
UK this is 44 and Mexico is 52 and so on.
Now that the sample leads have been entered, we can go into the VICIDIAL
administration website and set up our campaigns, lists and users.
But first let's make sure that they have the right GMT offset:
run this on the command line:
- /usr/share/astguiclient/ADMIN_adjust_GMTnow_on_leads.pl --postal-code-gmt
3. Enter the astguiclient administration page:
http://10.10.10.15/vicidial/admin.php
(use the username and password created when we entered a record into the
vicidial_users table in SUBPHASE 6.3, In our case this is 6666 and 1234)
NOTE: if you click on the Logout button you must leave the user/pass empty and click OK
- Now that you are logged into the vicidial administration system we can add
new user entries for each of the new users and enter new campaigns and new
lists.
- The first step is to enter your new users, Click on the ADD A NEW USER
and fill in the appropriate information for each now user you want to
add.
- Next, you need to create a new campaign, click on the ADD A NEW
CAMPAIGN link and fill in what you want the campaign to be called as
well as a description
- Next, you need to define a new list, click on the ADD A NEW LIST link
and fill in what you want the list to be called as well as a using the
list ID of the leads that we loaded in the previous step "101" and
select the new campaign from the pull-down menu that we just created.
- Now that you have created your list, make it active by changing active to Y
- now modify your campaign ang change the first status to be called to
NEW and submit. Now your system is ready to dial.
- you are done
PHASE 8: astGUIclient and VICIDIAL WEB CLIENTS
The browser requirements for the web-client interfaces are:
- Firefox 1.0 or greater *** RECOMMENDED***
- Mozilla 1.7 or greater
- Netscape 8 or greater
- Opera 8.5 or greater
- Microsoft Internet Explorer 6.0 or greater
To log into this app you will need a login setup in the vicidial_users table
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 MAIN screen with your login
information at the top.
The example web page you would go to on this installation would be:
http://10.10.10.15/agc/astguiclient.php
http://10.10.10.15/agc/vicidial.php
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_www directries and can be copied into your webroot directory.
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 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.
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.
PHASE 9: VICIDIAL REMOTE AGENTS
With v1.0 of VICIDIAL we have the ability to use a simple web form to give
remote agents a way to receive calls to whatever number they happen to be at,
and they can view/edit call details and see a call log all through a web page
(vdremote.php) or http://10.10.10.15/vicidial/vdremote.php on this installation.
Remote Agents is only recommended for inbound calls because of the extra time
needed to dial a number out to transfer the call to. To set up remote agents,
just go to the vicidial admin.php page and ADD NEW REMOTE AGENTS(Make sure the
userID start also has a user login so they can get to the vdremote page). You
will see that you can set up a remote agent entry to take multiple lines if you
wish meaning that, for example, if you need to send all of your calls to another
location because of a massive snowstorm(and none of your agents showed up at work)
you just log in that remote agent record with say 10 lines and then all of those
calls will be directed to the same number you set up for the remote agent. Then
again you could just get your agents to log in from home if they have a phone
and computer
PHASE 10: You are done with installation
If you have problems and it is not working right(and are NOT celebrating right
now), feel free to take a look at the FAQ for solutions to common installation
errors, read the SCRATCH_INSTALL document, visit the VICIDIAL forum or send an
email to the mailing list:
http://www.eflo.net/VICIDIALforum/index.php
https://lists.sourceforge.net/lists/listinfo/astguiclient-users
Also, check out our weblog: http://astguiclient.blogspot.com/
**** IMPORTANT - In order for vicidial/astguiclient to function correctly please
read the REQUIREMENTS.txt for a minimum requirements list. ***
End-user Manuals for Agents and Managers are available from http://www.eflo.net
PHASE 11: Security Hardening:
You may want to reduce the exposure of some of the elements of VICIDIAL. Here are some examples:
ln -s /dev/null /usr/local/apache2/htdocs/vicidial/project_auth_entries.txt
ln -s /dev/null /usr/local/apache2/htdocs/agc/vicidial_auth_entries.txt
ln -s /dev/null /usr/local/apache2/htdocs/agc/astguiclient_auth_entries.txt
- Change the WWW writable in the admin.php system settings to "0"
- Change the default admin user "6666" or it's password from the default
- Change the Default secret(password) for the default SIP and IAX accounts that are set up (admin.php -> Admin, Phones and Servers as "Conf File Secret")
- Change the default password for the Asterisk manager connection in manager.conf then change it in the Server modification screen
- Change the default password for the mysql cron user in mysql and change it to match in /etc/astguiclient.conf on each server
- Possibly use static IP addresses for the IAX/SIP conf account entries
- Change the default port for Apache in httpd.conf from 80 to something else
- Change the default port for IAX in iax.conf from 4569 to something else
- Change the default control port for SIP in sip.conf from 5060 to something else
- Use a firewall to route access using different port numbers or restricting connection by VPN or set IP addresses
@@ -0,0 +1,98 @@
CALLBACK proces flow 2006-01-05
***** FULL CALLBACKS FUNCTIONALITY WAS ADDED IN THE 1.1.11 RELEASE *****
This will outline the process I have thought through in my head for a call-back
process in VICIDIAL. I have received suggestions for methodologies of how many
people think that call-backs should work and I think I've finally come to a
conclusion of how I may build it into VICIDIAL that incorporates most of these
suggestions.
The Agent Side:
When an Agent dispositions a call as CALLBK, a popup frame will appear that will
allow selecting a date from a calendar window(with option to go forward by month
up to 1 year) and a pull-down list that will show hours(in 30 minute increments
defaulting to current half hour). After the agent selects a day and time, they
must check a box to denote that only they should be able to get this Callback.
If the box is unchecked, anyone will be able to call this lead after it's
callback_time elapses. The lead will be entered as vicidial_list.status CBHOLD
in the system and will not be able to be dialed or selected as a dial status in
the admin screen.
If the agent checks the box that they will be the only one that can callback the
lead and it is time to call that lead again(vicidial.php will check at login and
every 30 minutes to see if there are any agent-specific leads that need to be
called back by that agent) then when the agent is paused they will be able to
click on the "CALLBACK" button on the bottom of the screen and select which lead
that they want to callback. The call will proceed as a normal call and will be
dispositioned as normal. The callback button will probably be able to flash or
gently strobe like the astguiclient.php voicemail button does when callbacks are
available to be called for that logged-in agent.
If the agent does not check that they are the only ones to be able to call that
specific lead back, then it will be updated by the AST_VDhopper.pl script once
it's callback date/time has been reached the status will be changed to CALLBK
and will be available for calling if that status is selected in the dial
statuses for the campaign and if the list is active.
If the managr has given the agent permission to set USERONLY callbacks, then
the agent will be able to call those customers back by clicking on the CALLBACK
count link below the comments field of vicidial.php once they are logged in.
From here they can see the listing of their callbacks and their settings, and
can call the customer back by clicking on the callback record.
The Admin Side:
In the admin.php web page will be a callback viewer. Admin users will be able to
search and sort by campaign, list, user, status and time-range to see summary
lists of the Callbacks in the vicidial_callbacks table. Callbacks will be
alterable through the modify lead screen.
The Server Side:
The vicidial_callbacks table will look like this:
CREATE TABLE vicidial_callbacks (
callback_id INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
lead_id INT(9) UNSIGNED,
list_id INT(8) UNSIGNED,
campaign_id VARCHAR(8),
status VARCHAR(10),
entry_time DATETIME,
callback_time DATETIME,
modify_date TIMESTAMP,
user VARCHAR(20),
recipient ENUM('USERONLY','ANYONE'),
comments VARCHAR(255),
index (lead_id),
index (status),
index (callback_time)
);
The status field will probably have the following possible values: ACTIVE, LIVE,
ARCHIVE and all old callback entries will be kept for archival purposes,
anthough not viewable by the agent.
The AST_VDhopper.pl script will do a select every minute(before it does it's
hopper filling run) for callbacks that need to be placed back in CALLBK status.
Something like this query:
SELECT lead_id from vicidial_callbacks where callback_time < '2006-01-06
10:02:03' and status='ACTIVE';
AST_VDhopper.pl will then:
- set these leads to vicidial_list.status of CALLBK
- set the called_since_last_reset to N
- insert the lead into the vicidial_hopper under the campaign it was originally
set if it is an ANYONE callback
- change the vicidial_callbacks.status to LIVE.
At the time of a hangup of a callback call, the vicidial.php script will set the
vicidial_callbacks.status to ARCHIVE. The leads that designate the recipient as
USERONLY will not be altered in any way by AST_VDhopper.pl.
@@ -0,0 +1,91 @@
Call Card featureset 2010-03-11
*** THIS SECTION OUTLINES THE NEW CALLCARD FEATURES in the 2.4 version ***
As of the 2.4 version we have added an optional callcard system to allow calls from customers to agents with timers and balances associated with card pin numbers. This is a highly customized system so it will take some work to get it running, it is not designed to work out of the box, but the framework is in place.
# Calling Cards feature is used for ID numbers to be used for agent talk time. There are several applications for this including: paid support queues, chat lines, advisor services, financial advice, legal services. The system consists of an AGI script that takes calls in, asks for and validates the pin/status/balance and sends them to a defined in-group, then the deduction of time from the customer's account starts once the agent receives the call. Also, there will be an option for an alert to low balance injected into the calling session.
AGI Script involved in call card feature:
- agi-CALLCARD_dial_in.agi
Web scripts involved:
- callcard_admin.php
- callcard_export_report.php
For the calls to be properly logged, use these settings(or add to existing URLs) in the in-group that is handling these calls:
- Start Call URL: "&minuteswarning=1&callcard=1" or "&minuteswarning=1&callcard=1&nextstep=HANGUP&destination=8300&nextmessage=timeout_hangup&"
- Dispo URL: "&callcard=--A--talk_time_min--B--"
Changes to database:
*** DO NOT MAKE THESE CHANGES, for documentation only ***
CREATE TABLE callcard_accounts (
card_id VARCHAR(20) PRIMARY KEY NOT NULL,
pin VARCHAR(10) NOT NULL,
status ENUM('GENERATE','PRINT','SHIP','HOLD','ACTIVE','USED','EMPTY','CANCEL','VOID') default 'GENERATE',
balance_minutes SMALLINT(5) default '3',
inbound_group_id VARCHAR(20) default '',
index (pin)
);
CREATE TABLE callcard_accounts_details (
card_id VARCHAR(20) PRIMARY KEY NOT NULL,
run VARCHAR(4) default '',
batch VARCHAR(5) default '',
pack VARCHAR(5) default '',
sequence VARCHAR(5) default '',
status ENUM('GENERATE','PRINT','SHIP','HOLD','ACTIVE','USED','EMPTY','CANCEL','VOID') default 'GENERATE',
balance_minutes SMALLINT(5) default '3',
initial_value VARCHAR(6) default '0.00',
initial_minutes SMALLINT(5) default '3',
note_purchase_order VARCHAR(20) default '',
note_printer VARCHAR(20) default '',
note_did VARCHAR(18) default '',
inbound_group_id VARCHAR(20) default '',
note_language VARCHAR(10) default 'English',
note_name VARCHAR(20) default '',
note_comments VARCHAR(255) default '',
create_user VARCHAR(20) default '',
activate_user VARCHAR(20) default '',
used_user VARCHAR(20) default '',
void_user VARCHAR(20) default '',
create_time DATETIME,
activate_time DATETIME,
used_time DATETIME,
void_time DATETIME
);
CREATE TABLE callcard_log (
uniqueid VARCHAR(20) PRIMARY KEY NOT NULL,
card_id VARCHAR(20),
balance_minutes_start SMALLINT(5) default '3',
call_time DATETIME,
agent_time DATETIME,
dispo_time DATETIME,
agent VARCHAR(20) default '',
agent_dispo VARCHAR(6) default '',
agent_talk_sec MEDIUMINT(8) default '0',
agent_talk_min MEDIUMINT(8) default '0',
phone_number VARCHAR(18),
inbound_did VARCHAR(18),
index (card_id),
index (call_time)
);
ALTER TABLE system_settings ADD callcard_enabled ENUM('1','0') default '0';
ALTER TABLE vicidial_users ADD callcard_admin ENUM('1','0') default '0';
@@ -0,0 +1,87 @@
Call URL features(start call url, dispo call url, etc...)
Details on the Call URL and webform-type fields and dynamic URL construction:
Web Form - This is where you can set the custom web page that will be
opened when the user clicks on the WEB FORM button. To customize the
query string after the web form, simply begin the web form with VAR
and then the URL that you want to use, replacing the variables with
the variable names that you want to use --A--phone_number--B-- just
like in the SCRIPTS tab section. If you want to use custom fields in a web form
address, you need to add &CF_uses_custom_fields=Y as part of your URL.
Start Call URL - This web URL address is not seen by the agent, but
it is called every time a call is sent to an agent if it is populated.
Uses the same variables as the web form fields and scripts. This URL
can NOT be a relative path. The Start URL does not work for Manual
dial calls. Default is blank.
Dispo Call URL - This web URL address is not seen by the agent, but it
is called every time a call is dispositioned by an agent if it is
populated. Uses the same variables as the web form fields and scripts.
dispo and talk_time are the variables you can use to retrieve the
agent-defined disposition for the call and the actual talk time in
seconds of the call. This URL can NOT be a relative path. Default is
blank.
Add Lead URL - This web URL address is not seen by the agent, but it is called
every time a lead is added to the system through the inbound process. Default
is blank. You must begin this URL with VAR if you want to use variables, and of
course --A-- and --B-- around the actual variable in the URL where you want to
use it. Here is the list of variables that are available for this function:
lead_id, vendor_lead_code, list_id, phone_number, phone_code, did_id,
did_extension, did_pattern, did_description, uniqueid, call_id. This feature is
only available for In-Groups.
No Agent Call URL - This is similar to Dispo Call URL, but it is for calls
that are not sent to agents such as DROPs, No Answers, Busys and timeouts. This
option is available for Campaigns and In-Groups. This feature will only work for
auto-dial and inbound calls, not manual dial calls. For inbound calls, the
specific in-group that a call was sent to needs to have the No Agent Call URL
field filled in or this function will not run for that call.
CRM Popup Login - If set to Y, the CRM Popup Address is used to open a new
window on agent login to this campaign. Default is N.
CRM Popup Address - The web address of a CRM login page, it can have variables
populated just like the web form address, with the VAR in the front and using
--A--user_custom_one--B-- to define variables.
You can have lead information be auto-populated in the URL
options(webform, webform2, start_call_url, dispo_call_url, crm_popup_url) using
"--A--field--B--" where field is one of the following fieldnames:
(not all of these are available for all features)
vendor_lead_code, source_id, list_id, gmt_offset_now,
called_since_last_reset, phone_code, phone_number, title, first_name,
middle_initial, last_name, address1, address2, address3, city, state,
province, postal_code, country_code, gender, date_of_birth, alt_phone,
email, security_phrase, comments, lead_id, campaign, phone_login,
group, channel_group, SQLdate, epoch, uniqueid, customer_zap_channel,
server_ip, SIPexten, session_id, dialed_number, dialed_label, rank,
owner, camp_script, in_script, script_width, script_height,
recording_filename, recording_id, user_custom_one, user_custom_two,
user_custom_three, user_custom_four, user_custom_five,
preset_number_a, preset_number_b, preset_number_c, preset_number_d,
preset_number_e, preset_number_f, preset_dtmf_a, preset_dtmf_b,
did_id, did_extension, did_pattern, did_description, closecallid,
xfercallid, agent_log_id, entry_list_id, call_id.
For examples(and sample result URL):
VARhttps://astguiclient.sf.net/test_VICIDIAL_output.php?test=--A--vendor_lead_code--B--&appt_date=--A--appointment_date--B--&color=--A--favorite_color--B--&city=--A--nearest_city--B--&cities=--A--multi_city--B--&topics=--A--topics--B--
(https://astguiclient.sf.net/test_VICIDIAL_output.php?test=92837492837&appt_date=2010-10-31&color=green&city=ALBUQUERQUE&cities=CHICAGO,TAMPA&topics=price,quality)
VARhttp://192.168.192.3/agc/vdc_call_url_test.php?leadID=--A--lead_id--B--&listID=--A--entry_list_id--B--&dispo=--A--dispo--B--&talk_time=--A--talk_time--B--
(http://192.168.192.3/agc/vdc_call_url_test.php?leadID=321452&listID=101&dispo=NI&talk_time=214)
VARhttp://www.server.org/env.php?one=--A--user_custom_one--B--&two=--A--user_custom_two--B--
(http://www.server.org/env.php?one=asmith&two=hS87yt2)
@@ -0,0 +1,102 @@
CROSS-CLUSTER COMMUNICATION 2011-05-27
!!!!! THIS FEATURE DOES NOT EXIST, THIS IS FOR PLANNING PURPOSES ONLY !!!!!
This is a planning document for how different vicidial clusters can communicate
with each other to send various types of information between them. The overall
goal is to allow for many clusters to talk to each other.
Some of the types of communication that we would like to achieve are:
- Setup of crossover trunks(SIP/IAX) allowing for 1-way or 2-way calling
- Allowing lookup of lead information while transferring between clusters
- Allow transmission of number of calls in queue, agents available and other stats
- Allow routing of calls to another cluster based upon total daily call percentage, drop rate, number of waiting calls or number of waiting agents
--------------------------------
DATABASE AND ADMIN CHANGES:
--------------------------------
A new options in System Settings will be added:
- cross_cluster_enabled - Y/N
- local_cluster_id - the id that is used for this cluster by other clusters
This will require a new Admin subsection for cluster configuration:
- cluster_id
- cluster_name
- active - Y/N
- cluster_primary_server
- cluster_trunk_protocall - SIP/IAX
- cluster_agent_api_url
- cluster_nonagent_api_url
- cluster_api_user
- cluster_api_pass
- cluster_api_permissions - lead_lookup, user_lookup, ingroup_lookup, etc...
- cluster_user_group - used to define the campaigns/ingroups cluster is allowed to get info on
- <readonly auto-updated> cluster_dst, cluster_tz, cluster_local_gmt_now
There will be new options added to Servers:
- local_gmt_now - current calculated gmt offset
- cluster_id - default will be LOCAL cluster
- cluster_call_direction - IN_FROM_CLUSTER, OUT_TO_CLUSTER, BOTH, NONE
- cluster_server_ip - SERVER_IP, ALT_IP, EXTERNAL_IP
There will be a new table added to link lead_ids on clusters:
-vicidial_list_cluster_link
- lead_id
- cluster_id
- cluster_lead_id
- call_date
- caller_code
New table to keep track of the active in-groups and campaigns on other clusters
- group_id
- name
- type - INGROUP, CAMPAIGN
- cluster_id
Some tables will have a "cluster_id" field added to them to show where the call came from
- vicidial_auto_calls
- vicidial_campaign_stats
--------------------------------
NON-AGENT API CHANGES:
--------------------------------
lead_id_lookup:
- REQUIRES: cluster_id, caller_code
- RETURNS: all lead and call information
lead_notes_lookup:
- REQUIRES: cluster_id, lead_id
- RETURNS: call history for lead_id including per-call notes
ingroup_status:
- REQUIRES: cluster_id, group_id
- RETURNS: status, after hours, number of agents waiting/incall/paused/total, number of calls waiting, calls today, drops today, drop %
campaign_status:
- REQUIRES: cluster_id, campaign_id
- RETURNS: status, number of agents waiting/incall/paused/total, number of calls waiting, calls today, drops today, dialable leads, drop %
ingroup_campaign_list:
- REQUIRES: cluster_id
- RETURNS: ID and name of all active campaigns and in-groups on the cluster
cluster_server_status:
- REQUIRES: cluster_id
- RETURNS: listing of defined servers, their current times as well as PHP and DB times
--------------------------------
CALL FLOW AND TRUNK CHANGES:
--------------------------------
- IAX/SIP crossover trunks would be added between every server on every active cluster(depending on direction settings)
- dialplan context would be added for each foreign cluster to route calls with proper cluster_id flag allowing for lookups of lead information
@@ -0,0 +1,111 @@
Custom Fields within the vicidial agent interface Started: 2010-05-06
This document outlines the features and design of the customized fields available in ViciDial.
Started from this thread:
http://www.vicidial.org/VICIDIALforum/viewtopic.php?t=3952&sid=6453071bd2c1859d9bae44add9dae2ff
Goal:
To have a highly scalable, dynamic custom field creation system for use with ViciDial that would be tied to the list_id and could have up to 255 dynamically-defined fields.
Development Stages:
1. Create admin interface to manage dynamic fields per list_id
2. Create display of custom fields within the ViciDial agent interface, including variables to be used in web forms and scripts
3. Add exporting of custom tables to list download feature as well as the calls export report
4. Create list loading interface to put leads into the vicidial_list table and the custom fields, includes reusable template definitions(field mapping pending)
Limitations:
- You could not dial leads sorted by any custom fields
- Only one set of custom fields per list_id
The new lead loader:
The existing web-based PHP lead loader will be completely removed. In it's place will be a web front-end to upload lead files and trigger lead loading processes that will be run by the current CLI lead loader since it is more full-featured and much easier to maintain. There will be a template(field mapping) creation and modification tool that will allow you to map a field in a file to a specific database table and field.
Database backend:
The database elements of this featureset will consist of a definitions table(vicidial_lists_fields) that will define the custom fields for each vicidial list ID, a custom table that is created dynamically in the system using "custom_" + list_id (i.e.: custom_101) that will be created from the table definitions table.
There will also be a field mapping table that you can use as a template to match up file fields with database fields when importing data into ViciDial.
New settings will be added in the astguiclient.conf file for DB_custom_user and DB_custom_pass. These will be used to create and alter the custom_XXX tables.
Admin changes:
Added admin_lists_custom.php for these features to be administered. This will allow the viewing of custom fields as well as the copying of custom field definitions to lists with no custom fields.
MySQL tables:
####### FOR REFERENCE ONLY, DO NOT USE THESE!!!!!!!!!!!!! ########
GRANT ALTER,CREATE on asterisk.* TO custom@'%' IDENTIFIED BY 'custom1234';
GRANT ALTER,CREATE on asterisk.* TO custom@localhost IDENTIFIED BY 'custom1234';
ALTER TABLE system_settings ADD custom_fields_enabled ENUM('0','1') default '0';
ALTER TABLE vicidial_users ADD custom_fields_modify ENUM('0','1') default '0';
CREATE TABLE vicidial_lists_fields (
field_id INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
list_id BIGINT(14) UNSIGNED NOT NULL DEFAULT '0',
field_label VARCHAR(50),
field_name VARCHAR(1000),
field_description VARCHAR(100),
field_rank SMALLINT(5),
field_help VARCHAR(1000),
field_type ENUM('TEXT','AREA','SELECT','MULTI','RADIO','CHECKBOX','DATE','TIME') default 'TEXT',
field_options VARCHAR(5000),
field_size SMALLINT(5),
field_max SMALLINT(5),
field_default VARCHAR(255),
field_cost SMALLINT(5),
field_required ENUM('Y','N') default 'N',
name_position ENUM('LEFT','TOP') default 'LEFT',
multi_position ENUM('HORIZONTAL','VERTICAL') default 'HORIZONTAL',
field_order SMALLINT(5) default '1'
);
CREATE UNIQUE INDEX listfield on vicidial_lists_fields (list_id, field_label);
CREATE TABLE vicidial_lead_import_map (
map_id VARCHAR(50) PRIMARY KEY NOT NULL,
map_name VARCHAR(50) DEFAULT '',
map_notes VARCHAR(255) DEFAULT ''
);
CREATE TABLE vicidial_lead_import_map_fields (
map_id VARCHAR(50) NOT NULL,
file_field SMALLINT(5),
db_field VARCHAR(100),
field_functions VARCHAR(255) DEFAULT '',
field_notes VARCHAR(100) DEFAULT '',
index (map_id)
);
CREATE UNIQUE INDEX mapdbfield on vicidial_lead_import_map_fields (map_id, file_field, db_field);
@@ -0,0 +1,31 @@
Microsoft Internet Explorer Incompatibilities with VICIDIAL Agent Interface 2007-06-13
*** AS OF RELEASE 2.0.4 VICIDIAL IS COMPATIBLE WITH IE 6.0 ***
There are quite a few issues with using Microsoft Internet Explorer(IE) with VICIDIAL because of incompatibilites with the W3C standards as well as stability and architectural issues.
The decision was made to stop testing on IE because of time constraints as well as the lack of cross-compatibility of IE and lack of compatibility with standards, even between IE versions. Firefox meets all compatibility requirements which is why that is the recommended platform for VICIDIAL agents.
As of release 2.0.4 of astguiclient, IE 5.0 and 5.5 compatibility was broken to make VICIDIAL fully compatible with IE 6.0. Along with this change, all of the memory issues were fixed, along with several features that were not working before in IE like HotKeys.
Some of the issues include the following:
- Because ActiveX is used for AJAX with IE(and no other browser) it is difficult to debug the issue with faulty garabage collection where IE, or rather ActiveX, will not delete any of the XMLHTTPRequest events that it grabs resulting in the eventual crashing of IE after it hits its memory limit. I have heard that with IE7 and newer ActiveX there is a potential way around this through using some different Javascript commands.
- Using a span with NOSCROLL and a form element inside of it are sometimes ignored by IE, not sure why, but using spans with form elements may need to be changed to accomodate IE in the future.
Changed:
.cust_form {font-family: sans-serif; font-size: 10px; overflow:}
To:
.cust_form {font-family: sans-serif; font-size: 10px}
- For some reason form elements inside of a hidden span cannot be given focus or blur(Causing Hotkeys not to work):
Commented out the following lines:
document.vicidial_form.inert_button.focus();
document.vicidial_form.inert_button.blur();
- There are issues with Hotkeys key-binding working with some versions of IE dues to the Javascript used to achieve the function.
- Sometimes document elements will error out as undefined even though Firefox ses them just fine, for example:
Commented out the folowing lines(3 locations):
if ( (dialed_label.length < 3) || (dialed_label=='NONE') ) {dialed_label='MAIN';}
Changed to:
if (dialed_label=='NONE') {dialed_label='MAIN';}
Making these changes allows IE to work with 2.0.3 but does not allow for color status bar changes on inbound calls.
@@ -0,0 +1,113 @@
INBOUND/CLOSER process flow 2007-05-02
** THIS FULLY REDONE INBOUND-CLOSER PROSESS IS PLANNED FOR THE 2.0.4 RELEASE **
This will outline the process I have thought through in my head for rewriting the inbound and closer call queueing and handling processes within VICIDIAL. The objective is to add the following features to make VICIDIAL a more well-rounded product:
- consolidate the 13 VDAD inbound and closer scripts into one script with CLI options
- custom hold music per in-group
- put call_times into effect for in-groups allowing calls coming in after hours to be directed to another extension or voicemail box
- allow any campaign to take inbound calls, removing the restriction on campaign_id name for that purpose
***** Here are some planned features that will have to wait for the next release:
- add concurrent-transfers options to inbound groups
- announce estimated time on hold
- announce place in line
- option for customer to leave the queue and leave a message while still keeping their place in line
- allow agent to search for customer lead in system after they have been connected
- for closer transfers, allow fronter to send calls to any in-group by a pull-down list
The Agent Side:
The vicidial.php script will need to be modified to allow for a record to load and show that a customer has called and possibly display their callerID and play a message that they may have left. The agent would then have the option to place a manual dial call to reach the customer.
Another important change that needs to be made to the vicidial.php agent interface is to allow searching for a customer's record and changing the lead_id that is associated with the call while the call is going on. This could prove problematic, but will end up being a much better solution than locking the agent into a record when the call comes in. This may also result in records having to be associated with other records, which might mean either another table or possibly adding another field to the vicidial_list table.
For the changes in the Fronter/Closer transfers, new User Group permissions will need to be added to be able to restrict the in-groups that agents are allowed to transfer calls to. When Closer transfers are enabled in a campaign the agent interface will select these in-groups and can transfer calls to any of those groups. Also, a complete reworking of how the Transfer Conference box is laid out will be done.
The Admin Side:
More settings will be needed for the In-Groups section to be able to accomodate these changes:
ALTER TABLE vicidial_inbound_groups ADD moh_extension VARCHAR(20);
ALTER TABLE vicidial_inbound_groups ADD prompt_interval SMALLINT(5) UNSIGNED default '60';
ALTER TABLE vicidial_inbound_groups ADD announce_place_in_line ENUM('Y','N') default 'N';
ALTER TABLE vicidial_inbound_groups ADD announce_estimate_hold_time ENUM('Y','N') default 'N';
ALTER TABLE vicidial_inbound_groups ADD allow_leave_queue_place ENUM('Y','N') default 'N';
ALTER TABLE vicidial_inbound_groups ADD allow_leave_queue_message ENUM('Y','N') default 'N';
ALTER TABLE vicidial_inbound_groups ADD callback_number_validation ENUM('6','7','8','9','10','11','12','13','14','NORTH_AMERICA','UK');
ALTER TABLE vicidial_inbound_groups ADD call_time VARCHAR(20);
ALTER TABLE vicidial_inbound_groups ADD after_hours ENUM('HANGUP','VOICEMAIL','EXTENSION') default 'EXTENSION';
ALTER TABLE vicidial_inbound_groups ADD after_hours_exten VARCHAR(20);
In the servers table a field will also be added:
ALTER TABLE servers ADD hold_queue_prompt_exten VARCHAR(20) default '8359';
In the vicidial_auto_calls table a field will also be added:
ALTER TABLE vicidial_auto_calls ADD last_prompt_time DATETIME;
ALTER TABLE vicidial_auto_calls ADD random_id INT(9) UNSIGNED;
ALTER TABLE vicidial_auto_calls ADD recording_id INT(10) UNSIGNED;
For the fronter/closer transfers some fields will need to be added to the vicidial_user groups table:
ALTER TABLE vicidial_user_groups ADD allowable_xfer_inbound_groups TEXT
ALTER TABLE vicidial_user_groups ADD default_xfer_inbound_group VARCHAR(20)
The Server Side:
For inbound and closer transfers, the agi_VDAD... scripts will still run as they normally do now, but after 5 seconds, without a transfer to an agent, the customer will be put into the new call-queue manager which will consist of a constantly running perl script(we will call it "AST_VD_hold_queue.pl") that will keep track of the call while it is still active and before it gets sent to an agent, and an AGI script(we will call this one agi-VD_queue_prompts.agi) that will perform the dynamic functions of speaking the customer's place in line, estimated hold time and offer the option to press a DTMF digit and either leave a message for the agent to take the call or leave a callback number to be called back when their turn arrives. This script will also have to somehow keep the vicidial_auto_calls records active even after a customer has hung up in order to preserve place-in-line and allow for playing of a customer message or callback to a customer.
*** This section to be removed due to change in architecture it was not implemented ***
Here is a process flow explanation of how a call would move through the hold queue:
- Call comes in to the agi_VDADcloser... script and cannot find an agent to send the call to within 5 seconds
- the agi_VDADcloser script changes the status of the call in vicidial_auto_calls to HOLDP and sends the call to the extension that the agi-VD_queue_prompts.agi script is on(defined in the servers table, default will be 8359)
- the agi-VD_queue_prompts.agi script will query the database for the vicidial_inbound_group settings to see what options it should offer the customer and then that script plays the desired prompts(if selected, leave number and/or leave voice message), then it will wait 15 seconds for a digit press and if there is no valid digit press then it will continue on(steps for if there is a digit press are at the end of this process flow)
- Then the agi script checks for a "conferences" table entry that matches that moh_extension(for a moh_extension of 1234 this would be reserved under HOLDQ1234 in the conferences table)
- If the conference is reserved then the customer call is immediately transferred there, if it does not exist, the agi script will reserve a new conferences record and post an Originate record to the vicidial_manager table so that the hold music/message will start playing in that meetme conference
- The vicidial_auto_calls record is changed to HOLDQ and the customer call is then sent to that meetme room in listen-only mode so that multiple customers can be sent to the same meetme room.(This adds the extra option of allowing a manager to dial into that conference and speak a message to all of the people waiting in the queue)
- The AST_VD_hold_queue.pl script then checks to see if there are any available agents as well as updates the time on the vicidial_auto_calls record every second to keep it alive, as well as checking to see whether the call is due to be sent back to the prompt agi by how old the call's last_prompt_time field is set to(even if a call is in HOLDP and is in the prompt agi process, it will still keep it's place in line and it will immediately be transferred if an agent becomes available)
- If the last_prompt_time is older than prompt_interval seconds, then the vicidial_auto_calls status is set back to HOLDP and the call is sent back to the agi-VD_queue_prompts.agi script for another loop
- If there is an available agent, then the vicidial_live_agents record is updated and the call is immediately sent to the agent's meetme room
- If the customer is in the agi-prompt script and they choose to leave a message and/or leave a callback phone number, the script will add the callback number to the alt_phone field(if it does not match callerIDnumber that the call came in under), and the voice message will be logged in the recording_log table along with the server_ip that it was recorded on. The filename for the recording will be something like this "70503124128_CUSTSERV_7275551212-all.wav" which is the datetimecode_inboundgroup_customerphone
- If customer enters in a callback number and vicidial_inbound_groups callback_number_validation field is set to 6-14, NORTH_AMERICA or UK then the number of digits and pattern are validated or cleaned to make sure it is a valid number. The agi prompt script will also read back the phone number they entered to verify it again with the customer and ask for a confirmation of that number with press of a 1 or 2.
- After the customer has left a callback phone number and left a message, their vicidial_auto_calls status is changed to PLACE and their call is hung-up
- When a PLACE call that a customer had left a message on is sent to an agent, the agent will see the customer record appear and the audio recording will be automatically played in their session with a button to allow them to play it again. Then the agent screen will go into manual-dial-alt-dial mode allowing the agent to place a call back to the customer.
This functionality will require three new statuses in the vicidial_auto_calls table:
HOLDQ - this status will be for the LIVE-status calls that were not sent to an agent in the first five seconds on the system, so they will be handed over to be taken care of by the AST_VD_queue_hold.pl perl script.
HOLDP - this status will be for the HOLDQ calls that are currently in the agi-VD_queue_prompts.agi script.
PLACE - this status is a placeholder for the customer after they choose the option to hang-up and either leave a message or leave their contact number for a callback. They are no longer on an active channel, but their place in line as a customer should be preserved so that the agent that receives their record can proceed with a call to follow-up with the customer.
MORE TO COME...
- optionally make native audio files for Music On Hold:
cd /var/lib/asterisk/mohmp3/
mpg123 -s --rate 44100 --mono /var/lib/asterisk/mohmp3/fpm-sunshine.mp3 > /var/lib/asterisk/mohmp3/fpm-sunshine.raw
sox -r 44100 -w -s -c 1 fpm-sunshine.raw -r 8000 -c 1 fpm-sunshine.wav
sox fpm-sunshine.wav -t gsm -r 8000 -b -c 1 fpm-sunshine.gsm
sox fpm-sunshine.wav -t ul -r 8000 -b -c 1 fpm-sunshine.pcm
mpg123 -s --rate 44100 --mono /var/lib/asterisk/mohmp3/fpm-calm-river.mp3 > /var/lib/asterisk/mohmp3/fpm-calm-river.raw
sox -r 44100 -w -s -c 1 fpm-calm-river.raw -r 8000 -c 1 fpm-calm-river.wav
sox fpm-calm-river.wav -t gsm -r 8000 -b -c 1 fpm-calm-river.gsm
sox fpm-calm-river.wav -t ul -r 8000 -b -c 1 fpm-calm-river.pcm
mpg123 -s --rate 44100 --mono /var/lib/asterisk/mohmp3/fpm-world-mix.mp3 > /var/lib/asterisk/mohmp3/fpm-world-mix.raw
sox -r 44100 -w -s -c 1 fpm-world-mix.raw -r 8000 -c 1 fpm-world-mix.wav
sox fpm-world-mix.wav -t gsm -r 8000 -b -c 1 fpm-world-mix.gsm
sox fpm-world-mix.wav -t ul -r 8000 -b -c 1 fpm-world-mix.pcm
rm -f *.raw
mkdir ../orig-mp3
mv -f *.mp3 ../orig-mp3/
@@ -0,0 +1,69 @@
Inbound VDAC IVR process 2008-05-25
NOTE: the Call Menu feature has been recently added in 2.2.0 that enables you to create and maintain IVRs, such as those mentioned in this document, using only the web-based Administration interface. For more information about Call Menus, take a look at the In-Groups -> Call Menu section of the Administration website or look at the ASTERISK_CONF-GEN.txt document
This doc goes over the addition of the IVR status to the vicidial_auto_calls table and how calls that are not yet in an in-group(queue) can still be counted as active calls. This allows your system to show a tally of inbound calls that are still navigating menus before finding an in-group(queue) to be put into.
The agi-VDAD_inbound_calltime_check.agi script does a check for the calltime scheme of the defined in-group(queue) as well as using the after-hours method for that in-group and the associated after-hours message if defined. Also, this script can place a record in the vicidial_auto_calls status in the IVR status. Calls in this status do not affect the dial ratios of blended campaigns, but they will display in the AST_timeonVDADall.php real-time status pages.
A log of the calls going into this agi-VDAD_inbound_calltime_check.agi script is also inserted into the live_inbound_log table.
The agi-VDAD_inbound_calltime_check.agi script can also be used to log the progression of a call through an IVR if you place it at major points in your IVR dialplan. The third field that you can define allows you to set a note or comment that is placed into the database when the call goes through that step.
Now included in the vicidial web directory is the AST_IVRstats.php report which can show you the statistics on the progression of customers through an Asterisk dialplan-based IVR using tracking with this script.
The example below shows how to do a very simple IVR before sending to a queue asking if the caller wants English, Spanish, French or German language service.
The "test_in_menu" audio file would have something like the following script:
"Hello, thank you for calling ACME Service Inc. For English press one, para el
español, prensa dos, pour le Français, presse trois, für Deutsche Presse vier."
extensions.conf additions:
; First, in the default context you will put a line sending the inbound calls
; for this number into a context named the same as the first in-group(queue),
; in this case "TEST_IN". There are also 3 other in-groups(queues) for the
; non-English in-groups(queues):
; TEST_IN - English - option 1
; TEST_IN_ES - Spanish - option 2
; TEST_IN_FR - French - option 3
; TEST_IN_DE - German - option 4
[default]
exten => 7275551111,1,Goto(TEST_IN,s,1)
[TEST_IN]
exten => s,1,AGI(agi-VDAD_inbound_calltime_check.agi,TEST_IN-----YES-----START)
exten => s,2,Background(test_in_menu)
exten => s,n,WaitExten(10)
exten => s,n,Background(test_in_menu)
exten => s,n,WaitExten(10)
exten => s,n,Playback(vm-goodbye)
exten => s,n,hangup
exten => 1,1,AGI(agi-VDAD_ALL_inbound.agi,CIDLOOKUP-----LB-----TEST_IN-----7275551111-----Closer-----park----------999-----1-----OUTB)
exten => 1,n,Hangup
exten => 2,1,AGI(agi-VDAD_ALL_inbound.agi,CIDLOOKUP-----LB-----TEST_IN_ES-----7275551111-----Closer-----park----------999-----1-----OUTB)
exten => 2,n,Hangup
exten => 3,1,AGI(agi-VDAD_ALL_inbound.agi,CIDLOOKUP-----LB-----TEST_IN_FR-----7275551111-----Closer-----park----------999-----1-----OUTB)
exten => 3,n,Hangup
exten => 4,1,AGI(agi-VDAD_ALL_inbound.agi,CIDLOOKUP-----LB-----TEST_IN_DE-----7275551111-----Closer-----park----------999-----1-----OUTB)
exten => 4,n,Hangup
exten => #,1,Goto(s,2)
exten => i,1,Goto(s,2)
exten => t,1,Goto(s,2)
exten => h,1,DeadAGI(agi://127.0.0.1:4577/call_log--HVcauses--PRI-----NODEBUG-----${HANGUPCAUSE}-----${DIALSTATUS}-----${DIALEDTIME}-----${ANSWEREDTIME})
+277
View File
@@ -0,0 +1,277 @@
AFFERO GENERAL PUBLIC LICENSE (AGPLv2)
Version 2, November 2007
Copyright © 2007 Affero Inc.
510 Third Street - Suite 225, San Francisco, CA 94107, USA
This is version 2 of the Affero General Public License. It gives each licensee
permission to distribute the Program or a work based on the Program (as defined
in version 1 of the Affero GPL) under the GNU Affero General Public License,
version 2 or any later version.
This license is a modified version of the GNU General Public License copyright
(C) 1989, 1991 Free Software Foundation, Inc. made with their permission.
Section 2(d) has been added to cover use of software over a computer network.
Everyone is permitted to copy and distribute verbatim copies of this license
document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your freedom to share
and change it. By contrast, the Affero General Public License is intended to
guarantee your freedom to share and change free software--to make sure the
software is free for all its users. This Public License applies to most of
Affero's software and to any other program whose authors commit to using it.
(Some other Affero software is covered by the GNU Library General Public License
instead.) You can apply it to your programs, too.
When we speak of free software, we are referring to freedom, not price. This
General Public License is designed to make sure that you have the freedom to
distribute copies of free software (and charge for this service if you wish),
that you receive source code or can get it if you want it, that you can change
the software or use pieces of it in new free programs; and that you know you can
do these things.
To protect your rights, we need to make restrictions that forbid anyone to deny
you these rights or to ask you to surrender the rights. These restrictions
translate to certain responsibilities for you if you distribute copies of the
software, or if you modify it.
For example, if you distribute copies of such a program, whether gratis or for a
fee, you must give the recipients all the rights that you have. You must make
sure that they, too, receive or can get the source code. And you must show them
these terms so they know their rights.
We protect your rights with two steps: (1) copyright the software, and (2) offer
you this license which gives you legal permission to copy, distribute and/or
modify the software.
Also, for each author's protection and ours, we want to make certain that
everyone understands that there is no warranty for this free software. If the
software is modified by someone else and passed on, we want its recipients to
know that what they have is not the original, so that any problems introduced by
others will not reflect on the original authors' reputations.
Finally, any free program is threatened constantly by software patents. We wish
to avoid the danger that redistributors of a free program will individually
obtain patent licenses, in effect making the program proprietary. To prevent
this, we have made it clear that any patent must be licensed for everyone's free
use or not licensed at all.
The precise terms and conditions for copying, distribution and modification
follow.
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains a notice
placed by the copyright holder saying it may be distributed under the terms of
this Affero General Public License. The "Program", below, refers to any such
program or work, and a "work based on the Program" means either the Program or
any derivative work under copyright law: that is to say, a work containing the
Program or a portion of it, either verbatim or with modifications and/or
translated into another language. (Hereinafter, translation is included without
limitation in the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not covered by
this License; they are outside its scope. The act of running the Program is not
restricted, and the output from the Program is covered only if its contents
constitute a work based on the Program (independent of having been made by
running the Program). Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's source code as
you receive it, in any medium, provided that you conspicuously and appropriately
publish on each copy an appropriate copyright notice and disclaimer of warranty;
keep intact all the notices that refer to this License and to the absence of any
warranty; and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and you may at
your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion of it, thus
forming a work based on the Program, and copy and distribute such modifications
or work under the terms of Section 1 above, provided that you also meet all of
these conditions:
* a) You must cause the modified files to carry prominent notices stating that
you changed the files and the date of any change.
* b) You must cause any work that you distribute or publish, that in whole or in
part contains or is derived from the Program or any part thereof, to be licensed
as a whole at no charge to all third parties under the terms of this License.
* c) If the modified program normally reads commands interactively when run, you
must cause it, when started running for such interactive use in the most
ordinary way, to print or display an announcement including an appropriate
copyright notice and a notice that there is no warranty (or else, saying that
you provide a warranty) and that users may redistribute the program under these
conditions, and telling the user how to view a copy of this License. (Exception:
if the Program itself is interactive but does not normally print such an
announcement, your work based on the Program is not required to print an
announcement.)
* d) If the Program as you received it is intended to interact with users
through a computer network and if, in the version you received, any user
interacting with the Program was given the opportunity to request transmission
to that user of the Program's complete source code, you must not remove that
facility from your modified version of the Program or work based on the Program,
and must offer an equivalent opportunity for all users interacting with your
Program through a computer network to request immediate transmission by HTTP of
the complete source code of your modified version or other derivative work.
These requirements apply to the modified work as a whole. If identifiable
sections of that work are not derived from the Program, and can be reasonably
considered independent and separate works in themselves, then this License, and
its terms, do not apply to those sections when you distribute them as separate
works. But when you distribute the same sections as part of a whole which is a
work based on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the entire whole,
and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest your
rights to work written entirely by you; rather, the intent is to exercise the
right to control the distribution of derivative or collective works based on the
Program.
In addition, mere aggregation of another work not based on the Program with the
Program (or with a work based on the Program) on a volume of a storage or
distribution medium does not bring the other work under the scope of this
License.
3. You may copy and distribute the Program (or a work based on it, under Section
2) in object code or executable form under the terms of Sections 1 and 2 above
provided that you also do one of the following:
* a) Accompany it with the complete corresponding machine-readable source code,
which must be distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
* b) Accompany it with a written offer, valid for at least three years, to give
any third party, for a charge no more than your cost of physically performing
source distribution, a complete machine-readable copy of the corresponding
source code, to be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange; or,
* c) Accompany it with the information you received as to the offer to
distribute corresponding source code. (This alternative is allowed only for
noncommercial distribution and only if you received the program in object code
or executable form with such an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for making
modifications to it. For an executable work, complete source code means all the
source code for all modules it contains, plus any associated interface
definition files, plus the scripts used to control compilation and installation
of the executable. However, as a special exception, the source code distributed
need not include anything that is normally distributed (in either source or
binary form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component itself
accompanies the executable.
If distribution of executable or object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the source code
from the same place counts as distribution of the source code, even though third
parties are not compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program except as
expressly provided under this License. Any attempt otherwise to copy, modify,
sublicense or distribute the Program is void, and will automatically terminate
your rights under this License. However, parties who have received copies, or
rights, from you under this License will not have their licenses terminated so
long as such parties remain in full compliance.
5. You are not required to accept this License, since you have not signed it.
However, nothing else grants you permission to modify or distribute the Program
or its derivative works. These actions are prohibited by law if you do not
accept this License. Therefore, by modifying or distributing the Program (or any
work based on the Program), you indicate your acceptance of this License to do
so, and all its terms and conditions for copying, distributing or modifying the
Program or works based on it.
6. Each time you redistribute the Program (or any work based on the Program),
the recipient automatically receives a license from the original licensor to
copy, distribute or modify the Program subject to these terms and conditions.
You may not impose any further restrictions on the recipients' exercise of the
rights granted herein. You are not responsible for enforcing compliance by third
parties to this License.
7. If, as a consequence of a court judgment or allegation of patent infringement
or for any other reason (not limited to patent issues), conditions are imposed
on you (whether by court order, agreement or otherwise) that contradict the
conditions of this License, they do not excuse you from the conditions of this
License. If you cannot distribute so as to satisfy simultaneously your
obligations under this License and any other pertinent obligations, then as a
consequence you may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by all those
who receive copies directly or indirectly through you, then the only way you
could satisfy both it and this License would be to refrain entirely from
distribution of the Program.
If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply and the
section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any patents or
other property right claims or to contest validity of any such claims; this
section has the sole purpose of protecting the integrity of the free software
distribution system, which is implemented by public license practices. Many
people have made generous contributions to the wide range of software
distributed through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing to
distribute software through any other system and a licensee cannot impose that
choice.
This section is intended to make thoroughly clear what is believed to be a
consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in certain
countries either by patents or by copyrighted interfaces, the original copyright
holder who places the Program under this License may add an explicit
geographical distribution limitation excluding those countries, so that
distribution is permitted only in or among countries not thus excluded. In such
case, this License incorporates the limitation as if written in the body of this
License.
9. Affero Inc. may publish revised and/or new versions of the Affero General
Public License from time to time. Such new versions will be similar in spirit to
the present version, but may differ in detail to address new problems or
concerns.
Each version is given a distinguishing version number. If the Program specifies
a version number of this License which applies to it and "any later version",
you have the option of following the terms and conditions either of that version
or of any later version published by Affero, Inc. If the Program does not
specify a version number of this License, you may choose any version ever
published by Affero, Inc.
You may also choose to redistribute modified versions of this program under any
version of the Free Software Foundation's GNU General Public License version 2
or higher, so long as that version of the GNU GPL includes terms and conditions
substantially equivalent to those of this license.
10. If you wish to incorporate parts of the Program into other free programs
whose distribution conditions are different, write to the author to ask for
permission. For software which is copyrighted by Affero, Inc., write to us; we
sometimes make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and of
promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE
PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED
IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS
IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT
NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE
PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL,
SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY
TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF
THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER
PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
@@ -0,0 +1,58 @@
LIME SURVEY and ViciDial
We've been asked about Lime Survey(http://www.limesurvey.org) integration with ViciDial several times so here is a little summary of how you install it as well as how you can get it to work with Vicidial.
We recommend creating a LimeSurvey Survey for each campaign and adding a "question" that will store the lead ID or phone number. For example, we will use the code LEADID to the survey and then we will send those variables using the web form in the agent interface using the following for the web form address:
VARhttp://SERVER/limesurvey/index.php?sid=37487&lang=en&37487X1X5=--A--phone_number--B--
(example: http://SERVER/limesurvey/index.php?sid=37487&lang=en&37487X1X5=3125551212)
37487 is the survey ID
1 is the question group ID
5 is the question ID (phone number)
3125551212 is a phone number
More information here:
http://docs.limesurvey.org/tiki-index.php?page=Workarounds#Prefilling_survey_answers_using_the_survey_URL
INSTALLATION INSTRUCTIONS:
cd /usr/local/apache2/htdocs/
wget http://softlayer.dl.sourceforge.net/project/limesurvey/1._LimeSurvey_stable/1.85%2B/limesurvey185plus-build7593-20090907.tar.gz
gunzip limesurvey185plus-build7593-20090907.tar.gz
tar xvf limesurvey185plus-build7593-20090907.tar
rm -f limesurvey185plus-build7593-20090907.tar
vi config.php
* change variable to fit
database = limedb
user = limedbuser
password = limedbpw
mysql
create database limedb;
create user limedbuser;
create user limedbuser@localhost;
set password for limedbuser = PASSWORD('limedbpw');
set password for limedbuser@localhost = PASSWORD('limedbpw');
grant all on limedb.* to 'limedbuser';
grant all on limedb.* to 'limedbuser'@'localhost';
*IN A WEB BROWSER, GO TO THIS ADDRESS TO POPULATE THE ADDRESS:
http://SERVER/limesurvey/admin/install/
* delete the admin install directory
rm -fr admin/install/
Go to adm web page:
http://SERVER/limesurvey/admin/admin.php
Add a user: (vicidial/1234/ViciDial User)
Add a group: (ViciDial agent group)
Add a survey: ViciDial test Survey
Add question group: ViciDial general questions
Add a question:
For more information read the online manual:
http://docs.limesurvey.org/tiki-index.php?page=English+Instructions+for+LimeSurvey
@@ -0,0 +1,213 @@
PROCESS FOR LIST SUGGESTIONS FOR ROOM MANAGERS Started: 2008-07-14
This document goes over the process for making suggestions of what lists to use at what time in a special report linked from the vicidial Administration web site(vicidial/admin.php).
The suggestions would group lists usage into eight 3-hour periods for each day according to server time. The actual number of 3-hour periods shown for each list would be restricted depending on the local call time scheme selected for the campaign and the area that the leads were present in.
The list suggestion process would most likely not be real-time, although at companies with small lists that might be possible. Instead, a server process running after-hours will generate statistics and scores for each list for each of the 3-hour periods. Something like the following will be viewable after the stats have been run:
LIST TIME TZ-DIAL% HA-SCORE SALE-SCORE
101 9AM-12PM 100 15 15
101 12PM-3PM 100 25 35 *
101 3PM-6PM 100 35 30
101 6PM-9PM 100 25 20
In the above example, the best time for a manager to call the list, for the highest rate of Human-Answered CONTACT, would be from 3-6PM. Or to maximixe SALEs they might want to call the list earlier at 12PM-3PM. the reason that you only see four 3-hour periods is that this specific list has only US Eastern time-zone leads in it and the campaign time scheme is set to 9AM-9PM so there is no possibility of calling past 9PM server time since the server is located in US Eastern Timezone, but a list with central or mountain time zone leads in it would show a fifth period(9PM-12AM) that would have score next to it(see example below). The Asterisk * is next to the time period that is happening right now, in the actual report that line would be highlighted with a different color.
LIST TIME TZ-DIAL% HA-SCORE SALE-SCORE
102 9AM-12PM 67 20 15
102 12PM-3PM 100 15 15 *
102 3PM-6PM 100 20 25
102 6PM-9PM 100 15 10
102 9PM-12AM 33 30 35
In this example you get some indication of how the TZ-DIAL % will work. In the real application it might be better to use some kind of graph or filled-in sections of the table that would indicate the time ranges and lead percentage covered in each of the time periods to give a better visual of when the leads are able to be dialed.
There will also be the ability to see a comparison of the available lists for the current time period so that a manager can make a decision as to which of those lists to make active.
Factors to be taken into account by the scoring process:
- number of leads in the list
- number of leads in a callable time zone in the list
- number of sales and the sales ratio in each time period
- number of attempts by leads in the list in each time period
- the amount of dead leads(leads that cannot be called anymore) in the list
- the number of calls placed yesterday in the same time period
- the number of Human-Answered leads for each period
Needed database changes:
!!! IMPORTANT !!!
THESE ARE FOR REFERENCE ONLY, DO NOT RUN THEM!!!
ALTER TABLE vicidial_status_categories ADD sale_category ENUM('Y','N') default 'N';
ALTER TABLE vicidial_status_categories ADD dead_lead_category ENUM('Y','N') default 'N';
CREATE TABLE vicidial_lists_suggestions (
list_id BIGINT(14) UNSIGNED PRIMARY KEY NOT NULL,
last_update_time DATETIME,
leads_count INT(9) UNSIGNED,
calls_count INT(9) UNSIGNED,
sales_count INT(9) UNSIGNED,
contacts_count INT(9) UNSIGNED,
period_1_dialable MEDIUMINT(7) UNSIGNED,
period_1_tz_dial_pct TINYINT(3),
period_1_calls MEDIUMINT(7) UNSIGNED,
period_1_sales MEDIUMINT(7) UNSIGNED,
period_1_contacts MEDIUMINT(7) UNSIGNED,
period_1_avg_attempts TINYINT(3) UNSIGNED,
period_1_calls_yesterday MEDIUMINT(7) UNSIGNED,
period_1_score_sale TINYINT(3),
period_1_score_contact TINYINT(3),
period_2_dialable MEDIUMINT(7) UNSIGNED,
period_2_tz_dial_pct TINYINT(3),
period_2_calls MEDIUMINT(7) UNSIGNED,
period_2_sales MEDIUMINT(7) UNSIGNED,
period_2_contacts MEDIUMINT(7) UNSIGNED,
period_2_avg_attempts TINYINT(3) UNSIGNED,
period_2_calls_yesterday MEDIUMINT(7) UNSIGNED,
period_2_score_sale TINYINT(3),
period_2_score_contact TINYINT(3),
period_3_dialable MEDIUMINT(7) UNSIGNED,
period_3_tz_dial_pct TINYINT(3),
period_3_calls MEDIUMINT(7) UNSIGNED,
period_3_sales MEDIUMINT(7) UNSIGNED,
period_3_contacts MEDIUMINT(7) UNSIGNED,
period_3_avg_attempts TINYINT(3) UNSIGNED,
period_3_calls_yesterday MEDIUMINT(7) UNSIGNED,
period_3_score_sale TINYINT(3),
period_3_score_contact TINYINT(3),
period_4_dialable MEDIUMINT(7) UNSIGNED,
period_4_tz_dial_pct TINYINT(3),
period_4_calls MEDIUMINT(7) UNSIGNED,
period_4_sales MEDIUMINT(7) UNSIGNED,
period_4_contacts MEDIUMINT(7) UNSIGNED,
period_4_avg_attempts TINYINT(3) UNSIGNED,
period_4_calls_yesterday MEDIUMINT(7) UNSIGNED,
period_4_score_sale TINYINT(3),
period_4_score_contact TINYINT(3),
period_5_dialable MEDIUMINT(7) UNSIGNED,
period_5_tz_dial_pct TINYINT(3),
period_5_calls MEDIUMINT(7) UNSIGNED,
period_5_sales MEDIUMINT(7) UNSIGNED,
period_5_contacts MEDIUMINT(7) UNSIGNED,
period_5_avg_attempts TINYINT(3) UNSIGNED,
period_5_calls_yesterday MEDIUMINT(7) UNSIGNED,
period_5_score_sale TINYINT(3),
period_5_score_contact TINYINT(3),
period_6_dialable MEDIUMINT(7) UNSIGNED,
period_6_tz_dial_pct TINYINT(3),
period_6_calls MEDIUMINT(7) UNSIGNED,
period_6_sales MEDIUMINT(7) UNSIGNED,
period_6_contacts MEDIUMINT(7) UNSIGNED,
period_6_avg_attempts TINYINT(3) UNSIGNED,
period_6_calls_yesterday MEDIUMINT(7) UNSIGNED,
period_6_score_sale TINYINT(3),
period_6_score_contact TINYINT(3),
period_7_dialable MEDIUMINT(7) UNSIGNED,
period_7_tz_dial_pct TINYINT(3),
period_7_calls MEDIUMINT(7) UNSIGNED,
period_7_sales MEDIUMINT(7) UNSIGNED,
period_7_contacts MEDIUMINT(7) UNSIGNED,
period_7_avg_attempts TINYINT(3) UNSIGNED,
period_7_calls_yesterday MEDIUMINT(7) UNSIGNED,
period_7_score_sale TINYINT(3),
period_7_score_contact TINYINT(3),
period_8_dialable MEDIUMINT(7) UNSIGNED,
period_8_tz_dial_pct TINYINT(3),
period_8_calls MEDIUMINT(7) UNSIGNED,
period_8_sales MEDIUMINT(7) UNSIGNED,
period_8_contacts MEDIUMINT(7) UNSIGNED,
period_8_avg_attempts TINYINT(3) UNSIGNED,
period_8_calls_yesterday MEDIUMINT(7) UNSIGNED,
period_8_score_sale TINYINT(3),
period_8_score_contact TINYINT(3)
);
CREATE TABLE vicidial_lists_suggestion_log (
list_id BIGINT(14) UNSIGNED NOT NULL,
campaign_id VARCHAR(20) NOT NULL,
log_datetime DATETIME NOT NULL,
leads_count INT(9) UNSIGNED,
calls_count INT(9) UNSIGNED,
sales_count INT(9) UNSIGNED,
contacts_count INT(9) UNSIGNED,
period_1_dialable MEDIUMINT(7) UNSIGNED,
period_1_tz_dial_pct TINYINT(3),
period_1_calls MEDIUMINT(7) UNSIGNED,
period_1_sales MEDIUMINT(7) UNSIGNED,
period_1_contacts MEDIUMINT(7) UNSIGNED,
period_1_avg_attempts TINYINT(3) UNSIGNED,
period_1_calls_yesterday MEDIUMINT(7) UNSIGNED,
period_1_score_sale TINYINT(3),
period_1_score_contact TINYINT(3),
period_2_dialable MEDIUMINT(7) UNSIGNED,
period_2_tz_dial_pct TINYINT(3),
period_2_calls MEDIUMINT(7) UNSIGNED,
period_2_sales MEDIUMINT(7) UNSIGNED,
period_2_contacts MEDIUMINT(7) UNSIGNED,
period_2_avg_attempts TINYINT(3) UNSIGNED,
period_2_calls_yesterday MEDIUMINT(7) UNSIGNED,
period_2_score_sale TINYINT(3),
period_2_score_contact TINYINT(3),
period_3_dialable MEDIUMINT(7) UNSIGNED,
period_3_tz_dial_pct TINYINT(3),
period_3_calls MEDIUMINT(7) UNSIGNED,
period_3_sales MEDIUMINT(7) UNSIGNED,
period_3_contacts MEDIUMINT(7) UNSIGNED,
period_3_avg_attempts TINYINT(3) UNSIGNED,
period_3_calls_yesterday MEDIUMINT(7) UNSIGNED,
period_3_score_sale TINYINT(3),
period_3_score_contact TINYINT(3),
period_4_dialable MEDIUMINT(7) UNSIGNED,
period_4_tz_dial_pct TINYINT(3),
period_4_calls MEDIUMINT(7) UNSIGNED,
period_4_sales MEDIUMINT(7) UNSIGNED,
period_4_contacts MEDIUMINT(7) UNSIGNED,
period_4_avg_attempts TINYINT(3) UNSIGNED,
period_4_calls_yesterday MEDIUMINT(7) UNSIGNED,
period_4_score_sale TINYINT(3),
period_4_score_contact TINYINT(3),
period_5_dialable MEDIUMINT(7) UNSIGNED,
period_5_tz_dial_pct TINYINT(3),
period_5_calls MEDIUMINT(7) UNSIGNED,
period_5_sales MEDIUMINT(7) UNSIGNED,
period_5_contacts MEDIUMINT(7) UNSIGNED,
period_5_avg_attempts TINYINT(3) UNSIGNED,
period_5_calls_yesterday MEDIUMINT(7) UNSIGNED,
period_5_score_sale TINYINT(3),
period_5_score_contact TINYINT(3),
period_6_dialable MEDIUMINT(7) UNSIGNED,
period_6_tz_dial_pct TINYINT(3),
period_6_calls MEDIUMINT(7) UNSIGNED,
period_6_sales MEDIUMINT(7) UNSIGNED,
period_6_contacts MEDIUMINT(7) UNSIGNED,
period_6_avg_attempts TINYINT(3) UNSIGNED,
period_6_calls_yesterday MEDIUMINT(7) UNSIGNED,
period_6_score_sale TINYINT(3),
period_6_score_contact TINYINT(3),
period_7_dialable MEDIUMINT(7) UNSIGNED,
period_7_tz_dial_pct TINYINT(3),
period_7_calls MEDIUMINT(7) UNSIGNED,
period_7_sales MEDIUMINT(7) UNSIGNED,
period_7_contacts MEDIUMINT(7) UNSIGNED,
period_7_avg_attempts TINYINT(3) UNSIGNED,
period_7_calls_yesterday MEDIUMINT(7) UNSIGNED,
period_7_score_sale TINYINT(3),
period_7_score_contact TINYINT(3),
period_8_dialable MEDIUMINT(7) UNSIGNED,
period_8_tz_dial_pct TINYINT(3),
period_8_calls MEDIUMINT(7) UNSIGNED,
period_8_sales MEDIUMINT(7) UNSIGNED,
period_8_contacts MEDIUMINT(7) UNSIGNED,
period_8_avg_attempts TINYINT(3) UNSIGNED,
period_8_calls_yesterday MEDIUMINT(7) UNSIGNED,
period_8_score_sale TINYINT(3),
period_8_score_contact TINYINT(3),
index (list_id),
index (campaign_id),
index (log_datetime)
);
@@ -0,0 +1,396 @@
VICIDIAL - LOAD BALANCING setup.
This document is meant to summarize the capabilities and setup of VICIDIAL in a multi-server environment.
Why Load Balance?
The primary reason to do load balancing, or clustering of multiple VICIDIAL servers, is to spread the calls taken in or the answered calls on an outbound campaign across all of the agents that are logged into a campaign no matter what server they are on. For instance, on an outbound campaign, you have 2 servers, server one has 20 agents logged in on a campaign and the other server(two) has 5 agents logged in on the same campaign. Lets say that the campaign is set to a dial_level of 3.0 so there are 60 active calls being placed on server one and 15 active calls being placed on server two. Then 23 of the calls on server one answer, meaning that there are three calls too many for the agents available on that server. Under a load-balancing-overflow setup, those three calls can travel over an IAX2 trunk directly to the agents on that server that are still available. This increased efficiency in both inbound and outbound environments as well as reducing on-hold times for customers and equalizing wait times for agents across all servers for a campaign.
Another reason for load balancing is the ability to use cheaper hardware on the server side. It is much cheaper and more fault-tolerant to buy four P4 2.0GHz 1U servers for $800 a piece than it is to buy a single 4U quad Xeon 3.2GHz server. The four 1U servers will have more total capacity, can be easily scaled and if one fails you've only lost 25% of capacity instead of everything. This philosophy has serverd our call center very well over the last two years.
As of release 2.0.2, a new script(AST_VDauto_dial_FILL.pl) allows for dial-out-only(no agents on the server) VICIDIAL servers as well as balance dialing where a server with available trunk lines can dial lines for another server that does not have enough lines to dial for it's dial_level. AST_VDauto_dial_FILL.pl script is only for multi-server systems and is started from new ADMIN_keepalive_ALL.pl script with option 7 in astguiclient.conf.
How do I set up load balancing on my two server VICIDIAL setup?
These steps are mostly taken directly from the SCRATCH_INSTALL document, but they are all put together here to give a better idea of what is needed all in one place. It is assumed that you already have VICIDIAL up and running on both servers.
NOTE: In a multi-server setup you may want to have your database and web server on a separate machine from your Asterisk/VICIDIAL servers. Simply copy the web page directories to your new database/web server and set the /etc/astguiclient.conf files on your VICIDIAL servers to point to that new database server. You can also have several web servers(or even load-balancing web servers) if you have more than 70 seats in one installation you may want to do that if you are not using eaccelerator. For the web pages you just need to make sure the dbconnect.php files are configured for your database server. We have had 12 VICIDIAL servers and 2 web servers using a single database server with no problems.
NOTE: at the bottom of this document are conf examples for a 3 server load balancing setup.
NOTE: as of 2.0.5 most of these settings are already done for you if you are using auto-conf file generation
NOTE: as of SVN trunk 2009-05-19 the voicemail and prompt recording extensions are also auto-generated
NOTE: if you have a dedicated MySQL database server with a lot of RAM(8GB or greater) then you should consider running the following MySQL queries to turn heavily used tables into MEMORY tables to speed up execution and reduce load on your database server:
ALTER TABLE vicidial_live_agents MODIFY closer_campaigns VARCHAR(8000) default '';
ALTER TABLE vicidial_live_agents MODIFY external_ingroups VARCHAR(8000) default '';
ALTER TABLE vicidial_live_agents MODIFY agent_territories VARCHAR(1000) default '';
ALTER TABLE vicidial_live_agents ENGINE=MEMORY;
ALTER TABLE vicidial_manager ENGINE=MEMORY;
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
AS OF RELEASE 2.2.0 YOU SHOULD NOT HAVE TO TAKE ANY STEPS BEYOND STEP 2 IN THIS DOCUMENT TO GET MULTI-SERVER VICIDIAL TO WORK IF YOU ARE USING THE DEFAULT VICIDIAL CONF FILES.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1. The VICIDIAL/Asterisk servers need to have all of the perl scripts and cron jobs installed on them, except these which only need to be on one of the servers:
- AST_VDhopper.pl (crontab)
- AST_cleanup_agent_log.pl (crontab)
- ADMIN_adjust_GMTnow_on_leads.pl (crontab)
- AST_DB_optimize.pl (crontab)
- AST_VDadapt.pl (defined in /etc/astguiclient.conf)
- AST_VDauto_dial_FILL.pl (defined in /etc/astguiclient.conf)
- ADMIN_archive_log_tables.pl (crontab)
- AST_DB_dead_cb_purge.pl (crontab)
- AST_flush_DBqueue.pl (crontab)
2. The VARactive_keepalives variable in /etc/astguiclient.conf should have "5" and "7" on only ONE SERVER in your entire dialer setup, the other servers should not have 5 or 7 in that field.
# 1 - AST_update
# 2 - AST_send_listen
# 3 - AST_VDauto_dial
# 4 - AST_VDremote_agents
# 5 - AST_VDadapt (If multi-server system, this must only be on one server)
# 6 - FastAGI_log
# 7 - AST_VDauto_dial_FILL (only for multi-server, this must only be on one server)
(NOTE: the install.pl script now has an option to generate the following settings and print them out to the screen so that you do not have to manually build them. ./install.pl --build_multiserver_conf)
3. The two servers need to be registered to each other as IAX2 friends:
SERVER ONE(ASTtest1-10.10.10.15)
iax.conf:
register => ASTtest1:test@10.10.10.16
[ASTtest2]
type=friend
accountcode=IAXtrunk2
context=default
auth=plaintext
host=dynamic
permit=0.0.0.0/0.0.0.0
secret=test
qualify=yes
SERVER TWO(ASTtest2-10.10.10.16)
iax.conf:
register => ASTtest2:test@10.10.10.15
[ASTtest1]
type=friend
accountcode=IAXtrunk1
context=default
auth=plaintext
host=dynamic
permit=0.0.0.0/0.0.0.0
secret=test
qualify=yes
4. The two servers need to have wildcard extensions assigned to the other server in the dialplan:
## NOTE: the "010*010*010*015" is the IP address of the server as defined in
the /etc/astguiclient.conf file
SERVER ONE(ASTtest1-10.10.10.15)
extensions.conf:
[globals]
TRUNKIAX2=IAX2/ASTtest1:test@10.10.10.16
[default]
exten => _010*010*010*015*.,1,Goto(default,${EXTEN:16},1)
exten => _010*010*010*016*.,1,Dial(${TRUNKIAX2}/${EXTEN:16},55,o)
exten => _8600XXX*.,1,AGI(agi-VDADfixCXFER.agi)
exten => _78600XXX*.,1,AGI(agi-VDADfixCXFER.agi)
SERVER TWO(ASTtest2-10.10.10.16)
extensions.conf:
[globals]
TRUNKIAX1=IAX2/ASTtest2:test@10.10.10.15
[default]
exten => _010*010*010*015*.,1,Dial(${TRUNKIAX1}/${EXTEN:16},55,o)
exten => _010*010*010*016*.,1,Goto(default,${EXTEN:16},1)
exten => _8600XXX*.,1,AGI(agi-VDADfixCXFER.agi)
exten => _78600XXX*.,1,AGI(agi-VDADfixCXFER.agi)
5. For BOTH servers the VDAD extens need to be setup there as well for the Load-Balance and Load-Balance-Overflow AGI scripts, as well as setting up the closer and inbound extens if needed(these should already be part of the default extensions.conf):
; VICIDIAL_auto_dialer transfer script Load Balance Overflow:
exten => 8367,1,Playback(sip-silence)
exten => 8367,2,AGI(agi://127.0.0.1:4577/call_log)
exten => 8367,3,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LO)
exten => 8367,4,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LO)
exten => 8367,5,Hangup
; VICIDIAL_auto_dialer transfer script Load Balanced:
exten => 8368,1,Playback(sip-silence)
exten => 8368,2,AGI(agi://127.0.0.1:4577/call_log)
exten => 8368,3,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LB)
exten => 8368,4,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LB)
exten => 8368,5,Hangup
; Below are the parameters needed for the script to be run properly
; 1. the method of call handling for the script:
; - CID - CID received, add record with phone number
; - CIDLOOKUP - Lookup CID to find record in whole system
; - CIDLOOKUPRL - Restrict lookup to one list
; - CIDLOOKUPRC - Restrict lookup to one campaign's lists
; - CLOSER - Closer calls from VICIDIAL fronters
; - ANI - ANI received, add record with phone number
; - ANILOOKUP - Lookup ANI to find record in whole system
; - ANILOOKUPRL - Restrict lookup to one list
; - 3DIGITID - Enter 3 digit code to go to agent
; - 4DIGITID - Enter 4 digit code to go to agent
; - 5DIGITID - Enter 5 digit code to go to agent
; - 10DIGITID - Enter 10 digit code to go to agent
; 2. the method of searching for an available agent:
; - LO - Load Balance Overflow only (priority to home server)
; - LB - <default> Load Balance total system
; - SO - Home server only
; 3. the full name of the IN GROUP to be used in vicidial for the inbound call
; 4. the phone number that was called, for the log entry
; 5. the callerID or lead_id of the person that called(usually overridden)
; 6. the park extension audio file name if used
; 7. the status of the call initially(usually not used)
; 8. the list_id to insert the new lead under if it is new (and CID/ANI available)
; 9. the phone dialing code to insert with the new lead if new (and CID/ANI available)
; 10. the campaign_id to search within lists if CIDLOOKUPRC
;inbound VICIDIAL calls:
exten => 1234,1,Answer ; Answer the line
exten => 1234,2,AGI(agi-VDAD_ALL_inbound.agi,CID-----LB-----INB-----7274515134-----Closer-----park----------999-----1-----OUTB)
exten => 1234,3,Hangup
; inbound VICIDIAL transfer calls [can arrive through PRI T1 crossover, IAX or SIP channel]
exten => _90009.,1,Answer ; Answer the line
exten => _90009.,2,AGI(agi-VDAD_ALL_inbound.agi,CLOSER-----LB-----CL_TESTCAMP-----7275551212-----Closer-----park----------999-----1)
exten => _90009.,3,Hangup
exten => _990009.,1,Answer ; Answer the line
exten => _990009.,2,AGI(agi-VDAD_ALL_inbound.agi,CLOSER-----LB-----CL_TESTCAMP-----7275551212-----Closer-----park----------999-----1)
exten => _990009.,3,Hangup
6. Reload both Asterisk servers and for outbound change the VDAD exten in the campaign detail screens to 8367 or 8368 and kill the AST_VDauto_dial.pl scripts on both servers so they can restart and you can now look at the AST_timeonVDADall.php page(per campaign time-on-VDAD available from the STATS and REPORTS link on the vicidial admin screen) that will allo you to see the server_ip of the agent and the server_ip of the call per campaign across all campaigns.
If you have any questions or problems please post to the astguiclient-users list(link available on the project website)
7. For multi-server VICIDIAL/astGUIclient installations these cron scripts only need to be set up and run on one of the servers:
- AST_VDhopper.pl (crontab)
- AST_cleanup_agent_log.pl (crontab)
- ADMIN_adjust_GMTnow_on_leads.pl (crontab)
- AST_DB_optimize.pl (crontab)
- AST_VDadapt.pl (defined in /etc/astguiclient.conf)
- AST_VDauto_dial_FILL.pl (defined in /etc/astguiclient.conf)
- ADMIN_archive_log_tables.pl (crontab)
- AST_flush_DBqueue.pl (crontab)
8. On all servers but one you should DELETE the following line from your extensions.conf:
; prompt recording AGI script, ID is 4321
exten => 8167,1,Answer
exten => 8167,2,AGI(agi-record_prompts.agi,wav-----720000)
exten => 8167,3,Hangup
exten => 8168,1,Answer
exten => 8168,2,AGI(agi-record_prompts.agi,gsm-----720000)
exten => 8168,3,Hangup
This should help to prevent overwriting of prompts that are copied over from the one server that is used to do prompt creation.
Or you can simply redirect to the server that does have the recordings on it:
exten => 8167,1,Dial(${TRUNKIAX2}/${EXTEN},55,o)
exten => 8168,1,Dial(${TRUNKIAX2}/${EXTEN},55,o)
9. On all servers but one you should consider redirecting voicemail direct calls to a single server:
Change this:
exten => _85026666666666.,1,Wait(1)
exten => _85026666666666.,2,Voicemail(${EXTEN:14}|u)
exten => _85026666666666.,3,Hangup
To something like this:
exten => _85026666666666.,1,Dial(${TRUNKIAX2}/${EXTEN},55,o)
Change this:
exten => 8500,1,VoicemailMain
exten => 8500,2,Goto(s,6)
To something like this:
exten => 8500,1,Dial(${TRUNKIAX2}/${EXTEN},55,o)
Change this:
exten => 8501,1,VoicemailMain(s${CALLERIDNUM})
exten => 8501,2,Hangup
To something like this:
exten => 8501,1,Dial(${TRUNKIAX2}/${EXTEN},55,o)
THREE VICIDIAL SERVER LOAD BALANCING SETUP:
The only steps that are different as you add more load-balanced servers are steps 2 and 3:
3. The three servers need to be registered to each other as IAX2 friends:
SERVER ONE(ASTtest1-10.10.10.15)
iax.conf:
register => ASTtest1:test@10.10.10.16
register => ASTtest1:test@10.10.10.17
[ASTtest2]
type=friend
accountcode=IAXtrunk2
context=default
auth=plaintext
host=dynamic
permit=0.0.0.0/0.0.0.0
secret=test
qualify=yes
[ASTtest3]
type=friend
accountcode=IAXtrunk3
context=default
auth=plaintext
host=dynamic
permit=0.0.0.0/0.0.0.0
secret=test
qualify=yes
SERVER TWO(ASTtest2-10.10.10.16)
iax.conf:
register => ASTtest2:test@10.10.10.15
register => ASTtest2:test@10.10.10.17
[ASTtest1]
type=friend
accountcode=IAXtrunk1
context=default
auth=plaintext
host=dynamic
permit=0.0.0.0/0.0.0.0
secret=test
qualify=yes
[ASTtest3]
type=friend
accountcode=IAXtrunk3
context=default
auth=plaintext
host=dynamic
permit=0.0.0.0/0.0.0.0
secret=test
qualify=yes
SERVER THREE(ASTtest3-10.10.10.17)
iax.conf:
register => ASTtest3:test@10.10.10.15
register => ASTtest3:test@10.10.10.16
[ASTtest1]
type=friend
accountcode=IAXtrunk1
context=default
auth=plaintext
host=dynamic
permit=0.0.0.0/0.0.0.0
secret=test
qualify=yes
[ASTtest2]
type=friend
accountcode=IAXtrunk2
context=default
auth=plaintext
host=dynamic
permit=0.0.0.0/0.0.0.0
secret=test
qualify=yes
4. The three servers need to have wildcard extensions assigned to the other server in the dialplan:
SERVER ONE(ASTtest1-10.10.10.15)
extensions.conf:
[globals]
TRUNKIAX2=IAX2/ASTtest1:test@10.10.10.16
TRUNKIAX3=IAX2/ASTtest1:test@10.10.10.17
[default]
exten => _010*010*010*015*.,1,Goto(default,${EXTEN:16},1)
exten => _010*010*010*016*.,1,Dial(${TRUNKIAX2}/${EXTEN:16},55,o)
exten => _010*010*010*017*.,1,Dial(${TRUNKIAX3}/${EXTEN:16},55,o)
exten => _8600XXX*.,1,AGI(agi-VDADfixCXFER.agi)
exten => _78600XXX*.,1,AGI(agi-VDADfixCXFER.agi)
SERVER TWO(ASTtest2-10.10.10.16)
extensions.conf:
[globals]
TRUNKIAX1=IAX2/ASTtest2:test@10.10.10.15
TRUNKIAX3=IAX2/ASTtest2:test@10.10.10.17
[default]
exten => _010*010*010*015*.,1,Dial(${TRUNKIAX1}/${EXTEN:16},55,o)
exten => _010*010*010*016*.,1,Goto(default,${EXTEN:16},1)
exten => _010*010*010*017*.,1,Dial(${TRUNKIAX3}/${EXTEN:16},55,o)
exten => _8600XXX*.,1,AGI(agi-VDADfixCXFER.agi)
exten => _78600XXX*.,1,AGI(agi-VDADfixCXFER.agi)
exten => 8167,1,Dial(${TRUNKIAX1}/${EXTEN},55,o)
exten => 8168,1,Dial(${TRUNKIAX1}/${EXTEN},55,o)
exten => _85026666666666.,1,Dial(${TRUNKIAX1}/${EXTEN},55,o)
exten => 8500,1,Dial(${TRUNKIAX1}/${EXTEN},55,o)
exten => 8501,1,Dial(${TRUNKIAX1}/${EXTEN},55,o)
SERVER THREE(ASTtest3-10.10.10.17)
extensions.conf:
[globals]
TRUNKIAX1=IAX2/ASTtest2:test@10.10.10.15
TRUNKIAX2=IAX2/ASTtest2:test@10.10.10.16
[default]
exten => _010*010*010*015*.,1,Dial(${TRUNKIAX1}/${EXTEN:16},55,o)
exten => _010*010*010*016*.,1,Dial(${TRUNKIAX2}/${EXTEN:16},55,o)
exten => _010*010*010*017*.,1,Goto(default,${EXTEN:16},1)
exten => _8600XXX*.,1,AGI(agi-VDADfixCXFER.agi)
exten => _78600XXX*.,1,AGI(agi-VDADfixCXFER.agi)
exten => 8167,1,Dial(${TRUNKIAX1}/${EXTEN},55,o)
exten => 8168,1,Dial(${TRUNKIAX1}/${EXTEN},55,o)
exten => _85026666666666.,1,Dial(${TRUNKIAX1}/${EXTEN},55,o)
exten => 8500,1,Dial(${TRUNKIAX1}/${EXTEN},55,o)
exten => 8501,1,Dial(${TRUNKIAX1}/${EXTEN},55,o)
Example Audio Monitoring of Load Balancing agents on other servers:
exten => _589XXX,1,Goto(default,8600${EXTEN:3},1)
exten => _689XXX,1,Dial(${TRUNKIAX1}/08600${EXTEN:3},55,o)
exten => _789XXX,1,Dial(${TRUNKIAX2}/08600${EXTEN:3},55,o)
exten => _08600XXX,1,Dial(${TRUNKblind}/6${EXTEN:1},55,To)
Example of altering vicidial_conferences entries to make monitoring easier:
delete from vicidial_conferences where conf_exten < 8600100 and server_ip='192.168.1.101';
delete from vicidial_conferences where conf_exten > 8600199 and server_ip='192.168.1.101';
update vicidial_conferences set conf_exten = (conf_exten + 100) where server_ip='192.168.1.101';
Then add the following to your extensions.conf:
remove existing blind monitoring 08600XXX extension and replace with this:
; blind monitoring
exten => _086001XX,1,Dial(${TRUNKblind}/6${EXTEN:1},55,ot)
exten => _086002XX,1,Dial(${TRUNKvicidial2}/${EXTEN},55,ot)
exten => _086003XX,1,Dial(${TRUNKvicidial3}/${EXTEN},55,ot)
exten => _086004XX,1,Dial(${TRUNKvicidial4}/${EXTEN},55,ot)
Change the _8600[1-2]XX to just _86--1XX
in the meetme.conf
remove all conferences before 8600200 and after 8600299
(vi command for search and replace ":%s/86001/86002/g")
@@ -0,0 +1,883 @@
NON-AGENT API DOCUMENT Started: 2008-07-24 Updated: 2012-03-26
This document describes the functions of an API(Application Programming
Interface) for all functions NOT directly relating to the VICIDIAL Agent screen.
This functionality will be rather limited at first and will be built upon as
critical functions are identified and programmed into it.
There is also an Agent API script, for more information on that, please read
the AGENT_API.txt document.
API functions:
version - shows version and build of the API, along with the date/time
sounds_list - outputs a list of audio files from the audio store
moh_list - outputs a list of music on hold classes in the system
vm_list - outputs a list of voicemail boxes in the system
blind_monitor - calls user-defined phone and places them in session as blind monitor
add_lead - adds a new lead to the vicidial_list table with several fields and options
update_lead - updates lead information in vicidial_list and associated custom table
agent_ingroup_info - shows in-group and outbound auto-dial info for logged-in agent
recording_lookup - looks up recordings based upon user and date or lead_id
did_log_export - exports all calls inbound to a DID for one day
agent_stats_export - exports agent statistics for set time period
add_user - adds a user to the system
add_phone - adds a phone to the system
update_phone - updates or deletes an existing phone record in the system
add_phone_alias - adds a phone alias record to the system
update_phone_alias - updates or deletes an existing phone alias record in the system
add_list - adds a list to the system
update_list - updates list settings in the system, reset leads in list, delete list
New scripts:
/vicidial/non_agent_api.php - the script that is accessed to execute commands
Changes:
80724-1723 - First build
90428-0208 - Added blind_monitor function
90513-1720 - Added sounds_list function
90721-1432 - Added rank and owner
90904-1535 - Added moh_list musiconhold function
90916-2342 - Added vm_list voicemail list
91203-1140 - Added agent_ingroup_info feature
91216-0331 - Added duplication check features to add_lead function
100118-0543 - Added new Australian and New Zealand DST schemes (FSO-FSA and LSS-FSA)
100704-1148 - Added custom fields inserts to the add_lead function
100718-0245 - Added update_lead function to update existing leads
100723-1333 - Added no_update option to the update_lead function
100728-1952 - Added delete_lead option to the update_lead function
100924-1403 - Added called_count as an update_lead option
101111-1536 - Added vicidial_hopper.source to vicidial_hopper inserts
101117-1104 - Added callback and custom field entry delete to delete_lead option
101206-2126 - Added recording_lookup and did_log_export functions
110127-2245 - Added add_user and add_phone functions
110306-1044 - Added add_list and update_list functions
110316-2035 - Added reset_time variable and NAMEPHONE dup search
110404-1356 - Added uniqueid search parameter to recording_lookup function
110409-0822 - Added run_time logging of API functions
110424-0854 - Added option for time zone code lookups using owner field in add_lead function
110529-1220 - Added time zone information output to version function
110614-0726 - Added reset_lead option to update_lead function(issue #502)
110705-1928 - Added options for USACAN 4th digit prefix(no 0 or 1) and valid areacode filtering to add_lead
110821-2318 - Added update_phone, add_phone_alias, update_phone_alias functions
110928-2110 - Added callback options to add_lead and update_lead
111106-0959 - Added user_group restrictions to some functions
120127-1331 - Small fix for plus replacement in custom fields strings for add/update_lead functions
120210-1215 - Small change for hopper adding vendor_lead_code
120213-1613 - Added optional logging of all non-admin.php requests, enabled in options.php
120326-1307 - Added agent_stats_export function
API Functions use the 'function' variable
NOTE: Just as with the Agent API, the non-agent API requires the user and pass of a
valid api-enabled vicidial_users account to execute actions.
--------------------------------------------------------------------------------
version - shows version and build of the API, along with the date/time and timezone
Example URL strings for API calls:
http://server/vicidial/non_agent_api.php?function=version
Example responses:
VERSION: 2.4-34|BUILD: 110424-0854|DATE: 2011-05-29 12:19:22|EPOCH: 1306685962|DST: 1|TZ: -5|TZNOW: -4|
--------------------------------------------------------------------------------
sounds_list - outputs a list of audio files from the audio store
NOTE: api user for this function must have user_level set to 7 or higher
OPTIONAL FIELDS-
format - format of the output(tab, link, selectframe)
stage - how to sort the output(date, size, name)
comments - name of the field to populate
Example URL strings for API calls:
http://server/vicidial/non_agent_api.php?source=test&user=6666&pass=1234&function=sounds_list&format=selectframe&comments=fieldname&stage=date
Example responses:
<success is inferred by output of audio files list>
ERROR: sounds_list USER DOES NOT HAVE PERMISSION TO VIEW SOUNDS LIST
ERROR: sounds_list CENTRAL SOUND CONTROL IS NOT ACTIVE
--------------------------------------------------------------------------------
moh_list - outputs a list of music on hold classes in the system
NOTE: api user for this function must have user_level set to 7 or higher
OPTIONAL FIELDS-
format - format of the output(tab, link, selectframe)
comments - name of the field to populate
Example URL strings for API calls:
http://server/vicidial/non_agent_api.php?source=test&user=6666&pass=1234&function=moh_list&format=selectframe&comments=fieldname&stage=date
Example responses:
<success is inferred by output of moh classes list>
ERROR: moh_list USER DOES NOT HAVE PERMISSION TO VIEW SOUNDS LIST
ERROR: moh_list CENTRAL SOUND CONTROL IS NOT ACTIVE
--------------------------------------------------------------------------------
vm_list - outputs a list of voicemail boxes in the system
NOTE: api user for this function must have user_level set to 7 or higher
OPTIONAL FIELDS-
format - format of the output(tab, link, selectframe)
comments - name of the field to populate
Example URL strings for API calls:
http://server/vicidial/non_agent_api.php?source=test&user=6666&pass=1234&function=vm_list&format=selectframe&comments=fieldname&stage=date
Example responses:
<success is inferred by output of voicemail boxes list>
ERROR: vm_list USER DOES NOT HAVE PERMISSION TO VIEW VOICEMAIL BOXES LIST
ERROR: vm_list CENTRAL SOUND CONTROL IS NOT ACTIVE
--------------------------------------------------------------------------------
blind_monitor - calls user-defined phone and places them in session as blind monitor
NOTE: api user for this function must have user_level set to 7 or higher
REQUIRED FIELDS-
phone_login - alpha-numeric, no spaces or special characters allowed
session_id - must be all numbers, 7 digits
server_ip - must be all numbers and dots, max 15 characters
source - description of what originated the API call (maximum 20 characters)
stage - MONITOR, BARGE or HIJACK, default is MONITOR
(HIJACK option is not currently functional)
Example URL strings for API calls:
http://server/vicidial/non_agent_api.php?source=test&user=6666&pass=1234&function=blind_monitor&phone_login=350a&session_id=8600051&server_ip=10.10.10.16&stage=MONITOR
Example responses:
SUCCESS: blind_monitor HAS BEEN LAUNCHED - 350a|010*010*010*017*350|8600051
ERROR: blind_monitor INVALID PHONE LOGIN - 350q
ERROR: blind_monitor INVALID SESSION ID - 8602051
ERROR: blind_monitor USER DOES NOT HAVE PERMISSION TO BLIND MONITOR - 6666|0
ERROR: NO FUNCTION SPECIFIED
--------------------------------------------------------------------------------
agent_ingroup_info - shows in-group and outbound auto-dial info for logged-in agent
NOTE: api user for this function must have user_level set to 7 or higher
REQUIRED FIELDS-
agent_user - 2-20 characters
source - description of what originated the API call (maximum 20 characters)
SETTINGS FIELDS-
stage - info(show information only), change(show options to change), text(standard non-HTML output)
Example URL strings for API calls:
http://server/vicidial/non_agent_api.php?source=test&function=agent_ingroup_info&stage=change&user=6666&pass=1234&agent_user=1000
Example responses:
ERROR: agent_ingroup_info USER DOES NOT HAVE PERMISSION TO GET AGENT INFO - 6666|0
ERROR: agent_ingroup_info INVALID USER ID - 1255|6666
--------------------------------------------------------------------------------
recording_lookup - looks up recordings based upon user and date or lead_id
NOTE: api user for this function must have user_level set to 7 or higher and "view reports" enabled
REQUIRED FIELDS-
agent_user - 2-20 characters
lead_id - 1-10 digits
date - date of the calls to pull (must be in YYYY-MM-DD format)
uniqueid - uniqueid of the call, works best included with another search field
SETTINGS FIELDS-
stage - the format of the exported data: csv, tab, pipe(default)
header - include a header(YES) or not(NO). This is optional, default is not to include a header
NOTES-
There is a hard limit of 100000 results
Example URL strings for API calls:
http://server/vicidial/non_agent_api.php?source=test&function=recording_lookup&stage=pipe&user=6666&pass=1234&agent_user=1000&date=2010-12-03
Example responses:
ERROR: recording_lookup USER DOES NOT HAVE PERMISSION TO GET RECORDING INFO - 6666|0
ERROR: recording_lookup INVALID SEARCH PARAMETERS - 6666|1000||2010-12-03|
ERROR: recording_lookup NO RECORDINGS FOUND - 1255|6666||2010-12-03|
A SUCCESS response will not show "SUCCESS", but instead will just print the results in the following format:
start_time|user|recording_id|lead_id|location
2010-12-03 12:00:01|1000|534820|876409|http://server/path/to/recording/20101203_120000_1234567890_1000-all.wav
--------------------------------------------------------------------------------
did_log_export - exports all calls inbound to a DID for one day
NOTE: api user for this function must have user_level set to 7 or higher and "view reports" enabled
REQUIRED FIELDS-
phone_number - 2-20 characters, the DID that you want to pull logs for
date - date of the calls to pull (must be in YYYY-MM-DD format)
SETTINGS FIELDS-
stage - the format of the exported data: csv, tab, pipe(default)
header - include a header(YES) or not(NO). This is optional, default is not to include a header
NOTES-
There is a hard limit of 100000 results
Example URL strings for API calls:
http://server/vicidial/non_agent_api.php?source=test&function=did_log_export&stage=pipe&user=6666&pass=1234&phone_number=3125551212&date=2010-12-03
Example responses:
ERROR: did_log_export USER DOES NOT HAVE PERMISSION TO GET DID INFO - 6666|0
ERROR: did_log_export INVALID SEARCH PARAMETERS - 6666|3125551212|2010-12-03
ERROR: did_log_export NO RECORDS FOUND - 1255|3125551212|2010-12-03
A SUCCESS response will not show "SUCCESS", but instead will just print the results in the following format:
did_number|call_date|caller_id_number|length_in_sec
3125551212|2010-12-03 12:00:01|7275551212|123
--------------------------------------------------------------------------------
agent_stats_export - exports agent activity statistics
NOTE: api user for this function must have user_level set to 7 or higher and "view reports" enabled
REQUIRED FIELDS-
source - description of what originated the API call (maximum 20 characters)
datetime_start - start date/time of the agent activity to pull (must be in "YYYY-MM-DD+HH:MM:SS" format)
datetime_end - end date/time of the agent activity to pull (must be in "YYYY-MM-DD+HH:MM:SS" format)
SETTINGS FIELDS-
agent_user - 2-20 characters, use only for one agent stats
stage - the format of the exported data: csv, tab, pipe(default)
header - include a header(YES) or not(NO). This is optional, default is not to include a header
time_format - time format('H','HF','M','S') in hours, minutes or seconds: H = 1:23:45, M = 83:45, S = 5023 (default 'HF')
* HF will force hour format even for zero seconds time "0:00:00"
NOTES-
There is a hard limit of 10000000 records analyzed
Example URL strings for API calls:
http://server/vicidial/non_agent_api.php?source=test&function=agent_stats_export&time_format=M&stage=pipe&user=6666&pass=1234&agent_user=3125551212&datetime_start=2012-03-26+00:00:00&datetime_end=2012-03-26+23:59:59
http://server/vicidial/non_agent_apiX.php?DB=0&stage=pipe&user=6666&pass=1234&source=test&function=agent_stats_export&datetime_start=2012-03-26+00:00:00&datetime_end=2012-03-26+23:59:59&header=YES
Example responses:
ERROR: agent_stats_export USER DOES NOT HAVE PERMISSION TO GET AGENT INFO - 6666|0
ERROR: agent_stats_export INVALID SEARCH PARAMETERS - 6666||2010-12-03 00:00:00|2010-12-03 00:00:01
ERROR: agent_stats_export NO RECORDS FOUND - 1255||2010-12-03 00:00:00|2010-12-03 00:00:01
A SUCCESS response will not show "SUCCESS", but instead will just print the results in the following format:
user|full_name|user_group|calls|login_time|total_talk_time|avg_talk_time|avg_wait_time|pct_of_queue|pause_time|sessions|avg_session|pauses|avg_pause_time|pause_pct|pauses_per_session
1029|test agent|ADMIN|1|0:01:52|0:00:16|0:00:16|0:00:18|16.7%|54|3|0:00:37|5|0:00:11|48.2%|2
6666|Admin|ADMIN|5|0:04:11|0:01:48|0:00:22|0:00:17|83.3%|27|2|0:02:06|4|0:00:07|10.8%|2
--------------------------------------------------------------------------------
add_lead - adds a new lead to the vicidial_list table with several fields and options
NOTE: api user for this function must have modify_leads set to 1 and user_level
must be set to 8 or higher
REQUIRED FIELDS-
phone_number - must be all numbers, 6-16 digits
phone_code - must be all numbers, 1-4 digits, defaults to 1 if not set
list_id - must be all numbers, 3-12 digits, defaults to 999 if not set
source - description of what originated the API call (maximum 20 characters)
SETTINGS FIELDS-
dnc_check - Y, N or AREACODE, default is N
campaign_dnc_check - Y, N or AREACODE, default is N
campaign_id - 2-8 Character campaign ID, required if using campaign_dnc_check or callbacks
add_to_hopper - Y or N, default is N
hopper_priority - 99 to -99, the higher number the higher priority, default is 0
hopper_local_call_time_check - Y or N, default is N. Validate the local call time before inserting lead in the hopper
duplicate_check - Check for duplicate records in the system, can select more than one (duplicate_check=DUPLIST-DUPTITLEALTPHONELIST)
If duplicate is found, will return error, the duplicate data and lead_id and list_id of existing record
Here are the duplicate_check options:
DUPLIST - check for duplicate phone_number in same list
DUPCAMP - check for duplicate phone_number in all lists for this list's campaign
DUPSYS - check for duplicate phone_number in entire system
DUPTITLEALTPHONELIST - check for duplicate title and alt_phone in same list
DUPTITLEALTPHONECAMP - check for duplicate title and alt_phone in all lists for this list's campaign
DUPTITLEALTPHONESYS - check for duplicate title and alt_phone in entire system
DUPNAMEPHONELIST - check for duplicate first_name, last_name and phone_number in same list
DUPNAMEPHONECAMP - check for duplicate first_name, last_name and phone_number in all lists for this list's campaign
DUPNAMEPHONESYS - check for duplicate first_name, last_name and phone_number in entire system
usacan_prefix_check - Y or N, default is N. Check for a valid 4th digit for USA and Canada phone numbers (cannot be 0 or 1)
usacan_areacode_check - Y or N, default is N. Check for a valid areacode for USA and Canada phone numbers
custom_fields - Y or N, default is N. Defines whether the API will accept custom field data when inserting leads into the vicidial_list table
For custom fields to be inserted, just add the field label as a variable to the URL string
For example, if the field_label is "favorite_color" you would add "&favorite_color=blue"
tz_method - <empty>, POSTAL or TZCODE, default is <empty> which will use the country code and areacode for time zone lookups
POSTAL relies on the postal_code field
TZCODE relies on the owner field being populated with a proper time zone code
callback - Y or N, default is N. Set this lead as a scheduled callback. campaign_id field is REQUIRED for callbacks
callback_status - 1-6 Character, callback status to use, default is CALLBK (vicidial_list status will be set to CBHOLD to lock)
callback_datetime - YYYY-MM-DD+HH:MM:SS, date and time of scheduled callback. REQUIRED if callback is set. NOW can be used for current datetime.
callback_type - USERONLY or ANYONE, default is ANYONE
callback_user - User ID the USERONLY callback is assigned to
callback_comments - Optional comments to appear when the callback is called back
(for fields with spaces in the values, you can replace the space with a plus + sign[address, city, first_name, etc...])
OPTIONAL FIELDS-
vendor_lead_code - 1-20 characters
source_id - 1-50 characters
gmt_offset_now - overridden by auto-lookup of phone_code and area_code portion of phone number if applicable
title - 1-4 characters
first_name - 1-30 characters
middle_initial - 1 character
last_name - 1-30 characters
address1 - 1-100 characters
address2 - 1-100 characters
address3 - 1-100 characters
city - 1-50 characters
state - 2 characters
province - 1-50 characters
postal_code - 1-10 characters
country_code - 3 characters
gender - U, M, F (Undefined, Male, Female) - defaults to 'U'
date_of_birth - YYYY-MM-DD
alt_phone - 1-12 characters
email - 1-70 characters
security_phrase - 1-100 characters
comments - 1-255 characters
multi_alt_phones - 5-1024 characters (see examples for more info)
rank - 1-5 digits
owner - 1-20 characters (user ID, Territory or user group)
Multi-ALT-Phones format:
7275551212_1_work!7275551213_1_sister+house!1234567890_1_neighbor
The multi-alt-phones field is formatted as a field of phone-number/phone-code/phone-note set of data(phone code and alt_note are both optional and the phone code can be overridden by the force phone code flag). The record delimiter is an exclamation point with the optional phone code and note delimited within the record by an underscore character _.
Example URL strings for API calls:
http://server/vicidial/non_agent_api.php?source=test&user=6666&pass=1234&function=add_lead&phone_number=7275551111
http://server/vicidial/non_agent_api.php?source=test&user=6666&pass=1234&function=add_lead&phone_number=7275551212&phone_code=1&list_id=999&dnc_check=N&first_name=Bob&last_name=Wilson
http://server/vicidial/non_agent_api.php?source=test&user=6666&pass=1234&function=add_lead&phone_number=7275551111&phone_code=1&list_id=999&dnc_check=N&first_name=Bob&last_name=Wilson&add_to_hopper=Y&hopper_local_call_time_check=Y
http://server/vicidial/non_agent_api.php?source=test&user=6666&pass=1234&function=add_lead&phone_number=7275551111&phone_code=1&list_id=999&dnc_check=N&campaign_dnc_check=Y&campaign_id=TESTCAMP&first_name=Bob&last_name=Wilson&address1=1234+Main+St.&city=Chicago+Heights&state=IL&add_to_hopper=Y&hopper_local_call_time_check=Y&multi_alt_phones=7275551212_1_work!7275551213_1_sister+house!1234567890_1_neighbor
http://server/vicidial/non_agent_api.php?source=test&user=6666&pass=1234&function=add_lead&phone_number=7275551212&phone_code=1&list_id=999&dnc_check=N&first_name=Bob&last_name=Wilson&duplicate_check=DUPLIST-DUPNAMEPHONELIST
http://server/vicidial/non_agent_api.php?source=test&user=6666&pass=1234&function=add_lead&phone_number=7275551212&phone_code=1&list_id=999&custom_fields=Y&favorite_color=blue
http://server/vicidial/non_agent_api.php?source=test&user=6666&pass=1234&function=add_lead&phone_number=7275551111&campaign_id=TESTCAMP&callback=Y&callback_status=CALLBK&callback_datetime=NOW&callback_type=USERONLY&callback_user=6666&callback_comments=Comments+go+here
Example responses:
SUCCESS: add_lead LEAD HAS BEEN ADDED - 7275551111|6666|999|193715|-4
NOTICE: add_lead ADDED TO HOPPER - 7275551111|6666|193715|1677922
SUCCESS: add_lead LEAD HAS BEEN ADDED - 7275551111|6666|999|193716|-4
NOTICE: add_lead CUSTOM FIELDS VALUES ADDED - 7275551111|1234|101
NOTICE: add_lead CUSTOM FIELDS NOT ADDED, CUSTOM FIELDS DISABLED - 7275551111|Y|0
NOTICE: add_lead CUSTOM FIELDS NOT ADDED, NO CUSTOM FIELDS DEFINED FOR THIS LIST - 7275551111|1234|101
NOTICE: add_lead CUSTOM FIELDS NOT ADDED, NO FIELDS DEFINED - 7275551111|1234|101
NOTICE: add_lead MULTI-ALT-PHONE NUMBERS LOADED - 3|6666|193716
NOTICE: add_lead NOT ADDED TO HOPPER, OUTSIDE OF LOCAL TIME - 7275551111|6666|193716|-4|0
NOTICE: add_lead SCHEDULED CALLBACK ADDED - 1234|2011-09-29 12:00:01|TESTCAMP|6666|USERONLY|CALLBK
NOTICE: add_lead SCHEDULED CALLBACK NOT ADDED, USER NOT VALID - 1234|TESTCAMP|6|
NOTICE: add_lead SCHEDULED CALLBACK NOT ADDED, CAMPAIGN NOT VALID - 1234|XYZ
ERROR: add_lead INVALID PHONE NUMBER LENGTH - 72755|6666
ERROR: add_lead INVALID PHONE NUMBER PREFIX - 72755|6666
ERROR: add_lead INVALID PHONE NUMBER AREACODE - 72755|6666
ERROR: add_lead USER DOES NOT HAVE PERMISSION TO ADD LEADS TO THE SYSTEM - 6666|0
ERROR: NO FUNCTION SPECIFIED
ERROR: add_lead DUPLICATE PHONE NUMBER IN LIST - 7275551111|101|8765444
ERROR: add_lead DUPLICATE PHONE NUMBER IN CAMPAIGN LISTS - 7275551111|101|8765444|101
ERROR: add_lead DUPLICATE PHONE NUMBER IN SYSTEM - 7275551111|101|8765444|101
ERROR: add_lead DUPLICATE TITLE ALT_PHONE IN LIST - 1234|7275551111|101|8765444
ERROR: add_lead DUPLICATE TITLE ALT_PHONE IN CAMPAIGN LISTS - 1234|7275551111|101|8765444|101
ERROR: add_lead DUPLICATE TITLE ALT_PHONE IN SYSTEM - 1234|7275551111|101|8765444|101
ERROR: add_lead DUPLICATE NAME PHONE IN LIST - Bob|Smith|7275551113|101|8765444|101
ERROR: add_lead DUPLICATE NAME PHONE IN CAMPAIGN LISTS - Bob|Smith|7275551113|101|8765444|101
ERROR: add_lead DUPLICATE NAME PHONE IN SYSTEM - Bob|Smith|7275551113|101|8765444|101
--------------------------------------------------------------------------------
update_lead - updates lead information in the vicidial_list and custom_ tables
NOTE: api user for this function must have modify_leads set to 1 and user_level
must be set to 8 or higher
REQUIRED FIELDS-
lead_id - must be all numbers, 1-9 digits, not required if using vendor_lead_code or phone_number
vendor_lead_code - can be used instead of lead_id to match leads
phone_number - can be used instead of lead_id or vendor_lead_code to match leads
source - description of what originated the API call (maximum 20 characters)
SETTINGS FIELDS-
search_method - You can combine the following 3 options in this field to search the parameters you desire:
LEAD_ID, will attempt to find a match with the lead_id
VENDOR_LEAD_CODE, will attempt to find a match with the vendor_lead_code
PHONE_NUMBER, will attempt to find a match with the phone_number
For example to search lead_id and vendor_lead_code: "&search_method=LEAD_ID_VENDOR_LEAD_CODE"
The search order is NOT preserved, Lead ID is always first, Vendor Lead Code is second
and Phone number is last. Default is "LEAD_ID"
search_location - Where to check for records in the system, can select only one(default is SYSTEM):
LIST - check for lead in same list
CAMPAIGN - check for lead in all lists for this list's campaign
SYSTEM - check for lead in entire system
If no list_id is defined, the the search_location will be assumed as SYSTEM
insert_if_not_found - Y or N, will attempt to insert as a NEW lead if no match is found, default is N.
Insertion will require phone_code, phone_number and list_id. lead_id will be ignored.
Most of the add_lead options that are not available if you use this setting in this function
records - number of records to update if more than 1 found (defaults to '1'[most recently loaded lead])
custom_fields - Y or N, default is N. Defines whether the API will accept custom field data when updating leads in the vicidial_list table
For custom fields to be updated, just add the field label as a variable to the URL string
For example, if the field_label is "favorite_color" you would add "&favorite_color=blue"
no_update - Y or N, Setting this to Y will not perform any updates, but will instead only tell
you if a lead exists that matches the search criteria, default is N.
delete_lead - Y or N, Setting this to Y will delete the lead from the vicidial_list table, default is N.
reset_lead - Y or N, Setting this to Y will reset the called-since-last-reset flag of the lead, default is N.
callback - Y, N or REMOVE, default is N. Set this lead as a scheduled callback. REMOVE will delete the scheduled callback entry
callback_status - 1-6 Character, callback status to use, default is CALLBK (vicidial_list status will be set to CBHOLD to lock)
callback_datetime - YYYY-MM-DD+HH:MM:SS, date and time of scheduled callback. REQUIRED if callback is set. NOW can be used for current datetime.
callback_type - USERONLY or ANYONE, default is ANYONE
callback_user - User ID the USERONLY callback is assigned to
callback_comments - Optional comments to appear when the callback is called back
EDITABLE FIELDS-
user_field - 1-20 characters, this updates the 'user' field in the vicidial_list table
list_id_field - 3-12 digits, this updates the 'list_id' field in the vicidial_list table
status - 1-6 characters, not punctuation or spaces
vendor_lead_code - 1-20 characters
source_id - 1-50 characters
gmt_offset_now - overridden by auto-lookup of phone_code and area_code portion of phone number if applicable
title - 1-4 characters
first_name - 1-30 characters
middle_initial - 1 character
last_name - 1-30 characters
address1 - 1-100 characters
address2 - 1-100 characters
address3 - 1-100 characters
city - 1-50 characters
state - 2 characters
province - 1-50 characters
postal_code - 1-10 characters
country_code - 3 characters
gender - U, M, F (Undefined, Male, Female) - defaults to 'U'
date_of_birth - YYYY-MM-DD
alt_phone - 1-12 characters
email - 1-70 characters
security_phrase - 1-100 characters
comments - 1-255 characters
rank - 1-5 digits
owner - 1-20 characters (user ID, Territory or user group)
called_count - digits only, the number of attempts dialing the lead
NOTES:
- in order to set a field to empty('') set it equal to --BLANK--, i.e. "&province=--BLANK--"
- please use no special characters like apostrophes, quotes or amphersands
Example URL strings for API calls:
http://server/vicidial/non_agent_api.php?source=test&user=6666&pass=1234&function=update_lead&lead_id=27&last_name=SMITH
http://server/vicidial/non_agent_api.php?source=test&user=6666&pass=1234&function=update_lead&search_method=VENDOR_LEAD_CODE&vendor_lead_code=1000019&last_name=JOHNSON
http://server/vicidial/non_agent_api.php?source=test&user=6666&pass=1234&function=update_lead&search_method=PHONE_NUMBER&records=2&list_id=8107&search_location=LIST&phone_number=9999000019&last_name=WILSON
http://server/vicidial/non_agent_api.php?source=test&user=6666&pass=1234&function=update_lead&lead_id=405794&last_name=SMITH&city=Chicago&custom_fields=Y&favorite_color=blue
http://server/vicidial/non_agent_api.php?source=test&user=6666&pass=1234&function=update_lead&search_location=LIST&search_method=PHONE_NUMBER&insert_if_not_found=Y&phone_number=9999000029&phone_code=1&list_id=999&first_name=Bob&last_name=Wilson&city=Chicago&custom_fields=Y&favorite_color=red
http://server/vicidial/non_agent_api.php?source=test&user=6666&pass=1234&function=update_lead&insert_if_not_found=Y&search_method=VENDOR_LEAD_CODE_PHONE_NUMBER&vendor_lead_code=89763545&phone_number=7275551212&phone_code=1&list_id=999&first_name=Bob&last_name=Wilson&custom_fields=Y&favorite_color=blue
http://server/vicidial/non_agent_api.php?source=test&user=6666&pass=1234&function=update_lead&search_location=LIST&search_method=VENDOR_LEAD_CODE_PHONE_NUMBER&insert_if_not_found=Y&phone_number=9999000029&phone_code=1&list_id=999&first_name=Bob&last_name=Wilson&city=Chicago&custom_fields=Y&favorite_color=red&user_field=1008&list_id_field=107&status=OLD
http://server/vicidial/non_agent_api.php?source=test&user=6666&pass=1234&function=update_lead&lead_id=27&no_update=Y
http://server/vicidial/non_agent_api.php?source=test&user=6666&pass=1234&function=update_lead&lead_id=27&delete_lead=Y
http://server/vicidial/non_agent_api.php?source=test&user=6666&pass=1234&function=update_lead&lead_id=27&delete_lead=Y&custom_fields=Y
http://server/vicidial/non_agent_api.php?source=test&user=6666&pass=1234&function=update_lead&lead_id=406757&campaign_id=TESTCAMP&callback=Y&callback_status=CALLBK&callback_datetime=NOW&callback_type=USERONLY&callback_user=1028&callback_comments=Comments+go+here+again
Example responses:
SUCCESS: update_lead LEAD HAS BEEN UPDATED - 6666|193716
NOTICE: update_lead CUSTOM FIELDS VALUES UPDATED - 7275551111|1234|101
NOTICE: update_lead CUSTOM FIELDS NOT UPDATED, CUSTOM FIELDS DISABLED - 7275551111|Y|0
NOTICE: update_lead CUSTOM FIELDS NOT UPDATED, NO CUSTOM FIELDS DEFINED FOR THIS LIST - 7275551111|1234|101
NOTICE: update_lead CUSTOM FIELDS NOT UPDATED, NO FIELDS DEFINED - 7275551111|1234|101
NOTICE: update_lead SCHEDULED CALLBACK UPDATED - 1234|2011-09-29 12:00:01|TESTCAMP|6666|USERONLY|CALLBK
NOTICE: update_lead SCHEDULED CALLBACK NOT UPDATED, NO FIELDS SPECIFIED - 1234|
NOTICE: update_lead SCHEDULED CALLBACK ADDED - 1234|2011-09-29 12:00:01|TESTCAMP|6666|USERONLY|CALLBK
NOTICE: update_lead SCHEDULED CALLBACK NOT ADDED, USER NOT VALID - 1234|TESTCAMP|6|
NOTICE: update_lead SCHEDULED CALLBACK NOT ADDED, CAMPAIGN NOT VALID - 1234|XYZ
NOTICE: update_lead NO MATCHES FOUND IN THE SYSTEM - 6666|4567|897654327|7275551212
SUCCESS: update_lead LEAD HAS BEEN ADDED - 7275551111|6666|999|193716|-4
SUCCESS: update_lead LEAD HAS BEEN DELETED - 7275551111|6666|999|193716|-4
NOTICE: update_lead CUSTOM FIELDS ENTRY DELETED 1 - 7275551111|6666|999|193716|-4
NOTICE: update_lead LEADS FOUND IN THE SYSTEM - 6666|4567|897654327|7275551212|101|101
ERROR: update_lead INVALID DATA FOR LEAD INSERTION - 6666|||
ERROR: update_lead NO MATCHES FOUND IN THE SYSTEM - 6666|||
ERROR: update_lead NO VALID SEARCH METHOD - 6666|SYSTEM|||
ERROR: update_lead USER DOES NOT HAVE PERMISSION TO UPDATE LEADS IN THE SYSTEM - 6666|0
--------------------------------------------------------------------------------
add_user - adds a user to the system
NOTE: api user for this function must have user_level set to 8 or higher and "modify users" enabled
REQUIRED FIELDS-
agent_user - 2-20 characters (for auto-generated send 'AUTOGENERATED')
agent_pass - 1-20 characters
agent_user_level - 1 through 9, one digit only
agent_full_name - 1-50 characters
agent_user_group - 1-20 characters, must be a valid user group
OPTIONAL FIELDS-
phone_login - 1-20 characters
phone_pass - 1-20 characters
hotkeys_active - 0 or 1
voicemail_id - 1-10 digits
email - 1-100 characters
custom_one - 1-100 characters
custom_two - 1-100 characters
custom_three - 1-100 characters
custom_four - 1-100 characters
custom_five - 1-100 characters
NOTE: This function does not work with Vtiger integration
Example URL strings for API calls:
http://server/vicidial/non_agent_api.php?source=test&function=add_user&user=6666&pass=1234&agent_user=1000&agent_pass=9999&agent_user_level=1&agent_full_name=Testing+Person&agent_user_group=AGENTS
http://server/vicidial/non_agent_api.php?source=test&function=add_user&user=6666&pass=1234&agent_user=1000&agent_pass=9999&agent_user_level=1&agent_full_name=Testing+Person&agent_user_group=AGENTS&phone_login=100&phone_pass=test&hotkeys_active=1&voicemail_id=&custom_one=jjjj&custom_two=yyyy&custom_three=kkk&custom_four=wwww&custom_five=hhhh
Example responses:
ERROR: add_user USER DOES NOT HAVE PERMISSION TO ADD USERS - 6666|0
ERROR: add_user YOU MUST USE ALL REQUIRED FIELDS - 6666|1000||||
ERROR: add_user USER DOES NOT HAVE PERMISSION TO ADD USERS IN THIS USER LEVEL - 6666|8
ERROR: add_user USER GROUP DOES NOT EXIST - 6666|ADFHR
ERROR: add_user USER ALREADY EXISTS - 6666|6666
SUCCESS: add_user USER HAS BEEN ADDED - 6666|1000|1234|8|Testing+Person|AGENTS
--------------------------------------------------------------------------------
add_phone - adds a phone to the system
NOTE: api user for this function must have user_level set to 8 or higher and "ast admin access" enabled
REQUIRED FIELDS-
extension - 2-100 characters
dialplan_number - 1-20 digits
voicemail_id - 1-10 digits
phone_login - 1-20 characters
phone_pass - 1-20 characters
server_ip - 7-15 characters, must be a valid server_ip
protocol - Must be one of these: 'IAX2','SIP','Zap','EXTERNAL'
registration_password - 1-20 characters
phone_full_name - 1-50 characters
local_gmt - timezone setting, not adjusting for DST, default: '-5.00'
outbound_cid - 1-20 digits
OPTIONAL FIELDS-
phone_context - a phone context, default is 'default'
email - 1-100 characters
admin_user_group - a valid user group or '---ALL---'
Example URL strings for API calls:
http://server/vicidial/non_agent_api.php?source=test&function=add_phone&user=6666&pass=1234&extension=55000&dialplan_number=55000&voicemail_id=55000&phone_login=55000&phone_pass=test&server_ip=192.168.198.5&protocol=SIP&registration_password=test&phone_full_name=Extension+55000&local_gmt=-5.00&outbound_cid=7275551212
http://server/vicidial/non_agent_api.php?source=test&function=add_phone&user=6666&pass=1234&extension=55000&dialplan_number=55000&voicemail_id=55000&phone_login=55000&phone_pass=test&server_ip=192.168.198.5&protocol=SIP&registration_password=test&phone_full_name=Extension+55000&local_gmt=-5.00&outbound_cid=7275551212&phone_context=default&email=test@test.com
Example responses:
ERROR: add_phone USER DOES NOT HAVE PERMISSION TO ADD PHONES - 6666|0
ERROR: add_phone YOU MUST USE ALL REQUIRED FIELDS - 6666|1000|||||||||||
ERROR: add_phone SERVER DOES NOT EXIST - 6666|10.0.9.9
ERROR: add_phone PHONE ALREADY EXISTS ON THIS SERVER - 6666|10.0.9.8|cc101
ERROR: add_phone PHONE LOGIN ALREADY EXISTS - 6666|cc100
ERROR: add_phone YOU MUST USE A VALID TIMEZONE - 6666|-5
SUCCESS: add_phone PHONE HAS BEEN ADDED - 6666|cc100|10.0.9.8|SIP|100
--------------------------------------------------------------------------------
update_phone - updates or deletes a phone entry already in the system
NOTE: api user for this function must have user_level set to 8 or higher and "ast admin access" enabled
REQUIRED FIELDS-
extension - 2-100 characters
server_ip - 7-15 characters, must be a valid server_ip
SETTINGS FIELDS-
delete_phone - Y or N, Setting this to Y will delete the phone from the system, default is N.
EDITABLE FIELDS-
dialplan_number - 1-20 digits
voicemail_id - 1-10 digits
phone_login - 1-20 characters
phone_pass - 1-20 characters
protocol - Must be one of these: 'IAX2','SIP','Zap','EXTERNAL'
registration_password - 1-20 characters
phone_full_name - 1-50 characters
local_gmt - timezone setting, not adjusting for DST, default: '-5.00'
outbound_cid - 1-20 digits
phone_context - a phone context, default is 'default'
email - 1-100 characters
admin_user_group - a valid user group or '---ALL---'
Example URL strings for API calls:
http://server/vicidial/non_agent_api.php?source=test&function=update_phone&user=6666&pass=1234&extension=55000&dialplan_number=55000&voicemail_id=55000&phone_login=55000&phone_pass=test&server_ip=192.168.198.5&protocol=SIP&registration_password=test&phone_full_name=Extension+55000&local_gmt=-5.00&outbound_cid=7275551212
http://server/vicidial/non_agent_api.php?source=test&function=update_phone&user=6666&pass=1234&extension=55000&dialplan_number=55000&voicemail_id=55000&phone_login=55000&phone_pass=test&server_ip=192.168.198.5&protocol=SIP&registration_password=test&phone_full_name=Extension+55000&local_gmt=-5.00&outbound_cid=7275551212&phone_context=default&email=test@test.com
http://server/vicidial/non_agent_api.php?source=test&function=update_phone&user=6666&pass=1234&extension=55000&server_ip=192.168.198.5&delete_phone=Y
Example responses:
ERROR: update_phone USER DOES NOT HAVE PERMISSION TO UPDATE PHONES - 6666|0
ERROR: update_phone YOU MUST USE ALL REQUIRED FIELDS - 6666||
ERROR: update_phone SERVER DOES NOT EXIST - 6666|10.0.9.9
ERROR: update_phone PHONE DOES NOT EXIST ON THIS SERVER - 6666|10.0.9.8|cc101
ERROR: update_phone LOGIN ALREADY EXISTS - 6666|x101
ERROR: update_phone YOU MUST USE A VALID TIMEZONE - 6666|-99
ERROR: update_phone YOU MUST USE A VALID DIALPLAN NUMBER - 6666|0
ERROR: update_phone YOU MUST USE A VALID VOICEMAIL NUMBER - 6666|0
ERROR: update_phone YOU MUST USE A VALID PHONE PASSWORD - 6666|0
ERROR: update_phone YOU MUST USE A VALID REGISTRATION PASSWORD - 6666|0
ERROR: update_phone YOU MUST USE A VALID PROTOCOL - 6666|0
ERROR: update_phone YOU MUST USE A VALID PHONE NAME - 6666|0
ERROR: update_phone YOU MUST USE A VALID PHONE CONTEXT - 6666|0
ERROR: update_phone NO UPDATES DEFINED - 6666|0
SUCCESS: update_phone PHONE HAS BEEN UPDATED - 6666|cc100|10.0.9.8|SIP|100
SUCCESS: update_phone PHONE HAS BEEN DELETED - 6666|cc100|10.0.9.8|
--------------------------------------------------------------------------------
add_phone_alias - adds a phone alias entry to the system
NOTE: api user for this function must have user_level set to 8 or higher and "ast admin access" enabled
REQUIRED FIELDS-
alias_id - 2-20 characters
phone_logins - 2-255 characters (phone logins separated by commas)
alias_name - 1-50 characters
Example URL strings for API calls:
http://server/vicidial/non_agent_api.php?source=test&function=add_phone_alias&user=6666&pass=1234&alias_id=xyz100&alias_name=XYZ+testing&phone_logins=100a,100b
Example responses:
ERROR: add_phone_alias USER DOES NOT HAVE PERMISSION TO ADD PHONE ALIASES - 6666|0
ERROR: add_phone_alias YOU MUST USE ALL REQUIRED FIELDS - 6666||||
ERROR: add_phone_alias PHONE ALIAS ALREADY EXISTS - 6666|x101
ERROR: add_phone_alias PHONE DOES NOT EXIST - 6666|cc100
SUCCESS: add_phone_alias PHONE ALIAS HAS BEEN ADDED - 6666|x100|testing_x100|cc100,bb100
--------------------------------------------------------------------------------
update_phone_alias - updates or deletes a phone alias entry already in the system
NOTE: api user for this function must have user_level set to 8 or higher and "ast admin access" enabled
REQUIRED FIELDS-
alias_id - 2-20 characters
phone_logins - 2-255 characters (phone logins separated by commas)
alias_name - 1-50 characters
SETTINGS FIELDS-
delete_alias - Y or N, Setting this to Y will delete the phone alias from the system, default is N.
Example URL strings for API calls:
http://server/vicidial/non_agent_api.php?source=test&function=update_phone_alias&user=6666&pass=1234&alias_id=xyz100&alias_name=XYZ+testing+X&phone_logins=100a,100b
http://server/vicidial/non_agent_api.php?source=test&function=update_phone_alias&user=6666&pass=1234&alias_id=xyz100&delete_alias=Y
Example responses:
ERROR: update_phone_alias USER DOES NOT HAVE PERMISSION TO UPDATE PHONE ALIASES - 6666|0
ERROR: update_phone_alias YOU MUST USE ALL REQUIRED FIELDS - 6666||||
ERROR: update_phone_alias PHONE ALIAS DOES NOT EXIST - 6666|x101
ERROR: update_phone_alias YOU MUST USE A VALID ALIAS NAME - 6666|x
ERROR: update_phone_alias PHONE DOES NOT EXIST - 6666|cc100
SUCCESS: update_phone_alias PHONE ALIAS HAS BEEN UPDATED - 6666|x100|
SUCCESS: update_phone_alias PHONE ALIAS HAS BEEN DELETED - 6666|x100|
--------------------------------------------------------------------------------
add_list - adds a list to the system
NOTE: api user for this function must have user_level set to 8 or higher and "modify lists" enabled
REQUIRED FIELDS-
list_id - 2-14 digits
list_name - 6-30 characters
campaign_id - 2-8 characters, must be a valid campaign_id
OPTIONAL FIELDS-
active - Must be one of these: 'Y','N', will default to 'N'
outbound_cid - 6-20 digits
script - 1-10 characters, must be a valid script
am_message - 2-100 characters
drop_inbound_group - 1-10 characters, must be a valid in-group
web_form_address - 6-100 characters
web_form_address_two - 6-100 characters
reset_time - 4-100 characters, must be in valid 4-digit groups of 24-hour time (i.e. 0900-1700-2359)
Example URL strings for API calls:
http://server/vicidial/non_agent_api.php?source=test&function=add_list&user=6666&pass=1234&list_id=1101&list_name=Test+API+list&campaign_id=TESTCAMP
http://server/vicidial/non_agent_api.php?source=test&function=add_list&user=6666&pass=1234&list_id=1101&list_name=Test+API+list&campaign_id=TESTCAMP&active=N&outbound_cid=7275551212&script=DEMOSCRIPT&am_message=8304&drop_inbound_group=SALESLINE&web_form_address=http://www.vicidial.org/?testing=hghg
Example responses:
ERROR: add_list USER DOES NOT HAVE PERMISSION TO ADD LISTS - 6666|0
ERROR: add_list YOU MUST USE ALL REQUIRED FIELDS - 6666|1000||
ERROR: add_list CAMPAIGN DOES NOT EXIST - 6666|TESTCIMP
ERROR: add_list LIST ALREADY EXISTS - 6666|1101
ERROR: add_list SCRIPT DOES NOT EXIST, THIS IS AN OPTIONAL FIELD - 6666|TESTSCRIPT
ERROR: add_list IN-GROUP DOES NOT EXIST, THIS IS AN OPTIONAL FIELD - 6666|TEST_IN8
ERROR: add_list RESET TIME IS NOT VALID, THIS IS AN OPTIONAL FIELD - 6666|012
SUCCESS: add_list LIST HAS BEEN ADDED - 6666|1101|TESTCAMP
--------------------------------------------------------------------------------
update_list - updates list information in the vicidial_lists table
NOTE: api user for this function must have user_level set to 8 or higher and "modify lists" enabled
REQUIRED FIELDS-
list_id - must be all numbers, 2-14 digits
source - description of what originated the API call (maximum 20 characters)
SETTINGS FIELDS-
insert_if_not_found - Y or N, will attempt to insert as a new list if no match is found, default is N.
If list is not found, the function will change to add_list and be processed in that way
reset_list - Y or N, Setting this to Y will reset the Called-Since-Last-Reset flag for all of the leads in this list, default is N.
delete_list - Y or N, Setting this to Y will delete the list from the vicidial_lists table, default is N.
delete_leads - Y or N, Setting this to Y will delete all of the leads with this list_id from the vicidial_list table, default is N.
EDITABLE FIELDS-
list_name - 6-30 characters
campaign_id - 2-8 characters, must be a valid campaign_id
active - Must be one of these: 'Y','N', will default to 'N'
outbound_cid - 6-20 digits
script - 1-10 characters, must be a valid script
am_message - 2-100 characters
drop_inbound_group - 1-10 characters, must be a valid in-group
web_form_address - 6-100 characters
web_form_address_two - 6-100 characters
reset_time - 4-100 characters, must be in valid 4-digit groups of 24-hour time (i.e. 0900-1700-2359)
NOTES:
- in order to set a field to empty('') set it equal to --BLANK--, i.e. "&drop_inbound_group=--BLANK--"
- please use no special characters like apostrophes, quotes or amphersands
Example URL strings for API calls:
http://server/vicidial/non_agent_api.php?source=test&user=6666&pass=1234&function=update_list&list_id=1101&list_name=Updated+test+API+list
http://server/vicidial/non_agent_api.php?source=test&user=6666&pass=1234&function=update_list&list_id=1101&active=N
http://server/vicidial/non_agent_api.php?source=test&user=6666&pass=1234&function=update_list&list_id=1102&active=N&insert_if_not_found=Y&list_name=Updated+test+API+list&campaign_id=TESTCAMP&outbound_cid=7275551212&script=DEMOSCRIPT&am_message=8304&drop_inbound_group=SALESLINE&web_form_address=http://www.vicidial.org/?testing=hghg
http://server/vicidial/non_agent_api.php?source=test&user=6666&pass=1234&function=update_list&list_id=1102&reset_list=Y
http://server/vicidial/non_agent_api.php?source=test&user=6666&pass=1234&function=update_list&list_id=1102&delete_list=Y&delete_leads=Y
http://server/vicidial/non_agent_api.php?source=test&user=6666&pass=1234&function=update_list&list_id=1102&campaign_id=ASTRICON
Example responses:
ERROR: update_list USER DOES NOT HAVE PERMISSION TO UPDATE LISTS - 6666
ERROR: update_list YOU MUST USE ALL REQUIRED FIELDS - 6666|1
NOTICE: update_list LIST DOES NOT EXIST, SENDING TO add_list FUNCTION - 6666|1000
ERROR: update_list LIST DOES NOT EXIST - 6666|1000
ERROR: update_list CAMPAIGN DOES NOT EXIST, THIS IS AN OPTIONAL FIELD - 6666|TESTCIMP
ERROR: update_list SCRIPT DOES NOT EXIST, THIS IS AN OPTIONAL FIELD - 6666|TESTSCRIPT
ERROR: update_list IN-GROUP DOES NOT EXIST, THIS IS AN OPTIONAL FIELD - 6666|TEST_IN8
ERROR: update_list LIST NAME MUST BE FROM 6 TO 30 CHARACTERS, THIS IS AN OPTIONAL FIELD - 6666|test
ERROR: update_list ACTIVE MUST BE Y OR N, THIS IS AN OPTIONAL FIELD - 6666|U
ERROR: update_list OUTBOUND CID MUST BE FROM 6 TO 18 DIGITS, THIS IS AN OPTIONAL FIELD - 6666|12345
ERROR: update_list ANSWERING MACHINE MESSAGE MUST LESS THAN 101 DIGITS, THIS IS AN OPTIONAL FIELD - 6666|123...
ERROR: update_list RESET TIME IS NOT VALID, THIS IS AN OPTIONAL FIELD - 6666|012
NOTICE: update_list NO UPDATES DEFINED - 6666|
SUCCESS: update_list LIST HAS BEEN UPDATED - 6666|1101
NOTICE: update_list LEADS IN LIST HAVE BEEN RESET - 6666|1101|324
NOTICE: update_list USER DOES NOT HAVE PERMISSION TO DELETE LISTS - 6666|0
NOTICE: update_list LIST HAS BEEN DELETED - 6666|1101|1
NOTICE: update_list USER DOES NOT HAVE PERMISSION TO DELETE LEADS - 6666|0
NOTICE: update_list LEADS IN LIST HAVE BEEN DELETED - 6666|1101|324
ERROR: NO FUNCTION SPECIFIED
@@ -0,0 +1,48 @@
OUTBOUND LIST ORDERING AND MIXING 2007-05-16
** THIS NEW OPTIONAL LIST ORDERING FEATURE IS PLANNED FOR THE 2.0.4 RELEASE **
This document will outline the new optional feature within VICIDIAL outbound dialing that will allow for both list ordering and mixing while dialing outbound vicidial campaigns.
The Agent Side:
Nothing changes
The Admin Side:
The lists used in a VICIDIAL campaign will be moved to a different tab in the Campaign Modification screen to allow for easier quick modification of the lists used and their order and mixing percentage. Also, a new field will be added to vicidial_campaigns table and a new vicidial_campaigns_list_mix table will be created to store the information for list ordering and mixing:
ALTER TABLE vicidial_campaigns ADD list_order_mix VARCHAR(20) default 'DISABLED';
CREATE TABLE vicidial_campaigns_list_mix (
vcl_id VARCHAR(20) PRIMARY KEY NOT NULL,
vcl_name VARCHAR(50),
campaign_id VARCHAR(8),
list_mix_container TEXT,
mix_method ENUM('EVEN_MIX','IN_ORDER','RANDOM') default 'EVEN_MIX',
status ENUM('ACTIVE','INACTIVE') default 'INACTIVE',
index (campaign_id)
);
The list_mix field would be a container for the following parameters:
list_id|order|percent|statuses|:list_id|order|percent|statuses|:...
for example:
101|1|40| A B NA -|:102|2|25| NEW -|:103|3|30| DROP CALLBK -|:101|4|5| DROP -|
The percentages always have to add up to 100, and the lists all have to be active and set to the campaign for the order mix entry to be Activated.
campaign hopper_level must be at least 100 when in list-mix-mode
No more than 10 lists can be in a single list mix record
List orders with "2nd NEW, 3rd NEW and 4th NEW" are ignored, and only DOWN COUNT is used
The Server Side:
The AST_VDhopper.pl script will need to be changed to use the new order mix to grab and order the leads for a campaign. This will involve checking if the list_order_mix is set to DISABLED or not, and if it is then it will proceed as it currently does. If it does not, it will grab the vicidial_campaigns_list_mix record that matches the list_order_mix and parse through it's lists. Then it will do a SELECT for each of the lists and mix all of the leads together using the proper mix_method.
MORE TO COME...
@@ -0,0 +1,136 @@
PERFORMANCE TESTING OF A VICIDIAL SERVER 2008-03-31
OVERVIEW:
This document goes over the setup of a VICIDIAL/Asterisk server that you are testing, and the control Asterisk server that will be taking the calls from the serer being tested.
It is very difficult to realistically performance test a VICIDIAL server not in production because of the random-ness of call center operations.
How this process works is that multiple remote agents are activated and calls are placed from the server being tested to a control server that will take those calls and send various signals and play various audio files so that the randomness of outbound dialing is simulated.
The test server and the control server(s) need to be connected through either crossover T1 cables, SIP trunks or IAX trunks.
It is important that there are no live VICIDIAL agents or calls happening on this server when performance testing is enabled.
If you want pretty server performance graphics you need to make sure the server record has performance logging enabled.
NOTE: as of release 2.0.4.1 Performance testing extensions are loaded in the default extensions.conf and the "loop" IAX trunk is enabled for the server to send calls back to itself, making performance testing on a default install of VICIDIAL much easier.
EXAMPLE TESTING SCENARIO:
For this test below we will be placing calls out over crossover T1 cables to other Asterisk servers and we will be attempting to simulate agents logging in over SIP phones to meetme rooms on the test server. The agent connections will actually be a six(6) hour loop of on-hold-music to simulate voice(the conf.gsm file). This will be on one of the control servers so simulate true SIP phone agent connections to meetme rooms on the test server.
When setting up the remote agents record we will use 999999999999(twelve nines) as the dialplan number. This is a special flag in the remote agents handling script that will give a different session_id to each remote agent and will place a call from each of those sessions(meetme rooms) to the 999999999999 extension that should be setup to call the on-hold-music on the control server over SIP trunk.
We will also be using a special list of phone numbers to call so that we are sure that we do not place any real phone calls. The special list is available in the extras directory and is called: performance_test_leads.txt
In the control server you will need the following in your extensions.conf:
exten => _999XXXXXX1,1,Answer
exten => _999XXXXXX1,2,Wait(2)
exten => _999XXXXXX1,3,Playback(beep)
exten => _999XXXXXX1,4,Hangup
exten => _999XXXX112,1,Wait(8)
exten => _999XXXX112,2,Answer
exten => _999XXXX112,3,Playback(demo-instruct)
exten => _999XXXX112,4,Playback(demo-instruct)
exten => _999XXXX112,5,Hangup
exten => _999XXXXXX2,1,Wait(8)
exten => _999XXXXXX2,2,Answer
exten => _999XXXXXX2,3,Playback(demo-instruct)
exten => _999XXXXXX2,4,Hangup
exten => _999XXXXXX3,1,SetVar(PRI_CAUSE=1)
exten => _999XXXXXX3,2,Hangup
exten => _999XXXXXX4,1,SetVar(PRI_CAUSE=27)
exten => _999XXXXXX4,2,Hangup
exten => _999XXXXXX5,1,Wait(60)
exten => _999XXXXXX5,2,Hangup
exten => _999XXXXXX6,1,Wait(10)
exten => _999XXXXXX6,2,Answer
exten => _999XXXXXX6,3,Playback(demo-instruct)
exten => _999XXXXXX6,4,Hangup
exten => _999XXXXXX7,1,Wait(12)
exten => _999XXXXXX7,2,Answer
exten => _999XXXXXX7,3,Playback(demo-enterkeywords)
exten => _999XXXXXX7,4,Hangup
exten => _999XXXXXX8,1,SetVar(PRI_CAUSE=17)
exten => _999XXXXXX8,2,Hangup
exten => _999XXXXXX9,1,Wait(6)
exten => _999XXXXXX9,2,Answer
exten => _999XXXXXX9,3,Playback(demo-abouttotry)
exten => _999XXXXXX9,4,Hangup
exten => _999XXXXXX0,1,Wait(5)
exten => _999XXXXXX0,2,Answer
exten => _999XXXXXX0,3,Playback(vm-goodbye)
exten => _999XXXXXX0,4,Hangup
exten => 99999999999,1,Answer
exten => 99999999999,2,Playback(conf)
exten => 99999999999,3,Playback(conf)
exten => 99999999999,4,Playback(conf)
exten => 99999999999,5,Playback(conf)
exten => 99999999999,6,Playback(conf)
exten => 99999999999,7,Playback(conf)
exten => 99999999999,8,Playback(conf)
exten => 99999999999,9,Playback(conf)
exten => 99999999999,10,Playback(conf)
exten => 99999999999,11,Playback(conf)
exten => 99999999999,12,Playback(conf)
exten => 99999999999,13,Playback(conf)
exten => 99999999999,14,Hangup
In the test server you will need the following in your extensions.conf:
[globals]
TESTTRUNK = Zap/g2
TESTSIPTRUNK = SIP/VICItest:test@10.10.10.16:5060
[default]
exten => _91999NXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
exten => _91999NXXXXXX,2,Dial(${TESTTRUNK}/${EXTEN:2},,tTo)
exten => _91999NXXXXXX,3,Hangup
exten => 999999999999,1,Answer
exten => 999999999999,2,Dial(${TESTSIPTRUNK}/${EXTEN:1},,tTo)
exten => 999999999999,2,Hangup
In the sip.conf file of the test server:
register => ASTtest2:test@10.10.10.16:5060
[VICItest]
disallow=all
allow=ulaw
type=friend
username=VICItest
secret=test
host=dynamic
dtmfmode=inband
defaultip=10.10.10.16
qualify=1000
In the sip.conf file of the control server:
[VICItest]
disallow=all
allow=ulaw
type=friend
username=VICItest
secret=test
host=dynamic
dtmfmode=inband
defaultip=10.10.10.16
qualify=1000
@@ -0,0 +1,132 @@
PREDICTIVE Summary and Overview 2006-08-29
*** PREDICTIVE OUTBOUND CALLING FUNCTIONALITY WAS ADDED IN THE 2.0.1 RELEASE ***
This will outline the methods used to predictively dial outbound calling
campaigns in VICIDIAL with the ADAPT dial methods. This is a description of the
first versions of the Predictive/Adaptive dialing algorithms used in VICIDIAL.
As the need arises we will create more versions of different algorithms in the
future.
The gathering of data to analyze:
In order to properly analyze calling trends and adapt to the current list that
is being called we need to first gather a lot of data to analyze.
The first set of data we want to gather is the recent queue and agent statistics
for each campaign. This information is gathered by the AST_VDauto_dial.pl script
as it runs through each loop every 2.5-3.0 seconds. This data is used only for
Blended CLOSER campaigns doing Predictive dialing and for the timeonVDADall
realtime campaign reports. The data gathered in this script are all averages of
the last 15 and 60 seconds of agent and queue activity:
1. The average number of agents that are logged into the campaign across
one minute
2. The average number of calls waiting to be transferred to an agent
across one minute
3. The average number of agents waiting for calls across one minute
4. The difference between the waiting calls and ready agents across one
minute
This number if positive means that on average more agents were
waiting for calls than calls waiting for agents in the last
minute for that campaign.
The second set of data to gather is dropped call information across several
intervals as well as faster agent and queue call statistics. This information
will be gathered by the actual AST_VDadapt.pl script that will also be the
script actually changing the dial level when the predictive/adaptive dial method
is activated.
Once a second this script will gather:
1. The average number of agents that are logged into the campaign for
the last 15 seconds
2. The average number of calls waiting to be transferred to an agent for
the last 15 seconds
3. The average number of agents waiting for calls for the last 15
seconds
4. The difference between the waiting calls and ready agents for the
last 15 seconds
Once every 15 seconds this script will:
1. Calculate the average dial level differential for the last 15 seconds
2. Apply the campaign's adaptive_dl_diff_target
3. Apply the campaign's adaptive_intensity setting
4. Calculate the new desired dial_level
5. Check the drop rate cap method(HARD_LIMIT, TAPERED, AVERAGE)
6. If drop rate is over the limit the proper equation is used to figure
out new dial_level difference.
7. Change the dial level for the campaign to the new suggested dial
level
Once a minute this script will gather:
1. Total drops and total calls for the campaign since midnight
2. Total drops and total calls for the campaign in the past hour
3. Total drops and total calls for the campaign in the past half hour
4. Total drops and total calls for the campaign in the past five minutes
5. Total drops and total calls for the campaign in the past one minute
Also, the drop percentage is calculated and stored in the
vicidial_campaign_stats table.
The settings in the campaign detail screen:
Dial Method - This field is the way to define how dialing is to take place. If
MANUAL then the auto_dial_level will be locked at 0 unless Dial Method is
changed. If RATIO then the normal dialing a number of lines for Active agents.
ADAPT_HARD_LIMIT will dial predictively up to the dropped percentage and then
not allow aggressive dialing once the drop limit is reached until the percentage
goes down again. ADAPT_TAPERED allows for running over the dropped percentage in
the first half of the shift(as defined by call_time selected for campaign) and
gets more strict as the shift goes on. ADAPT_AVERAGE tries to maintain an
average or the dropped percentage not imposing hard limits as aggressively as
the other two methods.
Auto Dial Level - This is where you set how many lines VICIDIAL should use per
active agent. zero 0 means auto dialing is off and the agents will click to dial
each number. Otherwise VICIDIAL will keep dialing lines equal to active agents
multiplied by the dial level to arrive at how many lines this campaign on each
server should allow.
Available Only Tally - This field if set to Y will leave out INCALL and QUEUE
status agents when calculating the number of calls to dial when not in MANUAL
dial mode. Default is N.
Drop Percentage Limit - This field is where you set the limit of the percentage
of dropped calls you would like while using an adaptive-predictive dial method,
not MANUAL or RATIO. Dropped calls percentage is measured out of the total
number of Answered calls for the campaign for the day.
Maximum Adapt Dial Level - This field is where you set the limit of the limit to
the numbr of lines you would like dialed per agent while using an
adaptive-predictive dial method, not MANUAL or RATIO. This number can be higher
than the Auto Dial Level if your hardware will support it. Value must be a
positive number greater than one and can have decimal places Default 3.0.
Latest Server Time - This field is only used by the ADAPT_TAPERED dial method.
You should enter in the hour and minute that you will stop calling on this
campaign, 2100 would mean that you will stop dialing this campaign at 9PM server
time. This allows the Tapered algorithm to decide how aggressively to dial by
how long you have until you will be finished calling.
Adapt Intensity Modifier - This field is used to adjust the predictive intensity
either higher or lower. The higher a positive number you select, the greater the
dialer will increase the call pacing when it goes up and the slower the dialer
will decrease the call pacing when it goes down. The lower the negative number
you select here, the slower the dialer will increase the call pacing and the
faster the dialer will lower the call pacing when it goes down. Default is 0.
This field is not used by the MANUAL or RATIO dial methods.
Dial Level Difference Target - This field is used to define whether you want to
target having a specific number of agents waiting for calls or calls waiting for
agents. For example if you would always like to have on average one agent free
to take calls immediately you would set this to -1, if you would like to target
always having one call on hold waiting for an agent you would set this to 1.
Default is 0. This field is not used by the MANUAL or RATIO dial methods.
To use adaptive dialing you must have the ADMIN keepaliveAST_VDadapt.pl script
in your crontab running every minute:
### keepalive script for VICIDIAL predictive script
* * * * * /usr/share/astguiclient/ADMIN_keepalive_AST_VDadapt.pl
NOTE: With Predictive dialing, the dial_level will never drop below 1.0.
@@ -0,0 +1,256 @@
QC(Quality Control) process flow 2008-01-03
** THIS QC FUNCTIONALITY PROSESS IS PLANNED FOR THE 2.0.5 RELEASE AND IS CURRENTLY IN DEVELOPMENT **
This will outline the process I have thought through for adding a Quality Assurance(QA) or Quality Control(QC) process to the VICIDIAL system. As the needs have changed for sponsor client and VICIDIAL has evolved since this functionality was first put into the planning stages, there have been several changes to how the QC process is going to be built. The objective is to add the following QC features to make VICIDIAL a more well-rounded product:
- ability to define which statuses are to be able to be QCd per campaign and inbound group(queue)
- ability to give agents permission to QC records for their allowable campaigns/inbound groups
- ability to log all access and changes to QCd records
- creation of some basic reports on QC activity
The back-end process will work like this:
- ADMIN_keepalive_ALL.pl script will look for the 'Q' in the keepalive definition in /etc/astguiclient.conf file. If it is set, it will trigger a script (QC_gather_records.pl) to gather the QC records every five minutes(with a 15 second delay) since the last QC gathering as defined in the system_settings table qc_last_pull_time field(which is populated with four-hours-before the START time of the last QC-pull run to make sure to catch all potential long calls that may have ended). The time interval for this might be made configurable.
- There will also be an optional method of pulling QC records available to the QC managers that enables them to specify a date range to pull and insert records
- Selected records from the vicidial_list table (keyed on the the vicidial_log and vicidial_closer_log tables) will be taken and inserted into the vicidial_qc_list table.
- QC agents are then able to run their process starting with the earliest records for their selected campaign/inbound groups
- After QC agents have PASSed, FINISHed and COMMITted the QC records, then they can be exported
Agent-side scripts:
- qc.php - the screen that agents log in to
- qc_query.php - the data processing script that handles most of the AJAX queries and IFRAME displays from qc.php
The QC agent will login to the new qc.php screen within the agc web directory. They will then have a screen very similar to the vicidial.php login screen(but in a different color) that will have a user/pass to fill in. Then when they login the QC agents with level of 1-3 will see a green screen similar to the vicidial.php inbound(CLOSER-type) screen that will show them their allowable qc inbound-groups and campaigns. The agent will then choose which in-groups and campaigns that they want to QC the records for and then they will submit and they will be logged-in to the QC system. QC agents with a qc_level of 4-5 can select to review first level reccords, review all 2nd level records, review only 2nd level changed-status or review 2nd level same-status records. QC agents with 6-7 qc_level can also have the option of entering a management screen showing more information on the QC system including committing QC records and links to QC reports.
Upon login, they will be able to see the count of QC-able records and they can click on a link to bring up the next record to be QCd.
Upon clicking on a link, the qc.php application will insert a record into the vicidial_qc_log to keep track of changes and other information on the qc record session. The customer and original call data will remain unaltered in the vicidial_qc_list table.
The SCRIPTS tab and web form will both function exactly as they do in the vicidial.php application, with the exception that there will be added qc_web_form_address and qc_script options for both campaigns and inbound groups. There will also be an option to have any of these launched upon a new record appearing on the QC agent's screen.
The qc.php user interface will be using AJAX as a method to bring up records and keep track of QC-agent activity and performance.
An optional element is for a small audio frame be opened with each new customer record that will have an audio recording of the call that the QC agent can listen to. At this point in time, the best candidate for this is the Flourish Flash-based application(http://flourishplayer.sourceforge.net/) It is open source under a BSD-like license and is based on Adobe Flash, which currently seems to be much more lightweight and provides a much lower barrier to entry on most platforms than JAVA does.
Each qc_user_level will have different permissions for the qc system:
1- modify nothing
2- modify nothing but status
3- modify everything
4- can check records of other QC agents
5- can view stats on qc system and unlock locked records from first level QC agents
6- can view finished and non-committed records and alter them and unlock locked records from first and second level QC agents
7- Manager level (can do anything including delete QC records)
The the QC agent roles:
FIRST - first level review
SECOND_ALL - second level review all records
SECOND_CHANGED - second level review only changed-status records
SECOND_PASSED - second level review only unchanged-status records
THIRD - third level review and commit/clear
MANAGER - manager level actions
The qc_stage is a record status within QC that tells what is going on with the record:
NEW - record has never been QCd
LOCK_1 - a QC agent is reviewing the record
PASS - QC agent has passed the record
LOCK_2 - a QC agent is reviewing the record for possible finishing
FINISH - record is ready to be processed
COMMIT - QC record is committed to the system and cannot be modified by anyone
DEAD - QC record is old and present for logs only, newer record has taken it's place
The Database Changes:
!!! IMPORTANT !!!
THESE ARE FOR REFERENCE ONLY, DO NOT RUN THEM!!!
# This table contains the live session information for qc_agents
CREATE TABLE qc_agent_sessions (
qc_session_id INT(9) UNSIGNED PRIMARY KEY NOT NULL,
user VARCHAR(20),
qc_user_level INT(2) default '0',
qc_role VARCHAR(20),
status ENUM('READY','INQC','PAUSED') default 'PAUSED',
qc_id INT(9) UNSIGNED NOT NULL,
lead_id INT(9) UNSIGNED NOT NULL,
selected_campaigns_groups TEXT,
qc_records_today SMALLINT(5) UNSIGNED default '0',
login_time DATETIME,
last_action_time DATETIME,
index (user),
index (last_action_time)
);
# This table contains the stats information for qc_agents for today
CREATE TABLE qc_agent_stats (
user VARCHAR(20),
campaign_group_id VARCHAR(20),
qc_records_today SMALLINT(5) UNSIGNED default '0',
last_record_time DATETIME,
last_record_finish DATETIME,
index (user),
index (campaign_group_id)
);
# This table contains the log information for qc_agent logins
CREATE TABLE vicidial_user_qc_log (
user VARCHAR(20),
event_date DATETIME,
selected_campaigns_groups TEXT,
index (user),
index (event_date)
);
# For ability to restrict statuses by user_level per campaign/in-group
CREATE TABLE qc_allowed_statuses (
status VARCHAR(6) PRIMARY KEY NOT NULL,
qc_user_level INT(2) default '0',
campaign_group_id VARCHAR(20)
);
# This table contains the original lead and log information before changes
CREATE TABLE vicidial_qc_list (
qc_id INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
qc_import_date DATETIME,
qc_stage VARCHAR(6) default 'NEW',
call_date DATETIME,
vicidial_id VARCHAR(20) UNIQUE NOT NULL,
campaign_group_id VARCHAR(20),
lead_id INT(9) UNSIGNED NOT NULL,
list_id BIGINT(14) UNSIGNED,
length_in_sec SMALLINT(5) UNSIGNED default '0',
status VARCHAR(6),
call_type VARCHAR(20),
term_reason ENUM('CALLER','AGENT','QUEUETIMEOUT','ABANDON','AFTERHOURS','NONE') default 'NONE',
modify_date TIMESTAMP,
qc_user VARCHAR(20),
user VARCHAR(20),
user_group VARCHAR(20),
fronter VARCHAR(20),
vendor_lead_code VARCHAR(20),
source_id VARCHAR(50),
phone_code VARCHAR(10),
phone_number VARCHAR(12),
title VARCHAR(4),
first_name VARCHAR(30),
middle_initial VARCHAR(1),
last_name VARCHAR(30),
address1 VARCHAR(100),
address2 VARCHAR(100),
address3 VARCHAR(100),
city VARCHAR(50),
state VARCHAR(2),
province VARCHAR(50),
postal_code VARCHAR(10),
country_code VARCHAR(3),
gender ENUM('M','F','U') default 'U',
date_of_birth DATE,
alt_phone VARCHAR(12),
email VARCHAR(70),
security_phrase VARCHAR(100),
comments VARCHAR(255),
index (vicidial_id),
index (lead_id),
index (phone_number)
);
# This table contains the updated QC records
CREATE TABLE vicidial_qc_log (
qc_log_id INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
qc_id INT(9) UNSIGNED NOT NULL,
qc_stage VARCHAR(6),
modify_date TIMESTAMP,
qc_user VARCHAR(20),
qc_status VARCHAR(6),
qc_code VARCHAR(8),
qc_date DATETIME,
qc_length_in_sec SMALLINT(5) UNSIGNED default '0',
qc_comments TEXT,
qc_altered ENUM('0','1') default '0',
status VARCHAR(6),
vendor_lead_code VARCHAR(20),
phone_code VARCHAR(10),
phone_number VARCHAR(12),
title VARCHAR(4),
first_name VARCHAR(30),
middle_initial VARCHAR(1),
last_name VARCHAR(30),
address1 VARCHAR(100),
address2 VARCHAR(100),
address3 VARCHAR(100),
city VARCHAR(50),
state VARCHAR(2),
province VARCHAR(50),
postal_code VARCHAR(10),
country_code VARCHAR(3),
gender ENUM('M','F','U') default 'U',
date_of_birth DATE,
alt_phone VARCHAR(12),
email VARCHAR(70),
security_phrase VARCHAR(100),
comments VARCHAR(255),
index (qc_id),
index (phone_number),
index (qc_stage)
);
# Changes committed to upgrade sql file:
# For the inbound groups table, some fields will need to be added to the vicidial_campaigns table:
ALTER TABLE vicidial_inbound_groups ADD qc_enabled ENUM('Y','N') default 'N';
ALTER TABLE vicidial_inbound_groups ADD qc_statuses TEXT;
ALTER TABLE vicidial_inbound_groups ADD qc_shift_id VARCHAR(20) default '24HRMIDNIGHT';
ALTER TABLE vicidial_inbound_groups ADD qc_get_record_launch ENUM('NONE','SCRIPT','WEBFORM','QCSCRIPT','QCWEBFORM') default 'NONE';
ALTER TABLE vicidial_inbound_groups ADD qc_show_recording ENUM('Y','N') default 'Y';
ALTER TABLE vicidial_inbound_groups ADD qc_web_form_address VARCHAR(255);
ALTER TABLE vicidial_inbound_groups ADD qc_script VARCHAR(10);
# Alter some earlier defined fields and populate with default values
ALTER TABLE vicidial_campaigns CHANGE campaign_shift_start_time qc_shift_id VARCHAR(20) default '24HRMIDNIGHT';
ALTER TABLE vicidial_campaigns CHANGE campaign_shift_length qc_get_record_launch ENUM('NONE','SCRIPT','WEBFORM','QCSCRIPT','QCWEBFORM') default 'NONE';
ALTER TABLE vicidial_campaigns CHANGE campaign_day_start_time qc_show_recording ENUM('Y','N') default 'Y';
UPDATE vicidial_campaigns SET qc_shift_id='24HRMIDNIGHT';
UPDATE vicidial_campaigns SET qc_get_record_launch='NONE';
UPDATE vicidial_campaigns SET qc_show_recording='Y';
ALTER TABLE system_settings ADD qc_last_pull_time DATETIME;
# qc codes to be used for statistics
CREATE TABLE vicidial_qc_codes (
code VARCHAR(8) PRIMARY KEY NOT NULL,
code_name VARCHAR(30)
);
# For the campaigns table, some fields will need to be added to the vicidial_campaigns table:
ALTER TABLE vicidial_campaigns ADD qc_enabled ENUM('Y','N') default 'N';
ALTER TABLE vicidial_campaigns ADD qc_statuses TEXT;
ALTER TABLE vicidial_campaigns ADD qc_lists TEXT;
ALTER TABLE vicidial_campaigns ADD campaign_shift_start_time VARCHAR(4) default '0900';
ALTER TABLE vicidial_campaigns ADD campaign_shift_length VARCHAR(5) default '16:00';
ALTER TABLE vicidial_campaigns ADD campaign_day_start_time VARCHAR(4) default '0100';
ALTER TABLE vicidial_campaigns ADD qc_web_form_address VARCHAR(255);
ALTER TABLE vicidial_campaigns ADD qc_script VARCHAR(10);
# For the in-groups/campaigns QC permissions, some fields will need to be added to the vicidial_user_groups table:
ALTER TABLE vicidial_user_groups ADD qc_allowed_campaigns TEXT;
ALTER TABLE vicidial_user_groups ADD qc_allowed_inbound_groups TEXT;
# For the user QC permissions, some fields will need to be added to the vicidial_users table:
ALTER TABLE vicidial_users ADD qc_enabled ENUM('1','0') default '0';
ALTER TABLE vicidial_users ADD qc_user_level INT(2) default '1';
ALTER TABLE vicidial_users ADD qc_pass ENUM('1','0') default '0';
ALTER TABLE vicidial_users ADD qc_finish ENUM('1','0') default '0';
ALTER TABLE vicidial_users ADD qc_commit ENUM('1','0') default '0';
@@ -0,0 +1,455 @@
VICIDIAL and QueueMetrics
queue_log logging was added to VICIDIAL outbound auto calling as an option in the 2.0.3 release, and for inbound in the 2.0.4 release.
This document goes over the features and needed changes made to VICIDIAL to enable it to insert activity records into the queue_log and other tables in MySQL that QueueMetrics uses for it's statistical analysis and reports. This document should not be taken as a HOWTO for proper installation steps to get QueueMetrics working.
QueueMetrics is a closed-source, commercial product written by Loway Research in Italy/Switzerland. The writers of VICIDIAL do not support or warranty QueueMetrics or it's functionality with VICIDIAL in any way.
This feature was added to the package at the request of several users of VICIDIAL and was achieved with some help from the creators of QueueMetrics(although all VICIDIAL code changes were done entirely by Matt Florell).
This feature is functional on outbound manual dialing, auto dialing and inbound call handling as of 2008-06-30(SVN trunk 2.0.5).
Another very important issue to note is that just like with VICIDIAL on multi-server systems, if QueueMetrics data is being generated on a multi-server system the data will be corrupted if all of the servers are not on the same time. I strongly recommend getting ntp working properly on all servers in a VICIDIAL or QueueMetrics server cluster.
To be able to view stats for inbound and outbound calls properly you need to add each one individually in QueueMetrics "queues" and properly set whether each one is inbound or outbound. After that you can create a combined queue-alias with all of the campaigns and in-groups in it and it will tell you correctly the number of inbound and outbound calls.
As of 2008-10-30, several validation and correction functions were added to the AST_cleanup_agent_log.pl script that is supposed to run every hour. These functions should clean up any queue_log errors that appear and cause QueueMetrics to display incorrect call totals.
As of 2009-05-30, live montoring and playback of archived recordings through the QueueMetrics interface was added. To use this you must have the audio.server, audio.liveserver and default.audioRpcServer variables set properly in the configuration.properties file as specified toward the bottom of this document. The live monitoring asks for an extension to send the call to, this is an extension dialed on the active voicemail server as defined in the system settings. If there is no active voicemail defined then the live monitor will place the call to the extension on the server that the agent is on.
As of 2009-11-23, DID and IVR logging through QueueMetrics queue_log is now part of the code. DID entries for the queue will be counted only for calls that actually enter the queue or are sent to an agent through a ViciDial in-group. For IVR entries, only the last Call Menu will be counted in the QueueMetrics reports.
As of 2010-03-09, queuemetrics_loginout system settings option was added to allow for slightly different logging of logins and logouts. STANDARD will use standard AGENTLOGIN AGENTLOGOFF, CALLBACK will use AGENTCALLBACKLOGIN and AGENTCALLBACKLOGOFF that QM will parse differently.
NOTE: having a large number of calls in queue can lead to significant load issues on the QM database server
Entries you should have in your crontab on one server:
### fix the vicidial_agent_log once every hour and the full day run at night
33 * * * * /usr/share/astguiclient/AST_cleanup_agent_log.pl
50 0 * * * /usr/share/astguiclient/AST_cleanup_agent_log.pl --last-24hours
*/5 * * * * /usr/share/astguiclient/AST_cleanup_agent_log.pl --only-qm-live-call-check
1 1 * * * /usr/share/astguiclient/Vtiger_optimize_all_tables.pl --quiet
Here is a short summary of the needed steps to install QueueMetrics on your system:
NOTE: further down in this document are updated installation instructions and instructions for installing on OpenSuSE 11.1.
First, get Sun Java SDK/JRE and install on your system.
NOTE: the GCJ java JRE available on most RedHat/Feroda/CentOS systems WILL NOT WORK
download and install the Java jdk-1_5_0_11-linux-i586-rpm.bin from:
http://www.sun.com/software/communitysource/j2se/java2/index.xml
cd /usr/local
chmod 0777 jdk-1_5_0_11-linux-i586-rpm.bin
./jdk-1_5_0_11-linux-i586-rpm.bin
ls -l
rpm -i jdk-1_5_0_11-linux-i586.rpm
wget http://www.mirrorgeek.com/apache.org/tomcat/tomcat-5/v5.5.20/bin/apache-tomcat-5.5.20.tar.gz
gunzip apache-tomcat-5.5.20.tar.gz
tar xvf apache-tomcat-5.5.20.tar
ln -s apache-tomcat-5.5.20 tomcat
cd apache-tomcat-5.5.20
* You may need to change all permissions to jar and sh files on /usr/local/apache-tomcat-6.0.18/bin to 0777
JAVA_HOME=/usr/java/jdk1.5.0_11/
JAVA_OPTS="-Xms256M -Xmx512M"
JRE_HOME=/usr/java/jdk1.5.0_11/jre
or
JRE_HOME=/usr/java/jre1.6.0/
JAVA_HOME=/usr/java/
JAVA_OPTS="-Xms256M -Xmx512M"
export JAVA_HOME
export JAVA_OPTS
export JRE_HOME
/usr/local/tomcat/bin/startup.sh
At this point you should go here on your web browser to see if the tomcat installation went well:
http://ip-address:8080/
If it did, then you want to add the following lines to your /etc/rc.d/rc.local file so that tomcat will start up on boot:
JAVA_HOME=/usr/java/jdk1.5.0_11/
JAVA_OPTS="-Xms256M -Xmx512M"
JRE_HOME=/usr/java/jdk1.5.0_11/jre
export JAVA_HOME
export JAVA_OPTS
export JRE_HOME
/usr/local/tomcat/bin/startup.sh
cd /usr/local
*** download QueueMetrics and place it in /usr/local ***
gunzip QueueMetrics-1.1.tar.gz
tar xvf QueueMetrics-1.1.tar
mv queuemetrics-1.1 /usr/local/tomcat/webapps/qm
cd /usr/local/tomcat/webapps/qm/WEB_INF
wget http://mysql.mirrors.pair.com/Downloads/Connector-J/mysql-connector-java-3.0.10-stable.tar.gz
gunzip mysql-connector-java-3.0.10-stable.tar.gz
tar xvf mysql-connector-java-3.0.10-stable.tar
cp mysql-connector-java-3.0.10-stable/mysql-connector-java-3.0.10-stable-bin.jar ./lib/
At this point you should go here on your web browser to see if the tomcat installation went well:
http://ip-address:8080/qm
If you see a QueueMetrics page(probably with many errors), then installation went well up to this point.
You now need to add the database tables, configure the web.xml file and configuration.properties file for your system.
Now to the database side of things.
First, give permissions to your user:
GRANT ALL PRIVILEGES ON queuemetrics.* TO qm@'localhost' IDENTIFIED BY 'qm';
GRANT ALL PRIVILEGES ON queuemetrics.* TO qm@'%' IDENTIFIED BY 'qm';
Second, the queue_log table:
mysql> describe queue_log;
+------------------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------+------------------+------+-----+---------+-------+
| partition | char(20) | NO | MUL | NULL | |
| time_id | int(11) unsigned | NO | MUL | 0 | |
| call_id | char(30) | NO | MUL | NULL | |
| queue | char(30) | NO | | NULL | |
| agent | char(30) | NO | | NULL | |
| verb | char(30) | NO | | NULL | |
| data1 | char(30) | NO | | NULL | |
| data2 | char(30) | NO | | NULL | |
| data3 | char(30) | NO | | NULL | |
| data4 | char(30) | NO | | NULL | |
| serverid | varchar(10) | NO | | 0 | |
| fileid | int(10) unsigned | NO | | NULL | |
| recordid | int(10) unsigned | NO | | NULL | |
| unique_row_count | int(11) | NO | | NULL | |
+------------------+------------------+------+-----+---------+-------+
Use the following query to create a queue_log table in your asterisk database
to gather queue_log entries without doing a full QueueMetrics install:
CREATE TABLE queue_log (
partition VARCHAR(20) NOT NULL,
time_id INT(11) UNSIGNED NOT NULL default '0',
call_id VARCHAR(30) NOT NULL,
queue VARCHAR(30) NOT NULL,
agent VARCHAR(30) NOT NULL,
verb VARCHAR(30) NOT NULL,
data1 VARCHAR(30) NOT NULL,
data2 VARCHAR(30) NOT NULL,
data3 VARCHAR(30) NOT NULL,
data4 VARCHAR(30) NOT NULL,
serverid VARCHAR(10) NOT NULL default '0',
fileid INT(10) UNSIGNED,
recordid INT(10) UNSIGNED,
unique_row_count INT(10) UNSIGNED NOT NULL,
index(time_id),
index(call_id)
);
# NOTE: by default QueueMetrics does not index the time_id and call_id field. We strongly recommend you add these indexes:
CREATE INDEX time_id on queue_log(time_id);
CREATE INDEX call_id on queue_log(call_id);
partition: set to "P01" for the first partition, should match up with configuration.properties presets
time_id: epoch, unixtime (seconds since 1970-01-01 00:00:00) [1170345603]
call_id: Asterisk unique prepended with server_id field [1-1170345497.30369]
For VICIDIAL we will use the CallerIDname of the call to
queue: the queue that call came into (we will use the campaign_id here)
agent: we will use the user ID prepended by "agent/" [agent/6666]
verbs:
system actions - used by the AST_VDadapt.pl script when starting up
QUEUESTART
agent actions - used by vicidial.php, vdc_db_query.php and AST_VDremote_agents.pl
AGENTLOGIN(agent phone channel)
AGENTLOGOFF(agent phone channel|logintime)
AGENTCALLBACKLOGIN(agent phone channel)
AGENTCALLBACKLOGOFF(agent phone channel|logintime)
PAUSEALL
PAUSE
UNPAUSEALL
UNPAUSE
PAUSEREASON
ADDMEMBER2
REMOVEMEMBER
CALLERONHOLD
CALLEROFFHOLD
call actions before going to agent - used by agi-VDAD_ALL_inbound/outbound scripts
ENTERQUEUE(url|callerid)
CALLOUTBOUND(url|callerid)
CONNECT(holdtime)
EXITWITHTIMEOUT(position)
EXITWITHKEY(key|position)
TRANSFER(extension|context|holdtime|calltime)
INFO([IVR or DID]|[context or DID])
call actions before going to agent - used by AST_VDauto_dial.pl
ABANDON(position|origposition|waittime)
call actions after going to agent - used by vicidial.php, vdc_db_query.php and FastAGI_log.pl
COMPLETEAGENT(holdtime|calltime|origposition)
COMPLETECALLER(holdtime|calltime|origposition)
CALLSTATUS(status)
not used in vicidial -
EXITEMPTY(position|origposition|waittime)
AGENTDUMP
data1: call termination codes, DID, IVR context, hold reason, on-hold length in seconds, addmember2 extension
data2: callerID or number called(sometimes prepended by DNIS) [3101-9015556189], off-hold reason
NOTE: the queuemetrics_eq_prepend field allows you to specify what
vicidial_list field you would like to prefend to the phone number on
ENTERQUEUE/CALLOUTBOUND events
data3: optional qm_dispo_code variable for CALLSTATUS verbs, submitted through the agent-API external_status function
data4: ??
serverid: number of the server the call came from [for VICIDIAL use the database system_settings.queuemetrics_log_id field]
### For documentation ONLY, these fields should already exist:
On the vicidial database side of things, we will add the following columns to the system_settings table:
enable_queuemetrics_logging ENUM('0','1') default '0',
queuemetrics_server_ip VARCHAR(15),
queuemetrics_dbname VARCHAR(50),
queuemetrics_login VARCHAR(50),
queuemetrics_pass VARCHAR(50),
queuemetrics_url VARCHAR(255),
queuemetrics_log_id VARCHAR(10) default 'VIC'
queuemetrics_eq_prepend VARCHAR(255) default 'NONE'
Instructions for setting up the XML RPC recording lookup php script:
Install PEAR XML_RPC libraries:
pear install XML_RPC-1.5.1
updated install instructions (2009-05-25):
wget http://www.mirrorgeek.com/apache.org/tomcat/tomcat-6/v6.0.18/bin/apache-tomcat-6.0.18.tar.gz
gunzip apache-tomcat-6.0.18.tar.gz
tar xvf apache-tomcat-6.0.18.tar
ln -s apache-tomcat-6.0.18 tomcat
cd apache-tomcat-6.0.18
/usr/local/tomcat/bin/startup.sh
At this point you should go here on your web browser to see if the tomcat installation went well:
http://192.168.1.100:8080/
If it did, then you want to add the following lines to your /etc/rc.d/rc.local file so that tomcat will start up on boot:
/usr/local/tomcat/bin/startup.sh
cd /usr/local
wget http://queuemetrics.com/download/QueueMetrics-1.5.3-trial.tar.gz
gunzip QueueMetrics-1.5.3-trial.tar.gz
tar xvf QueueMetrics-1.5.3-trial.tar
mv queuemetrics-1.5.3 /usr/local/tomcat/webapps/QM
cd /usr/local/tomcat/webapps/QM/WEB-INF
wget http://mirror.services.wisc.edu/mysql/Downloads/Connector-J/mysql-connector-java-3.0.10-stable.tar.gz
gunzip mysql-connector-java-3.0.10-stable.tar.gz
tar xvf mysql-connector-java-3.0.10-stable.tar
cp mysql-connector-java-3.0.10-stable/mysql-connector-java-3.0.10-stable-bin.jar ./lib/
At this point you should go here on your web browser to see if the tomcat installation went well:
http://ip-address:8080/QM
If you see a QueueMetrics page(probably with many errors), then installation went well up to this point.
You now need to add the database tables, configure the web.xml file and configuration.properties file for your system.
mysql
CREATE DATABASE queuemetrics;
GRANT ALL PRIVILEGES ON queuemetrics.* TO 'queuemetrics'@'localhost' IDENTIFIED BY 'javadude';
GRANT ALL PRIVILEGES ON queuemetrics.* TO queuemetrics@localhost IDENTIFIED BY 'javadude';
GRANT ALL PRIVILEGES ON queuemetrics.* TO queuemetrics@'%' IDENTIFIED BY 'javadude';
mysql --user=queuemetrics --password=javadude queuemetrics < /usr/local/apache-tomcat-6.0.18/webapps/QM/WEB-INF/README/queuemetrics_sample.sql
change the following in the configuration.properties file:
# This is the default queue log file.
default.queue_log_file=sql:P01
# audio recording lookup link, change the audioRpcServer to point to your server
audio.server=it.loway.app.queuemetrics.callListen.listeners.ClassicXmlRpcRecordings
audio.liveserver=it.loway.app.queuemetrics.callListen.RTlisteners.ClassicXmlRpcListenerRT
default.audioRpcServer=http://10.0.0.4/vicidial/xml_rpc_audio_server_vicidial.php
change the following in the web.xml file(change server IP):
<param-value>jdbc:mysql://10.0.0.4/queuemetrics?autoReconnect=true&amp;zeroDateTimeBehavior=convertToNull&amp;jdbcCompliantTruncation=false&amp;us
er=queuemetrics&amp;password=javadude</param-value>
</init-param>
# NOTE: by default QueueMetrics does not index the time_id and call_id field. We strongly recommend you add these indexes:
mysql queuemetrics
CREATE INDEX time_id on queue_log(time_id);
CREATE INDEX call_id on queue_log(call_id);
OpenSuSE 11.1 installation instructions:
How to install Queue Metrics on OpenSuSE v.11.1 (32 or 64 bit) with a system that was installed with the ViciDial Group install script. Run them in this order to avoid funky java script bugs :D
1) Type: zypper in tomcat6 tomcat6-webapps
- Say yes to install, and say yes to license
2) Type: zypper in java-1_6_0-sun
- Say yes to install, and say yes to license
3) cd /usr/src
4) wget http://queuemetrics.com/download/QueueMetrics-1.6.0.1-trial.tar.gz
5) mkdir tars (incase it doesn't exist)
6) tar xvfz QueueMetrics-1.6.0.1-trial.tar.gz
7) mv QueueMetrics-1.6.0.1-trial.tar.gz ./tars/
8) mkdir /srv/tomcat6/webapps/QM
9) cp -r queuemetrics-1.6.0.1/* /srv/tomcat6/webapps/QM/
10) zypper in mysql-connector-java
11) cp /usr/share/java/mysql-connector-java.jar /srv/tomcat6/webapps/QM/WEB-INF/lib/
12) chkconfig tomcat6 on
13) mysql --execute="CREATE DATABASE queuemetrics;"
14) mysql queuemetrics --execute="GRANT ALL PRIVILEGES ON queuemetrics.* TO 'queuemetrics'@'localhost' IDENTIFIED BY 'javadude';"
15) mysql queuemetrics --execute="GRANT ALL PRIVILEGES ON queuemetrics.* TO queuemetrics@localhost IDENTIFIED BY 'javadude';"
16) mysql queuemetrics --execute="GRANT ALL PRIVILEGES ON queuemetrics.* TO queuemetrics@'%' IDENTIFIED BY 'javadude';"
17) mysql queuemetrics --user=queuemetrics --password=javadude < /srv/tomcat6/webapps/QM/WEB-INF/README/queuemetrics_sample.sql
18) mysql queuemetrics --execute="CREATE INDEX time_id on queue_log(time_id);"
19) mysql queuemetrics --execute="CREATE INDEX call_id on queue_log(call_id);"
20) rctomcat6 start
21) Edit /srv/tomcat6/webapps/QM/WEB-INF/configuration.properties and change the entry to the following:
- # This is the default queue log file.
- default.queue_log_file=sql:P01
22) Edit /srv/tomcat6/webapps/QM/WEB-INF/web.xml and change the IP address of the following entry:
- <param-value>jdbc:mysql://10.0.0.4/queuemetrics?autoReconnect=true&amp;zeroDateTimeBehavior=convertToNull&amp;jdbcCompliantTruncation=false&amp;user=queuemetrics&amp;password=javadude</param-value>
23) Go to http://<ip-addr>:8080/QM and it should tell you the schema is old, just click next or yes to everything and have fun
24) If nothing shows up, you may need to go into 'yast' and change the firewall settings:
Security --> Firewall settings, go to allowed services, type "alt-d" and add 8080 as a new port, then save and exit
If you want to use the ADMIN_archive_log_tables.pl script with the --queue-log option you will need to run the following query in the QM database:
CREATE TABLE queue_log_archive LIKE queue_log;
Example queue_log output generated by ViciDial:
+-----------+------------+----------------------+----------+------------+-----------------+-------------+------------+-------+-------+----------+------------------+
| partition | time_id | call_id | queue | agent | verb | data1 | data2 | data3 | data4 | serverid | unique_row_count |
+-----------+------------+----------------------+----------+------------+-----------------+-------------+------------+-------+-------+----------+------------------+
| P01 | 1243280596 | NONE | NONE | Agent/6666 | AGENTLOGIN | 6666@agents | | | | VIC | 1 |
| P01 | 1243280596 | NONE | NONE | Agent/6666 | PAUSEALL | NULL | | | | VIC | 2 |
| P01 | 1243280603 | NONE | NONE | Agent/6666 | UNPAUSEALL | NULL | | | | VIC | 1 |
| P01 | 1243280614 | V0525154325000035377 | TESTCAMP | NONE | ENTERQUEUE | NULL | 9998888112 | | | VIC | 1 |
| P01 | 1243280614 | V0525154325000035377 | TESTCAMP | Agent/6666 | CONNECT | 0 | | | | VIC | 2 |
| P01 | 1243280619 | V0525154328000213841 | TESTCAMP | NONE | ENTERQUEUE | NULL | 9999000016 | | | VIC | 1 |
| P01 | 1243280625 | V0525154328000213841 | TESTCAMP | NONE | EXITWITHTIMEOUT | 1 | | | | VIC | 1 |
| P01 | 1243280625 | V0525154328000213841 | TESTCAMP | NONE | CALLSTATUS | DROP | | | | VIC | 2 |
| P01 | 1243280626 | Y0525154346000213841 | TEST_IN | NONE | ENTERQUEUE | NULL | 9999000016 | | | VIC | 1 |
| P01 | 1243280631 | V0525154325000035377 | TESTCAMP | Agent/6666 | COMPLETEAGENT | 0 | 17 | 1 | | VIC | 1 |
| P01 | 1243280631 | NONE | NONE | Agent/6666 | PAUSEALL | NULL | | | | VIC | 2 |
| P01 | 1243280633 | NONE | NONE | Agent/6666 | UNPAUSEALL | NULL | | | | VIC | 1 |
| P01 | 1243280633 | V0525154325000035377 | TESTCAMP | Agent/6666 | CALLSTATUS | N | | | | VIC | 2 |
| P01 | 1243280646 | V0525154353000213842 | TESTCAMP | NONE | ENTERQUEUE | NULL | 9999000017 | | | VIC | 1 |
| P01 | 1243280646 | V0525154353000213842 | TESTCAMP | Agent/6666 | CONNECT | 0 | | | | VIC | 2 |
| P01 | 1243280650 | V0525154353000213842 | TESTCAMP | Agent/6666 | COMPLETEAGENT | 0 | 4 | 1 | | VIC | 1 |
| P01 | 1243280650 | NONE | NONE | Agent/6666 | PAUSEALL | NULL | | | | VIC | 2 |
| P01 | 1243280659 | V0525154353000213842 | TESTCAMP | Agent/6666 | CALLSTATUS | NP | | | | VIC | 1 |
| P01 | 1243280672 | Y0525154346000213841 | TEST_IN | NONE | EXITWITHTIMEOUT | 1 | | | | VIC | 1 |
| P01 | 1243280672 | Y0525154346000213841 | TEST_IN | NONE | CALLSTATUS | DROP | | | | VIC | 2 |
| P01 | 1243280673 | Y0525154433000213841 | TEST_IN2 | NONE | ENTERQUEUE | NULL | 9999000016 | | | VIC | 1 |
| P01 | 1243280686 | Y0525154433000213841 | TEST_IN2 | NONE | ABANDON | 1 | 1 | 3 | | VIC | 1 |
| P01 | 1243280940 | NONE | NONE | Agent/6666 | UNPAUSEALL | NULL | | | | VIC | 1 |
| P01 | 1243280940 | M0525154900000194239 | TESTCAMP | NONE | ENTERQUEUE | NULL | 9998888112 | | | VIC | 2 |
| P01 | 1243280940 | M0525154900000194239 | TESTCAMP | Agent/6666 | CONNECT | 0 | | | | VIC | 3 |
| P01 | 1243280965 | M0525154900000194239 | TESTCAMP | Agent/6666 | COMPLETEAGENT | 0 | 17 | 1 | | VIC | 1 |
| P01 | 1243280965 | NONE | NONE | Agent/6666 | PAUSEALL | NULL | | | | VIC | 2 |
| P01 | 1243280973 | M0525154900000194239 | TESTCAMP | Agent/6666 | CALLSTATUS | N | | | | VIC | 1 |
| P01 | 1243281049 | Y0525155049000194239 | TEST_IN2 | NONE | ENTERQUEUE | NULL | 9998888112 | | | VIC | 1 |
| P01 | 1243281052 | NONE | NONE | Agent/6666 | UNPAUSEALL | NULL | | | | VIC | 1 |
| P01 | 1243281057 | Y0525155049000194239 | TEST_IN2 | Agent/6666 | CONNECT | 3 | | | | VIC | 1 |
| P01 | 1243281073 | Y0525155049000194239 | TEST_IN2 | Agent/6666 | COMPLETEAGENT | 3 | 24 | 1 | | VIC | 1 |
| P01 | 1243281073 | NONE | NONE | Agent/6666 | PAUSEALL | NULL | | | | VIC | 2 |
| P01 | 1243281079 | Y0525155049000194239 | TEST_IN2 | Agent/6666 | CALLSTATUS | WN | | | | VIC | 1 |
| P01 | 1243281088 | NONE | NONE | Agent/6666 | UNPAUSEALL | NULL | | | | VIC | 1 |
| P01 | 1243281088 | M0525155128000194239 | TESTCAMP | NONE | ENTERQUEUE | NULL | 9998888112 | | | VIC | 2 |
| P01 | 1243281088 | M0525155128000194239 | TESTCAMP | Agent/6666 | CONNECT | 0 | | | | VIC | 3 |
| P01 | 1243281105 | M0525155128000194239 | TESTCAMP | Agent/6666 | COMPLETEAGENT | 0 | 7 | 1 | | VIC | 1 |
| P01 | 1243281105 | NONE | NONE | Agent/6666 | PAUSEALL | NULL | | | | VIC | 2 |
| P01 | 1243281111 | M0525155128000194239 | TESTCAMP | Agent/6666 | CALLSTATUS | NP | | | | VIC | 1 |
| P01 | 1243281112 | NONE | NONE | Agent/6666 | AGENTLOGOFF | 6666@agents | 516 | | | VIC | 1 |
+-----------+------------+----------------------+----------+------------+-----------------+-------------+------------+-------+-------+----------+------------------+
+623
View File
@@ -0,0 +1,623 @@
+------------------------------------------------------------------------------+
| ViciDial Call Center - astguiclient - thirtieth public release 2.0.5 |
| created by ViciDial group <vicidial@gmail.com> |
| project started 2003-10-06 http://sourceforge.net/projects/astguiclient/ |
+------------------------------------------------------------------------------+
This suite of programs is designed to work with the Asterisk Open-source PBX
(http://www.asterisk.org) as a cross-platform GUI client and the supporting
server side applications necessary for the features of the GUI application to
work with Asterisk. The client-side GUI apps are available as web pages running
AJAX scripted web pages(Firefox recommended)
End-user Manuals for Agents and Managers are available from http://www.eflo.net
***** Description, Notes and Changelog below *****
Included in this distribution of the Asterisk GUI client are:
- agi/ - the Asterisk agi-bin files needed for astguiclient
- bin/ - the astGUIclient server-side perl script applications
- docs/ - astGUIclient installation and other documentation
- docs/conf_examples/ - example Asterisk conf files for astGUIclient
- extras/ - data files, sql files and other extra files needed for ViciDial
- LANG_www/ - ViciDial admin and user web pages translated into other languages
- sounds/ - Asterisk sounds needed by ViciDial
- translations/ - UTF8 language translation files for other language versions
- www/ - the pages and scripts of the user and admin astGUIclient web interface
DESCRIPTION:
This program was designed as a GUI client for the Asterisk PBX with Zaptel
trunks or IAX or SIP VOIP trunks and SIP/IAX/Zap hard or softphones or devices
as extensions, it could be adapted to other functions, but it was designed for
Zap/IAX/SIP users. The client programs are web-based and will run on most
modern web browsers.
KNOWN BUGS:
- With ViciDial(and Asterisk in general) you cannot record a native bridge
VOIP-only conversation unless you go into a conference, you also cannot
monitor a native-bridge VOIP-only conversation unless you use a separate
specialized application like OrecX
VERSION HISTORY:
0.7 - First public release - 2003-11-18
This is the first release of the Asterisk GUI Client code, it is entirely
written in Perl with portability and rapid development/testing in mind. The perl
code is NOT strict, it was written loose and fast and has been functioning
rather well in a production environment of 60 clients for one month now.
0.8 - Second public release - 2003-12-09
- Several bug fixes
- New button for monitoring live extensions on Zap channels
- Changed the method that the live channels/phone were populated on the
listboxes of the client app.
- Changed the Asterisk/Manager commands to work correctly with new Asterisk CVS
versions requirements.
- A new routine was enabled to allow for making sure that the updater is
running and bringing up a popup alert window on the client if the updater has
not updated in the last 6 seconds. (this also added a new MySQL table)
- Changed the updater to run every 450 milliseconds instead of every 333
milliseconds.
- Updater changed to allow for ringing channels to appear in the live_channels
table.
0.9 - Third public release - 2004-02-05
The majority of the work in this release it to make it more stable and fix some
pretty bad bugs. We created the Asterisk Central Queue System to address the
problem with buffer-overflows in the manager interface of Asterisk causing total
system deadlocks. We also completed and touched-up many other features that we
didn't finish in previous releases. Here is the list of changes:
- Several bug fixes
- Inclusion of listing for active SIP/Local channels and ability to hang them up
- Completely changed the method of conferencing to be more fluid
- Added HELP popup screen
- Added intrasystem calling funtionality
- Updater changed to allow for SIP/Local channels
- Recording for conferences is now able to record all audio in and out
- Added ability to send DTMF tones within a conference
- Changed alert window for updater being down timeout to 20 seconds
- Added an option for using the new Asterisk Central Queue System(ACQS) that
reduces the risk of deadlocks that occur with buffer-overflows on remote manager
interface connections
- Included new script to run at boot time and rotate the logs as well as a
keepalive script for the new ACQS
- Changed non-AGI server-side scripts to allow for a single config file
- Detailed activity logging to text file option added
- Activity logging added to all non-AGI server applications
0.9.2 - Fourth public release - 2004-03-08
- several bug fixes for the GUI client and ACQS applications
- addition of the new VICIDIAL auto-dialer application and admin web pages
- added new script to reset MySQL tables
- added new script to kill CONGEST Local/ channels
0.9.4 - Fifth public release - 2004-03-12
- a few bug fixes for the GUI and server apps
- addition of callerID popup for the GUI
- callerID buttons to launch web pages from callerID popup
- addition of voicemail count display to GUI
- addition of button to directly connect to voicemail
- addition of voicemail counter updater
- MySQL table "phones" modified and "inbound" table added(see CONF_MySQL.txt)
- new extensions.conf entries need to be added to use callerid and vmail GUI
1.0.0 - Sixth public release - 2004-03-26
- a few bug fixes for the GUI and server apps
- Major documentation changes with the addition of the SCRATCH_INSTALL.txt file
that goes step-by-step through the entire install process of an asterisk server
from blank hardware to astguiclient installation and configuration.
- added pretty buttons to the WINphoneAPP
- added blind transfer to voicemail, blind transfer to another extension and
blind external transfer
- new install script created to put server files in default positions and set
permissions to execute
- new sql file to create all tables by running a script execute command in MySQL
1.0.1 - Seventh public release - 2004-04-27
- a few bug fixes for the GUI and server apps
- minor changes to WINphoneAPP
- major changes to VICIDIAL client code:
+ rearranged VICIDIAL buttons and added some color to DIAL and HANGUP buttons
+ allowed for call parking with different park music per-campaign
+ allowed for webpage forms launched from GUI with call info
+ allowed for different web form web page per-campaign
+ allowed agents using VICIDIAL client to send calls with data to a closer
+ new call-closer functionality is web-based for flexibility
+ added new DTMF dialpad for sending tones quickly
- fixed bugs in VICIDIAL web admin pages
- fixed bugs in ASTGUICLIENT web admin pages
- added code from Paul Concepcion to allow admin pages to work with globals off
- added common database connection file for each set of PHP admin pages
- made small changes to the MySQL database Schema
(NOTE: if upgrading from 1.0.0 run the upgrade_1.0.1.sql script in MySQL)
1.0.2 - Eighth public release - 2004-06-03
- a few bug fixes for the GUI apps
- corrected documentation errors in SCRATCH_INSTALL instructions
- updated SCRATCH_INSTALL instructions for some newer software
- corrected errors in SQL install queries
- corrected errors in server installation scripts
- WINphoneAPP config option to allow one persistant mysql DB connection
- WINphoneAPP config option to allow modification of info refresh interval
- VICIDIAL modified to allow for auto-dial of next number
(NOTE: if upgrading from 1.0.1 you do not need to update any web pages or
server apps, this update is only a client GUI and docs update. Note that the
AST_VICI_conf.pl has been updated, so you may need to modify your client
configs to enable new features.)
1.0.3 - Ninth public release - 2004-07-21
- a few bug fixes for the GUI apps
- changed the recording to show recording ID when recording is started
- VICIDIAL overhauled:
+ added Time::HiRes module requirement to better control time increments
+ changed to dial from a small hopper of pre-ordered leads per campaign
+ added cron script to always keep leads in the hopper every minute
+ added a counter to see how many times a lead is called
+ added ability to dial campaign by how many times lead called
+ added some new stats to the admin web pages
+ created a limited predictive-dialer that will dial a certain amount of leads
per logged in agent and direct the calls that are picked up to the next agent
+ ability to transfer the called line and the 3rd party call into a separate
meetme room and continue on dialing
UPGRADE NOTES:
* if upgrading from 1.0.2 you need to update the web pages and all
server apps.
* if upgrading from 1.0.2 run the upgrade_1.0.3.sql script in MySQL
* if upgrading from 1.0.2 you may want to run AST_upgrade_1.0.3.pl to update
your called counts of your leads in vicidial_list.
* AST_SERVER_conf.pl has been updated, so you may need to modify your server
configs to enable new features.
* client app names have been changed to astVICIDIAL and astGUIclient
1.0.4 - Tenth public release - 2004-09-21
- several minor bug fixes for GUI apps and server apps
- fixed recording bug in astGUIclient that would rarely stop recording
- added timezone dialing in VICIDIAL
- added new client GUI app for inserting leads into the VICIDIAL leads table
- adjusted timings in the VICIDIAL autodialer for better performance
- added streamlined manager interface logins to help scripts run more smoothly
UPGRADE NOTES:
* if upgrading from 1.0.3 you need to update the web pages and all
server apps.
* if upgrading from 1.0.3 run the upgrade_1.0.4.sql script in MySQL
* if upgrading from 1.0.3 you may want to run ADMIN_adjust_GMTnow_on_leads.pl
to update the timezone in the vicidial_list table
* AST_SERVER_conf.pl on the server has been updated, so you may need to modify
your server configs to enable new features(like timezone dialing).
* AST_VICI_conf.pl for clients has been updated, so you may need to modify
your client configs to enable new features(like timezone dialing).
* run this script if you plan on doing timezone restrictions on VICIDIAL:
ADMIN_area_code_populate.pl
1.0.5 - Eleventh public release - 2004-10-28
- many minor bug fixes in most of the server and client scripts
- fixed multiple login bug on VICIDIAL
- fixed the manual-dial/auto-dial switching bug on VICIDIAL
- fixed a few time zone calling bugs on VICIDIAL server apps
- all apps now allow for IAX trunks to be used in addition to the usual Zap
- added more options to install script
- changed CLI lead loader to use Net::MySQL instead of DBI
- modified several scripts that handle CallerID because of the early October
change in the CVS of outputting CID info as two separate fields(CallerID and
CallerIDname) instead of everything being sent in CallerID.
UPGRADE NOTES:
* if upgrading from 1.0.4 you need to update the web pages and all
server and client apps.
* if upgrading from 1.0.4 run the upgrade_1.0.5.sql script in MySQL
* if using a CVS version 2004-10-07 or newer or release 1.0.3 or newer
change the line in extensions.conf
exten => 8309,2,Monitor(wav,${CALLERIDNUM})
change to
exten => 8309,2,Monitor(wav,${CALLERIDNAME})
1.0.6 - Twelfth public release - 2004-12-23
- many minor bug fixes in most of the server and client scripts
- optimized the ACQS and restructured its keepalive scripts
- added hijack line feature to astGUIclient
- added inbound call handling for VICIDIAL
- added blended in-outbound calling within VICIDIAL
- added new closer stats report
- updated the SCRATCH_INSTALL instructions and corrected errors
- see the TODO.txt file for other items DONE in this release
UPGRADE NOTES:
* if upgrading from 1.0.5 you need to update the web pages and all
server and client apps.
* if upgrading from 1.0.5 run the upgrade_1.0.6.sql script in MySQL
* if upgrading from 1.0.5 add a campaign "CLOSER" to enable closers and
inbound call taking through the VICIDIAL application
(see the SCRATCH_INSTALL document SUBPHASE 6.2 for more information)
1.1.0 - Thirteenth public release - 2005-03-09
- several small bug fixes in most of the server and client scripts
- added IAX and Zap client/agent compatibility
- implemented some major database optimizations
- ability to specify MySQL port across all apps
- moved almost all client config variables from client files to the Database
- created a meetme room validator that will allow faster reassignment of conferences
- created a new remote_agent login system for VICIDIAL in/outbound calls
- restructuring of AST_update script to cope better with manager output hiccups
- added dial timeout field to VICIDIAL to specify the timeout per campaign
- added help popups to every page of the admin web pages to explain fields
- see the TODO.txt file for other items DONE in this release
UPGRADE NOTES:
* if upgrading from 1.0.6 you need to update the web pages and all
server and client apps.
* if upgrading from 1.0.6 run the upgrade_1.1.0.sql script in MySQL
* if upgrading from 1.0.6 you will need to configure your client parameters on
the admin web page and remove them from the client computers (except for the
fields that are in the sample AST_VICI_conf.pl file)
* older client apps are not compatible with this version, you must upgrade
1.1.1 - Fourteenth public release - 2005-06-03
- several small bug fixes in most of the server and client scripts
- added astGUIclient web-only client
- added campaign-custom disposition statuses to VICIDIAL
- added campaign-custom CallerID to VICIDIAL
- added fronter-display-disable option to VICIDIAL Inbound Groups
- added ability to separate vicidial users by groups
- added performance stats gathering ability to AST_update script
- fixed the send-to-vmail portion of inbound AGI scripts
- added simple web-based lead file loader for VICIDIAL
UPGRADE NOTES:
* if upgrading from 1.1.0 you need to update the web pages and all
server apps.
* if upgrading from 1.1.0 run the upgrade_1.1.1.sql script in MySQL
1.1.2 - Fifteenth public release - 2005-06-06
- fixed fatal bug in AST_update.pl script
- added instructions for ploticus install to SCRATCH_INSTALL
UPGRADE NOTES:
* if upgrading from 1.1.0 you need to:
- download the new version from the project website
- unzip the zip file into the astguiclientastguiclient directory
- and either:
+ copy the web pages and all server apps to their proper locations manually
+ or run the install_server_files.pl script to put all items in their
default places
* if upgrading from 1.1.0 run the upgrade_1.1.1.sql script in MySQL
(\. astguiclientastguiclient/upgrade_1.1.1.sql)
1.1.3 - Sixteenth public release - 2005-06-10
- fixed config bug in AST_VDauto_dial.pl script
- added null query result checks to scripts in the agc web-only client
- added documentation for the inbound and transfer AGI script variables
- added documentation and tested install with MySQL 4.1 tree (4.1.12)
UPGRADE NOTES:
* if upgrading from 1.1.0 - 1.1.2 you need to:
- download the new version from the project website
- unzip the zip file into the astguiclientastguiclient directory
- and either:
+ copy the web pages and all server apps to their proper locations manually
+ or run the install_server_files.pl script to put all items in their
default places
* if upgrading from 1.1.0 run the upgrade_1.1.1.sql script in MySQL
(\. astguiclientastguiclient/upgrade_1.1.1.sql)
1.1.4 - Seventeenth public release - 2005-06-24
- fixed new Local channel bugs caused by changes in Asterisk 1.0.8 and CVS
- added beta support for SIP trunks
- added ability to send VICIDIAL outbound calls to custom AGI script per
campaign and included new survey sample AGI script
- added better Asterisk shutdown detection to AST_manager_listen script
UPGRADE NOTES:
* if upgrading from 1.1.3 you need to:
- download the new version from the project website
- unzip the zip file into the astguiclientastguiclient directory
- and either:
+ copy the web pages and all server apps to their proper locations manually
+ or run the install_server_files.pl script to put all items in their
default places
- if using VICIDIAL download the new client script to all client stations
- make sure you populate the new $AST_ver variable in AST_SERVER_conf.pl
* if upgrading from 1.1.3 run the upgrade_1.1.4.sql script in MySQL
(\. astguiclientastguiclient/upgrade_1.1.4.sql)
1.1.5 - Eighteenth public release - 2005-08-12
- fixed new Local channel bugs caused by changes in Asterisk 1.0.8 and 1.0.9
- moved many server variables to the database, editable through admin.php
- added ability to limit number of outbound trunks used by VICIDIAL auto dialer
- many small changes and bug fixes to the astguiclient web client
- added alpha vicidial web-client (click-to-dial only)
UPGRADE NOTES:
* if upgrading from 1.1.4 you need to:
- download the new version from the project website
- unzip the zip file into the astguiclientastguiclient directory
- and either:
+ copy the web pages and all server apps to their proper locations manually
+ or run the install_server_files.pl script to put all items in their
default places
- VICIDIAL perl/TK client is unchanged from 1.1.4
- make sure you check the astguiclient admin.php server parameters
* if upgrading from 1.1.4 run the upgrade_1.1.5.sql script in MySQL
(\. astguiclientastguiclient/upgrade_1.1.5.sql)
1.1.6 - Nineteenth public release - 2005-08-29
- streamlined many of the server apps and added command-line debug capability
- finished the vicidial web-client and tested in prduction
- modified server-side scripts to function with Asterisk CVS_HEAD(soon to be 1.2)
- modified server performance logging and graphing, added user/system proc %
UPGRADE NOTES:
* if upgrading from 1.1.5 you need to:
- download the new version from the project website
- unzip the zip file into the astguiclientastguiclient directory
- and either:
+ copy the web pages and all server apps to their proper locations manually
+ or run the install_server_files.pl script to put all items in their
default places
(make sure AST_SERVER_conf.pl and dbconnect.php files are config'd properly)
- perl/TK clients are unchanged from 1.1.5
- make sure you check the astguiclient admin.php server parameters
- make the agi-VDADtransfer.agi changes in extensions.conf (mentioned in SCRATCH_INSTALL doc)
* if upgrading from 1.1.5 run the upgrade_1.1.6.sql script in MySQL
(\. astguiclientastguiclient/upgrade_1.1.6.sql)
1.1.7 - Twentieth public release - 2005-10-05
- Added HotKeys key binding for VICIDIAL web-client fast dispositioning
- Internationalization(multi-language) of web-clients and admin pages
- Added ability in manual VICIDIAL to call alternate lead phone numbers
- Added option of pull-down of active campaigns to VICIDIAL web login
- Fixed some issues with scripts interacting with Asterisk 1.2
- other small changes listed in the TODO.txt file
UPGRADE NOTES:
* if upgrading from 1.1.6 you need to:
- download the new version from the project website
- unzip the zip file into the astguiclientastguiclient directory
- and either:
+ copy the web pages and all server apps to their proper locations manually
+ or run the install_server_files.pl script to put all items in their
default places
(make sure AST_SERVER_conf.pl and dbconnect.php files are config'd properly)
- perl/TK clients have been slightly updated(will be unsupported soon)
- 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.
* if upgrading from 1.1.6 run the upgrade_1.1.7.sql script in MySQL
(\. astguiclientastguiclient/upgrade_1.1.7.sql)
1.1.8 - Twenty-First public release - 2005-11-10
- Added per-campaign call recording options to VICIDIAL
- Added detailed logging for VICIDIAL agent time
- Fixed some issues with scripts interacting with Asterisk 1.2
- other small changes listed in the TODO.txt file
UPGRADE NOTES:
* if upgrading from 1.1.7 you need to:
- download the new version from the project website
- unzip the zip file into the astguiclientastguiclient directory
- and either:
+ copy the web pages and all server apps to their proper locations manually
+ or run the install_server_files.pl script to put all items in their
default places
(make sure AST_SERVER_conf.pl and dbconnect.php files are config'd properly)
- 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.
* if upgrading from 1.1.7 run the upgrade_1.1.8.sql script in MySQL
(\. astguiclientastguiclient/upgrade_1.1.8.sql)
1.1.9 - Twenty-Second public release - 2006-01-19
- Added Load Balancing of Inbound and Outbound calls across multiple Asterisk
servers in the same setup
- Removed all PHP globals requirements, can now use register_globals=Off in PHP
- Add fully translated Greek admin and agc scripts(agc images to come)
- Added security elements to admin pages and added record deletion functions
- Added a script tab to VICIDIAL to have a variable-populated agent script
- Added new Super lead loader with field chooser and CVS/XLS-format capability
- Added favorites panel to astguiclient.php that shows off/on hook
- Many other small changes listed in the TODO.txt file
UPGRADE NOTES:
* if upgrading from 1.1.8 you need to:
- download the new version from the project website
- unzip the zip file into the astguiclientastguiclient directory
- and either:
+ copy the web pages and all server apps to their proper locations manually
+ or run the install_server_files.pl script to put all items in their
default places
(make sure AST_SERVER_conf.pl and dbconnect.php files are config'd properly)
- 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.
* if upgrading from 1.1.8 run the upgrade_1.1.9.sql script in MySQL
(\. astguiclientastguiclient/upgrade_1.1.9.sql)
1.1.10 - Twenty-Third public release - 2006-03-17
- Added capability to work with app_amd(answering machine detection)
- Added transfer-conference number and DTMF presets per campaign
- Added sphinx ring-time analysis disposition package(beta)
- Added scheduled callbacks to VICIDIAL
- Added more user-permission options/restrictions
- Several small bug fixes for better Asterisk 1.2.4 compatibility
- Many other small changes listed in the TODO.txt file
UPGRADE NOTES:
* if upgrading from 1.1.9 you need to:
- download the new version from the project website
- unzip the zip file into the astguiclientastguiclient directory
- and either:
+ copy the web pages and all server apps to their proper locations manually
+ or run the install_server_files.pl script to put all items in their
default places
(make sure AST_SERVER_conf.pl and dbconnect.php files are config'd properly)
- add "exten => h,2,DeadAGI(VD_hangup.agi,${EXTEN})" to extensions.conf
- 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.
* if upgrading from 1.1.9 run the upgrade_1.1.10.sql script in MySQL
(\. astguiclientastguiclient/upgrade_1.1.10.sql)
1.1.11 - Twenty-Fourth public release - 2006-04-28
- Added Agent-only Scheduled Callbacks
- Added Lead Filters for campaigns to use custom SQL to narrow calling scope
- Added Agent manual-lead-insertion capability
- Fixed PHP variable checking in all PHP scripts to be more compliant
- Added more user-permission options/restrictions for both agents and admins
- Several small bug fixes for better Asterisk 1.2.6 and SVN compatibility
- Many other small changes listed in the TODO.txt file
UPGRADE NOTES:
* if upgrading from 1.1.10 you need to:
- download the new version from the project website
- unzip the zip file into the astguiclientastguiclient directory
- and either:
+ copy the web pages and all server apps to their proper locations manually
+ or run the install_server_files.pl script to put all items in their
default places
(make sure AST_SERVER_conf.pl and dbconnect.php files are config'd properly)
- 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.
* if upgrading from 1.1.10 run the upgrade_1.1.11.sql script in MySQL
(\. astguiclient/upgrade_1.1.11.sql)
1.1.12 - Twenty-Fifth public release - 2006-06-22
- Security enhancements of PHP scripts to reduce SQL-injection and other threats
- Completely redesigned local call time system in VICIDIAL for more flexibility
- Added Drop-call and safe-harbor options to campaigns and inbound groups
- Added option for allowing wrapup time between calls in vicidial.php
- Multi-language translation rewritten for more flexibility and easy of use
- Added more user-permission options/restrictions for both agents and admins
- Added option of using app_conference instead of meetme engine
- Added internal DNC list for Do-Not-Call entries across the system
- Added automatic lead recycling to call back Busy calls at definable intervals
- Added listID override and timezone lookup to all lead importing scripts
- Added easy-prompt-recording AGI and playback: agi-record_prompts.agi
- Many other changes and bug fixes listed in the TODO.txt file
UPGRADE NOTES:
* if upgrading from 1.1.11 you need to:
- download the new version from the project website
- unzip the zip file into the astguiclientastguiclient directory
- and either:
+ copy the web pages and all server apps to their proper locations manually
+ or run the install_server_files.pl script to put all items in their
default places
(make sure AST_SERVER_conf.pl and dbconnect.php files are config'd properly)
- 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.
* if upgrading from 1.1.11 run the upgrade_1.1.12.sql script in MySQL
(\. astguiclientastguiclient/upgrade_1.1.12.sql)
* if upgrading from older version you will need to run this query for each
campaign in VICIDIAL in MySQL:
(INSERT INTO vicidial_campaign_stats (campaign_id) values('campaignname');)
2.0.1 - Twenty-Sixth public release - 2006-09-15
- Changed all Perl script to use DBI instead of Net::MySQL
- Completely new interactive install script with new astguiclient.conf file
- Ability to turn off or on logging of server scripts
- Ability to redirect AGI output to file, STDERR, both or nowhere.
- Code and process optimization of many of the server-side scripts
- Added a Predictive outbound dialing algorithm with many user-defined settings
- Wrote new BASE_INSTALL.txt doc for simple install and added sample conf files
- Many other changes and bug fixes listed in the TODO Wiki webpage:
http://www.eflo.net/VICIDIALwiki/index.php/TODO:2.0.1
UPGRADE NOTES:
* if upgrading from 1.1.12 you need to follow instructions in the UPGRADE doc
2.0.2 - Twenty-Seventh public release - 2006-12-22
- Added FastAGI replacement for call_log and VDhangup scripts
- Added new USA-Canada Daylight Savings time scheme and DST for Brazil
- astguiclient/admin.php removed and merged into vicidial/admin.php
- Ability for agent to alter volume levels of participants
- Keepalives consolidated into single script
- New all-active-campaigns realtime summary screen
- New script added to make it easier to change IP address of servers in VICIDIAL
- Added ability to reserver trunk lines for specific VICIDIAL campaigns
- Added ability for balance dialing and dialing-only servers in VICIDIAL
- Many other changes and bug fixes listed in the TODO Wiki webpage:
http://www.eflo.net/VICIDIALwiki/index.php/TODO:2.0.2
UPGRADE NOTES:
* if upgrading from 2.0.1 you need to follow instructions in the UPGRADE doc
2.0.3 - Twenty-Eighth public release - 2007-04-27
- Added optimized manager sending scripts
- Made several changes to admin.php and made it more customizable
- Made changes to HotKeys to allow for manual auto dial and auto alt number dial
- Added ability to dial alternate lead phone numbers in auto-dial modes
- Added ability to send more calls to agents at once, helping large installations
- Added more levels of access control to the administrative interfaces
- Added Agent Pause codes to alow agents to categorize their PAUSE time
- Added VICIDIAL outbound compatibility with QueueMetrics
- Many other changes and bug fixes listed in the TODO Wiki webpage:
http://www.eflo.net/VICIDIALwiki/index.php/TODO:2.0.3
UPGRADE NOTES:
* if upgrading from 2.0.2 you need to follow instructions in the UPGRADE doc
2.0.4 - Twenty-Ninth public release - 2007-12-03
- Easy control over System Statuses, including the addition of Status Categories
- Several new additional In-Group features including music-on-hold, alert messages and call times
- Skills based ranking and call routing for inbound and outbound
- Agent call routing based on the number of calls taken today per in-group or campaign
- Added the ability to copy the settings of an existing User/Campaign/In-Group into a new one
- Changing the Transfer feature in the agent screen to allow for more transfer In-Group choices
- Dynamic display of available campaigns for an agent in the agent login screen
- Many other changes and bug fixes listed in the TODO Wiki webpage:
http://www.eflo.net/VICIDIALwiki/index.php/TODO:2.0.4
UPGRADE NOTES:
* if upgrading from 2.0.3 you need to follow instructions in the UPGRADE doc
2.0.5 - Thirtieth public release - 2009-04-03
UPGRADE NOTES:
* if upgrading from 2.0.4 you need to follow instructions in the UPGRADE doc
CHANGES:
1. Note the license change from GPLv2 to AGPLv2. This change was made to close the ASP loophole for code distribution that was present in the GPLv2 license. Please read the docs/LICENSE.txt file for more information
2. Several of the MySQL tables have been changed to a HEAP type to reside in memory to improve performance.
3. Added the ability for inbound and blended agents to choose their selected in-groups without logging out. The new GROUPS link at the top of the agent screen(vicidial.php) can be used when an agent is Paused to change their selected groups and whether they are set to do Blended calling or not. There is also a new log with the details of what groups an agent has selected each time in the user stats page.
4. Queue Priority has been added allowing for the prioritization of one in-group over another in-group or outbound campaign(when in blended mode)
5. Drop call action has been added to both inbound and outbound calling. You can now send a call that would drop into an inbound group. The call will still be recorded as a DROP in it's original in-group or campaign, but the lead information will move on to the drop in-group.
6. Audio recording mixing/compression/ftping scripts have been completely rewritten and separated into different scripts for better fault tolerance. Also, you have the option of compression in to the following formats: WAV, GSM, MP3 and OGG - AST_CRON_audio_1_move_mix.pl - AST_CRON_audio_1_move_VDonly.pl - AST_CRON_audio_2_compress.pl - AST_CRON_audio_3_ftp.pl
7. Created a new script to backup a VICIDIAL setup, including the Asterisk conf files, prompt recordings, bin, agi and web files: ADMIN_backup.pl
8. Added ability to override recording options of a campaign for individual inbound-groups
9. The 8 outbound agi-VDADtransfer scripts are in process of being consolidated into a single AGI script: agi-VDAD_ALL_outbound.agi All older outbound scripts are depricated and do not function any more
10. Added the ability to load balance the logins to vicidial.php for phones that are registered to multiple servers on a multi-server system. Simply put multiple phone_login values in the phone login field at login separated by a comma and the vicidial.php script will pick the server that has the fewest agents logged into it at the moment of login.
11. Added ability for vicidial.php to populate the phones.computer_ip field upon agent login. Options set in the vicidial.php file to allow for overwrite every login or only if field is empty.
12. Several code changes for better UTF8 compatibility with the database as well as special character leads in the agent screen, lead loading
13. Added after hours redirect of calls to an in-group to another in-group
14. Added collection of hangup reasons for inbound and outbound calls in the vicidial_log and vicidial_closer_log tables
15. Added a new timeclock feature w/ audit and log, including the addition of shifts to VICIDIAL user groups and the ability to auto-generate user IDs as you are adding users to the system. timeclock.php user login page created and linked to from admin/agent/welcome screens
16. Added a new inbound/closer(queues) report for showing service levels
17. Added Calls in Queue counter to agent vicidial.php screen
18. Added ability to use calltime scheme for calls not yet in an in-group(queue) as well as display in real-time stats. See Inbound_VDAC_IVR.txt doc for more information
19. Auto-dial survey broadcast campaigns can now be fully configured within the admin.php interface and they have new options shown in the Survey sub- section
20. Changed add-to-DNC list to allow for multiple phone numbers per submission
21. Date/time and phone formats that appear in the VICIDIAL agent screen are now customizable as defined in the Admin -> System Settings screen.
22. Added manual dial and inbound queue_log logging capability for better QueueMetrics compatibility
23. Added some basic agent interface API functions and an agc/api.php script
24. A field has been added to vicidial_list(last_local_call_time) to sort by the last time a lead was called as well as for lead recycling changes.
25. IMPORTANT FOR RECORDINGS!!! The recording extensions have been changed within VICIDIAL so you need to add the following lines to your extensions.conf ; quiet monitor-only entry and leaving conferences for VICIDIAL (recording) exten => _58600XXX,1,Meetme,${EXTEN:1}|Fmq
26. Added option (for Internet Explorer users only) to copy a field to the clipboard of the agent computer upon a call being sent to the agent.
27. Added new alternate number dialing method which allows for over 65,000 alt phone numbers per lead. Currently these extra numbers are only available for auto dialing, not manual dial. These extra alternate number leads must be imported either with the CLI lead loader(VICIDIAL_IN_new_leads_file.pl) or the non-agent API script.
28. Added campaign-specific DNC filtering lists to the system
29. Added optional dialplan entries to sample extensions.conf to play a not-in- service message for invalid phone numbers that cannot be dialing in North America
30. Rewrote Leave-3way function for conference calling to work more reliably on high load systems. Need to add more vicidial_conferences entries and meetme.conf entries for this, see the meetme.conf.sample file and the first_server_install.sql file for more information
31. Added several new features to inbound call handling including: - announce place in line - announce estimated hold time - welcome message options - options for call routing when estimated hold time is too high - press 1 to leave a voicemail for customers if wait time too high
32. Added DID call routing to allow for basic routing of calls to phones, extensions, voicemail and VICIDIAL inbound groups without editing the extensions.conf dialplan. *requires initial adding one line to dialplan of inbound context: exten => _X.,1,AGI(agi-DID_route.agi) *as well as a few more lines in your VICIDIAL default context: ; DID forwarded calls exten => _99909*.,1,Answer exten => _99909*.,2,AGI(agi-VDAD_ALL_inbound.agi) exten => _99909*.,3,Hangup
33. Added ability to set callerID number on outgoing conference calls to CAMPAIGN, CUSTOMER or AGENT_PHONE callerID settings.
34. New Slovak translation for the agent screen, as well as new German agent screen translation and new German buttons for the agent screen
35. New Welcome demo and languages screens with links to all translations of agent and admin screens
36. Added INBOUND_MAN dial method to allow for inbound call handling by agents that are also placing manual dial list calls through their campaign lists
37. Added option to see the inbound group call stats in the Real-time screen
38. Added ability for agents to dial in to an AGI script(agi-AGENT_dial_in.agi) to log their phone into the session instead of having VICIDIAL call them. The user ID and password for the agent must be digits only for this to work! This requires the following to be added to the dialplan on the dial-in DID or extension that you want to use: exten => 2345,1,Answer ; Answer the line exten => 2345,2,AGI(agi-AGENT_dial_in.agi) exten => 2345,3,Hangup
39. Added pause codes display to the Real-time report as well as pause code statistics to the agent performance detail report. Also added an option to force agents to enter a pause code(this is a campaign option)
40. Added full MySQL error logging to vicidial agent web interface. Logs are written to the webserver.
41. Added new inbound-only reporting to Real-time report as well as many new features to existing inbound report. Created IVR stats report to show stats on Asterisk IVRs
42. Updated Vtiger integration to version 5.0.4 and allow searching by leads/accounts/vendors. Also added user synchronization with vicidial_users. Also added click-to-dial from Vtiger sending call to vicidial agent screen. Also added batch synchronization of Accounts between Vtiger and VICIDIAL.
43. Added notification of time synchronization problems in the vicidial.php page
44. Added AGENTDIRECT queueing to be able to send calls to only one agent without having to create a new in-group for each agent. You can configure DIDs to use AGENTDIRECT, and you can have VICIDIAL agents send calls to specific agents using the AGENTDIRECT transfer group with LOCAL CLOSER button and putting the agent to send the call to in the Number To Dial field.
45. Added agent alert option to agent screen. sends browser alert prompt when a call is send to the agent screen.
46. Added option for using North American NANPA prefix timezone encoding for more accurate time zone encoding. The data is NOT included but can be purchased from the VICIDIAL Group.
47. Added System Settings option to disable auto-dialing(list dialing) from the system to simplify administration for inbound-only call centers
48. Added patch and configuration options to allow VICIDIAL to work with Sangoma ParaXip CPD(Call Progress Detection) for Answering Maching and Fax detection
49. Added list_download.php that allows you to download the entire contents of vicidial lists from the admin.php interface. You must set the download_lists permission in vicidial_users to 1 for this to work.
50. Small redesign of the agent interface to use grey backgrounds and new tabs
51. Added Asterisk version prompt to the install.pl script to allow for the copying of the proper conf files for the installed Asterisk version
52. Added auto-generation of SIP and IAX phones and carriers into the Asterisk conf files so that you can fully configure them using only the admin.php web interface. See the ASTERISK_CONF-GEN.txt file for more information
53. Added group alias option for selecting callerID on manual and 3rd-party calls
54. Added options for custom web variables for each agent per in-group and camaign. This is definable in the user modification page
55. Added Agent Shift enforcement options to restrict logins and vicidial agent activity
56. Added Server vital statistics(load/CPU/disk) to the reports screen and the server modification screen
57. Removed the admin_changes flat text log file and now put all administrative actions into the vicidial_admin_log table in MySQL. These logs are displayed to user_level 9 users in admin.php through a link on the REPORTS screen, and at the bottom of the other screens (USERS, CAMPAIGNS, LISTS, etc...)you can click on the "Click here to see Admin chages to this record" link to find out the most recent changes to that record.
58. Added uniform admin headers to all administrative pages and reports
59. Added Calls Export Utility allowing exporting of call and lead data by defining the following parameters: date range, campaigns, in-groups, statuses, lists and user groups. A flat tab-delimited text file is exported.
60. Added new monitoring functionality to allow monitoring from one agent to another without hanging up
61. Added Russian and Dutch agent interface translations
@@ -0,0 +1,649 @@
# Quick install of required apps v.2.2.0 2009-03-15
# This file is a supplement to the BASE_INSTALL document giving you simple copy/
# paste installation shell commands for required and helper apps for VICIDIAL
# might need: echo '/* Linuxthreads */' >> /usr/include/pthread.h
cd /usr/local
wget http://mirrors.kernel.org/gnu/make/make-3.81.tar.gz
gunzip make-3.81.tar.gz
tar xvf make-3.81.tar
cd make-3.81
./configure
make
make install
cd /usr/local/
wget http://files.directadmin.com/services/all/mysql/mysql-5.0.67.tar.gz
gunzip mysql-5.0.67.tar.gz
tar xvf mysql-5.0.67.tar
cd mysql-5.0.67
groupadd mysql
useradd -g mysql mysql
./configure --prefix=/usr/local/mysql --enable-shared=yes --with-readline --enable-thread-safe-client --enable-large-files --enable-assembler --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static --with-big-tables
make
make install
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin/
export PATH
PATH=$PATH:$HOME/bin:/usr/local/mysql/include/mysql/
export PATH
cp /usr/local/mysql-5.0.67/libmysql/.libs/libmysqlclient.so /usr/lib/
cp /usr/local/mysql-5.0.67/libmysql/.libs/libmysqlclient.so.15 /usr/lib/
cd /usr/local/mysql-5.0.67
scripts/mysql_install_db
chown -R root /usr/local/mysql
chown -R mysql /usr/local/mysql/var
chgrp -R mysql /usr/local/mysql
cp support-files/my-huge.cnf /etc/my.cnf
/usr/local/mysql/bin/mysqld_safe --user=mysql --skip-name-resolve --skip-host-cache &
ln -s /tmp/mysql.sock /var/run/mysql/mysql.sock
vi /etc/my.cnf
# add this line below 'skip-locking'
skip-name-resolve
# comment out the line 'log-bin=mysql-bin'
max_connections = 200
perl -MCPAN -e shell
install MD5
install Digest::MD5
install Digest::SHA1
install readline
install Bundle::CPAN
install DBI
force install DBD::mysql
install Net::Telnet
install Time::HiRes
install Net::Server
install Switch
install Mail::Sendmail
install Unicode::Map
install Jcode
install OLE::Storage_Lite
install Spreadsheet::WriteExcel
install Proc::ProcessTable
install IO::Scalar
install Spreadsheet::ParseExcel
install Archive::Zip
install Compress::Raw::Zlib
install Spreadsheet::XLSX
install Test::Tester
install Spreadsheet::ReadSXC
install Text::CSV
install Test::NoWarnings
install Text::CSV_PP
install File::Temp
install Text::CSV_XS
install Spreadsheet::Read
quit
cd /usr/local
wget http://asterisk.gnuinter.net/files/asterisk-perl-0.08.tar.gz
gunzip asterisk-perl-0.08.tar.gz
tar xvf asterisk-perl-0.08.tar
cd asterisk-perl-0.08
perl Makefile.PL
make all
make install
cd /usr/local
wget http://easynews.dl.sourceforge.net/sourceforge/lame/lame-3.96.1.tar.gz
gunzip lame-3.96.1.tar.gz
tar xvf lame-3.96.1.tar
cd lame-3.96.1
./configure
make
make install
cd /usr/local
wget http://easynews.dl.sourceforge.net/sourceforge/sox/sox-14.0.1.tar.gz
gunzip sox-14.0.1.tar.gz
tar xvf sox-14.0.1.tar
cd sox-14.0.1
./configure --disable-shared
make
make install
cd /usr/local
wget http://ftp.gnu.org/gnu/screen/screen-4.0.2.tar.gz
gunzip screen-4.0.2.tar.gz
tar xvf screen-4.0.2.tar
cd screen-4.0.2
./configure
make
make install
cd /usr/local
wget http://www.daveltd.com/src/util/ttyload/ttyload-0.5.tar.gz
gunzip ttyload-0.5.tar.gz
tar xvf ttyload-0.5.tar
cd ttyload-0.5
make
ln -s /usr/local/ttyload-0.5/ttyload /usr/bin/ttyload
cd /usr/local
wget http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2/ntp-4.2.2p3.tar.gz
gunzip ntp-4.2.2p3.tar.gz
tar xvf ntp-4.2.2p3.tar
cd ntp-4.2.2p3
./configure
make
make install
/usr/local/bin/ntpdate -u pool.ntp.org
cd /usr/local
wget http://www.tcpdump.org/release/libpcap-0.9.4.tar.gz
gunzip libpcap-0.9.4.tar.gz
tar xvf libpcap-0.9.4.tar
cd libpcap-0.9.4
./configure
make
make install
cd /usr/local
wget http://www.ex-parrot.com/~pdw/iftop/download/iftop-0.17.tar.gz
gunzip iftop-0.17.tar.gz
tar xvf iftop-0.17.tar
cd iftop-0.17
./configure
make
make install
cd /usr/local
wget http://www.zlib.net/zlib-1.2.3.tar.gz
gunzip zlib-1.2.3.tar.gz
tar xvf zlib-1.2.3.tar
cd zlib-1.2.3
./configure
make
make install
cd /usr/local
wget http://ftp.arcane-networks.fr/pub/OpenBSD/OpenSSH/portable/openssh-5.2p1.tar.gz
gunzip openssh-5.2p1.tar.gz
tar xvf openssh-5.2p1.tar
cd openssh-5.1p1
./configure
make
make install
cd /usr/local
wget http://www.openssl.org/source/openssl-0.9.8k.tar.gz
gunzip openssl-0.9.8k.tar.gz
tar xvf openssl-0.9.8k.tar
cd openssl-0.9.8k
./config --prefix=/usr
make
make install
cd /usr/local
wget http://subversion.tigris.org/downloads/subversion-1.5.2.tar.gz
gunzip subversion-1.5.2.tar.gz
tar xvf subversion-1.5.2.tar
cd subversion-1.5.2
./configure
make
make install
cd /usr/local
wget http://superb-west.dl.sourceforge.net/sourceforge/ploticus/pl240src.tar.gz
gunzip pl240src.tar.gz
tar xvf pl240src.tar
cd pl240src/src/
make clean
make
make install
cd /usr/local
wget http://museum.php.net/php5/php-5.2.11.tar.gz
gunzip php-5.2.11.tar.gz
tar xvf php-5.2.11.tar
wget http://archive.apache.org/dist/httpd/httpd-2.2.13.tar.gz
gunzip httpd-2.2.13.tar.gz
tar xvf httpd-2.2.13.tar
cd httpd-2.2.13
make clean
./configure --prefix=/usr/local/apache2 --enable-ssl --enable-setenvif --enable-so --with-apxs2 --enable-dav --enable-maintainer-mode --with-ssl=/usr/local/ssl
make
make install
mkdir /usr/local/apache2/conf/ssl.key
mkdir /usr/local/apache2/conf/ssl.crt
mkdir /usr/local/apache2/conf/ssl.crl
openssl req -new -x509 -days 1200 -keyout /usr/local/apache2/conf/ssl.key/server.key.cpy -out /usr/local/apache2/conf/ssl.crt/server.crt -subj '/CN=10.10.10.15'
openssl rsa -in /usr/local/apache2/conf/ssl.key/server.key.cpy -out /usr/local/apache2/conf/ssl.key/server.key
cd ../php-5.2.11
make clean
./configure --with-mysql=/usr/local/mysql --enable-inline-optimization --enable-memory-limit --enable-track-vars --enable-libgcc --enable-sysvsem --with-openssl=/usr/local/ssl --with-apxs2=/usr/local/apache2/bin/apxs --with-zlib --enable-mbstring
make
make install
cp php.ini-dist /usr/local/lib/php.ini
vi /usr/local/apache2/conf/httpd.conf
add the following lines:
"AddType application/x-httpd-php .php .phtml"
"LoadModule php5_module modules/libphp5.so"
or
"LoadModule php5_module modules/libphp5.so"
modify the index.html line and add index.php to the list
to disable logging, change:
"CustomLog logs/access_log common"
to this:
"CustomLog /dev/null common"
to enable web browsing of Recordings on Asterisk server, add this:
Alias /RECORDINGS/ "/var/spool/asterisk/monitorDONE/"
<Directory "/var/spool/asterisk/monitorDONE">
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
OPTIONAL: USE ONLY FOR STANDALONE apache/php SERVER ONLY:
<IfModule prefork.c>
ServerLimit 768
StartServers 450
MinSpareServers 250
MaxSpareServers 500
MaxClients 768
MaxRequestsPerChild 1000
</IfModule>
vi /usr/local/lib/php.ini
Make sure short tags are enabled:
"short_open_tag = On"
some other fields to change if using web-based lead loader:
max_execution_time = 330
max_input_time = 360
post_max_size = 48M
upload_max_filesize = 42M
default_socket_timeout = 360
cd /usr/local
wget ftp://sanek508.net.ru/Soft/Http%20Server/eaccelerator-0.9.5.3.zip
unzip eaccelerator-0.9.5.3.zip
cd eaccelerator-0.9.5.3
export PHP_PREFIX="/usr/local"
$PHP_PREFIX/bin/phpize
./configure --enable-eaccelerator=shared --with-php-config=$PHP_PREFIX/bin/php-config
make
make install
vi /usr/local/lib/php.ini
Add the following lines to the dynamic extensions section of php.ini:
(you may need to change the extension location depending on your install of php)
zend_extension="../../../usr/local/eaccelerator-0.9.5.3/modules/eaccelerator.so"
eaccelerator.shm_size="48"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
mkdir /tmp/eaccelerator
chmod 0777 /tmp/eaccelerator
ls -l /tmp/eaccelerator
php -v
/usr/local/apache2/bin/apachectl startssl
cpan
install Curses
install Getopt::Long
install Net::Domain
quit
cd /usr/local
wget http://voxel.dl.sourceforge.net/project/mtop/mtop/v0.6.6/mtop-0.6.6.tar.gz
gunzip mtop-0.6.6.tar.gz
tar xvf mtop-0.6.6.tar
cd mtop-0.6.6
perl Makefile.PL
make
make install
/usr/local/bin/mtop --dbuser=root --seconds=3
cd /usr/local
wget http://download.berlios.de/sipsak/sipsak-0.9.6-1.tar.gz
gunzip sipsak-0.9.6-1.tar.gz
tar xvf sipsak-0.9.6-1.tar
cd sipsak-0.9.6
./configure
make
make install
/usr/local/bin/sipsak --version
#### OPTIONAL 1.2.X VERSIONS OF ASTERISK ####
(1.4.X instructions are further down)
mkdir /usr/src/asterisk
cd /usr/src/asterisk
wget http://downloads.digium.com/pub/asterisk/releases/asterisk-1.2.30.2.tar.gz
wget http://downloads.digium.com/pub/zaptel/releases/zaptel-1.2.27.tar.gz
wget http://downloads.digium.com/pub/libpri/releases/libpri-1.2.8.tar.gz
gunzip asterisk-1.2.30.2.tar.gz
tar xvf asterisk-1.2.30.2.tar
gunzip zaptel-1.2.27.tar.gz
tar xvf zaptel-1.2.27.tar
gunzip libpri-1.2.8.tar.gz
tar xvf libpri-1.2.8.tar
cd ./zaptel-1.2.27
wget http://download.vicidial.com/packages/newt-0.51.6.tar.gz
gunzip newt-0.51.6.tar.gz
tar xvf newt-0.51.6.tar
cd newt-0.51.6
./configure
make
make install
cd ../
ln -s /usr/lib/libnewt.so.0.51.6 /usr/lib/libnewt.so.0.51
make clean
make zttool
make
make install
cd ../libpri-1.2.8
make clean
make
make install
cd ../asterisk-1.2.30.2
cd apps
wget http://www.eflo.net/files/app_amd2.c
mv app_amd2.c app_amd.c
vi Makefile
replace this line(line 32):
app_mixmonitor.so app_stack.so
with this line:
app_mixmonitor.so app_stack.so app_amd.so
wget http://www.eflo.net/files/amd2.conf
mkdir /etc/asterisk
mv amd2.conf /etc/asterisk/amd.conf
wget http://www.eflo.net/files/meetme_DTMF_passthru-1.2.23.patch
patch -p1 < ./meetme_DTMF_passthru-1.2.23.patch
- File to patch: app_meetme.c
wget http://www.eflo.net/files/meetme_volume_control_1.2.16.patch
patch -p1 < ./meetme_volume_control_1.2.16.patch
- File to patch: app_meetme.c
cd ../
wget http://www.eflo.net/files/cli_chan_concise_delimiter.patch
patch -p1 < ./cli_chan_concise_delimiter.patch
- File to patch: cli.c
wget http://download.vicidial.com/asterisk-patches/1.2-gsm-gcc4.2.patch
patch -p1 ./codecs/gsm/Makefile 1.2-gsm-gcc4.2.patch
wget http://download.vicidial.com/asterisk-patches/app_waitforsilence.c
mv -f app_waitforsilence.c apps/app_waitforsilence.c
wget http://www.eflo.net/files/enter.h
wget http://www.eflo.net/files/leave.h
mv -f enter.h apps/enter.h
mv -f leave.h apps/leave.h
make clean
make
make install
make samples
cd /var/lib/asterisk/mohmp3/
mpg123 -s --rate 44100 --mono /var/lib/asterisk/mohmp3/fpm-sunshine.mp3 > /var/lib/asterisk/mohmp3/fpm-sunshine.raw
sox -r 44100 -w -s -c 1 fpm-sunshine.raw -r 8000 -c 1 fpm-sunshine.wav
sox fpm-sunshine.wav -t gsm -r 8000 -b -c 1 fpm-sunshine.gsm
sox fpm-sunshine.wav -t ul -r 8000 -b -c 1 fpm-sunshine.pcm
mpg123 -s --rate 44100 --mono /var/lib/asterisk/mohmp3/fpm-calm-river.mp3 > /var/lib/asterisk/mohmp3/fpm-calm-river.raw
sox -r 44100 -w -s -c 1 fpm-calm-river.raw -r 8000 -c 1 fpm-calm-river.wav
sox fpm-calm-river.wav -t gsm -r 8000 -b -c 1 fpm-calm-river.gsm
sox fpm-calm-river.wav -t ul -r 8000 -b -c 1 fpm-calm-river.pcm
mpg123 -s --rate 44100 --mono /var/lib/asterisk/mohmp3/fpm-world-mix.mp3 > /var/lib/asterisk/mohmp3/fpm-world-mix.raw
sox -r 44100 -w -s -c 1 fpm-world-mix.raw -r 8000 -c 1 fpm-world-mix.wav
sox fpm-world-mix.wav -t gsm -r 8000 -b -c 1 fpm-world-mix.gsm
sox fpm-world-mix.wav -t ul -r 8000 -b -c 1 fpm-world-mix.pcm
mkdir ../orig-mp3
mv -f *.mp3 ../orig-mp3/
mkdir ../quiet-mp3
cd ../quiet-mp3
sox -r 44100 -w -s -c 1 ../mohmp3/fpm-sunshine.raw -r 8000 -c 1 fpm-sunshine.wav vol 0.25
sox fpm-sunshine.wav -t gsm -r 8000 -b -c 1 fpm-sunshine.gsm
sox fpm-sunshine.wav -t ul -r 8000 -b -c 1 fpm-sunshine.pcm
sox -r 44100 -w -s -c 1 ../mohmp3/fpm-calm-river.raw -r 8000 -c 1 fpm-calm-river.wav vol 0.25
sox fpm-calm-river.wav -t gsm -r 8000 -b -c 1 fpm-calm-river.gsm
sox fpm-calm-river.wav -t ul -r 8000 -b -c 1 fpm-calm-river.pcm
sox -r 44100 -w -s -c 1 ../mohmp3/fpm-world-mix.raw -r 8000 -c 1 fpm-world-mix.wav vol 0.25
sox fpm-world-mix.wav -t gsm -r 8000 -b -c 1 fpm-world-mix.gsm
sox fpm-world-mix.wav -t ul -r 8000 -b -c 1 fpm-world-mix.pcm
rm -f ../mohmp3/*.raw
############# INSTRUCTIONS FOR Asterik 1.4 release ####################
Downgrading back to 1.2.X from 1.4.X:
rm -f /usr/lib/asterisk/modules/*
rm -f /usr/include/asterisk/*
NOTE: If you want to use Asterisk 1.4, you will need to make sure that you set
the servers table "asterisk_version" field to the proper version number and you
can use the docs/conf_examples/extensions.conf.sample-1.4 file for your default
dialplan
### If upgrading from 1.2.X Asterisk, run the following lines first:
rm -f /usr/lib/asterisk/modules/app_curl.so
rm -f /usr/lib/asterisk/modules/app_cut.so
rm -f /usr/lib/asterisk/modules/app_enumlookup.so
rm -f /usr/lib/asterisk/modules/app_eval.so
rm -f /usr/lib/asterisk/modules/app_groupcount.so
rm -f /usr/lib/asterisk/modules/app_math.so
rm -f /usr/lib/asterisk/modules/app_md5.so
rm -f /usr/lib/asterisk/modules/app_setcidname.so
rm -f /usr/lib/asterisk/modules/app_setcidnum.so
rm -f /usr/lib/asterisk/modules/app_setrdnis.so
rm -f /usr/lib/asterisk/modules/app_txtcidname.so
rm -f /usr/lib/asterisk/modules/chan_features.so
rm -f /usr/lib/asterisk/modules/format_au.so
rm -f /usr/lib/asterisk/modules/format_pcm_alaw.so
rm -f /usr/lib/asterisk/modules/pbx_functions.so
### If downgrading from 1.4.X Asterisk to 1.2.X asterisk:
rm -f /usr/lib/asterisk/modules/app_channelredirect.so
rm -f /usr/lib/asterisk/modules/app_followme.so
rm -f /usr/lib/asterisk/modules/app_morsecode.so
rm -f /usr/lib/asterisk/modules/app_speech_utils.so
rm -f /usr/lib/asterisk/modules/format_h264.so
rm -f /usr/lib/asterisk/modules/func_base64.so
rm -f /usr/lib/asterisk/modules/func_cdr.so
rm -f /usr/lib/asterisk/modules/func_channel.so
rm -f /usr/lib/asterisk/modules/func_curl.so
rm -f /usr/lib/asterisk/modules/func_cut.so
rm -f /usr/lib/asterisk/modules/func_db.so
rm -f /usr/lib/asterisk/modules/func_env.so
rm -f /usr/lib/asterisk/modules/func_global.so
rm -f /usr/lib/asterisk/modules/func_groupcount.so
rm -f /usr/lib/asterisk/modules/func_language.so
rm -f /usr/lib/asterisk/modules/func_logic.so
rm -f /usr/lib/asterisk/modules/func_math.so
rm -f /usr/lib/asterisk/modules/func_md5.so
rm -f /usr/lib/asterisk/modules/func_moh.so
rm -f /usr/lib/asterisk/modules/func_rand.so
rm -f /usr/lib/asterisk/modules/func_realtime.so
rm -f /usr/lib/asterisk/modules/func_sha1.so
rm -f /usr/lib/asterisk/modules/func_strings.so
rm -f /usr/lib/asterisk/modules/func_timeout.so
rm -f /usr/lib/asterisk/modules/res_clioriginate.so
rm -f /usr/lib/asterisk/modules/res_convert.so
rm -f /usr/lib/asterisk/modules/res_smdi.so
rm -f /usr/lib/asterisk/modules/res_snmp.so
rm -f /usr/lib/asterisk/modules/res_speech.so
##### Asterisk 1.4.21.2 with zaptel
mkdir /usr/src/asterisk-1.4
cd /usr/src/asterisk-1.4
wget http://downloads.digium.com/pub/asterisk/old-releases/asterisk-1.4.21.2.tar.gz
wget http://downloads.digium.com/pub/zaptel/zaptel-1.4.12.1.tar.gz
wget http://downloads.digium.com/pub/libpri/libpri-1.4.9.tar.gz
tar xzf asterisk-1.4.21.2.tar.gz
tar xzf zaptel-1.4.12.1.tar.gz
tar xzf libpri-1.4.9.tar.gz
cd libpri-1.4.9
make clean; make; make install
cd ../zaptel-1.4.12.1
./configure; make clean; make; make install
cd ../asterisk-1.4.21.2
wget http://www.eflo.net/files/enter.h
wget http://www.eflo.net/files/leave.h
mv -f enter.h apps/enter.h
mv -f leave.h apps/leave.h
wget http://download.vicidial.com/asterisk-patches/1.4-gsm-gcc4.2.patch
patch -p1 ./codecs/gsm/Makefile 1.4-gsm-gcc4.2.patch
wget http://download.vicidial.com/conf/res_agi_defunct.patch
patch -p1 < res_agi_defunct.patch
File to patch: res/res_agi.c
cd apps/
rm -f app_waitforsilence.c
wget http://download.vicidial.com/conf/app_waitforsilence.c
cd ../channels/
rm chan_sip.c
wget http://download.vicidial.com/conf/chan_sip.c
cd ../
./configure; make clean; make; make install
make samples
modprobe zaptel
modprobe ztdummy
##### Asterisk 1.4.27 with Dahdi
cd /usr/src/asterisk-1.4/
wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.4.26.3.tar.gz
wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.4.27-rc3.tar.gz
wget http://downloads.asterisk.org/pub/telephony/libpri/releases/libpri-1.4.10.2.tar.gz
wget http://downloads.asterisk.org/pub/telephony/dahdi-linux/releases/dahdi-linux-2.2.0.2.tar.gz
wget http://downloads.asterisk.org/pub/telephony/dahdi-tools/releases/dahdi-tools-2.2.0.tar.gz
tar xvfz dahdi-tools-2.2.0.tar.gz
tar xfz dahdi-linux-2.2.0.2.tar.gz
tar xfz libpri-1.4.10.2.tar.gz
tar xfz asterisk-1.4.27-rc3.tar.gz
tar xfz asterisk-1.4.26.3.tar.gz
cd ../dahdi-linux-2.2.0.2
make
make install
cd ../dahdi-tools-2.2.0
./configure
make
make install
make config
dahdi_genconf modules
dahdi_cfg
modprobe dahdi
cd ../libpri-1.4.10.2
./configure
make
make install
cd ../asterisk-1.4.27-rc3
wget http://download.vicidial.com/asterisk-patches/1.4-gsm-gcc4.2.patch
wget http://download.vicidial.com/asterisk-patches/moh-alpha-sort-1.4.26.2.patch
wget http://download.vicidial.com/asterisk-patches/netborder-cpd-1.4.patch
wget http://download.vicidial.com/asterisk-patches/app_waitforsilence.c-1.4
wget http://download.vicidial.com/asterisk-patches/leave.h
wget http://download.vicidial.com/asterisk-patches/enter.h
mv -f enter.h apps/enter.h
mv -f leave.h apps/leave.h
patch -p1 ./codecs/gsm/Makefile 1.4-gsm-gcc4.2.patch
patch -p1 < moh-alpha-sort-1.4.26.2.patch
patch -p1 < netborder-cpd-1.4.patch
./configure
make
make install
asterisk -vvvvvvvvvvvvvvvvvvgc
#### pureftpd FTP server installation instructions ####
cd /usr/local
wget ftp://ftp.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.20.tar.gz
gunzip pure-ftpd-1.0.20.tar.gz
tar xvf pure-ftpd-1.0.20.tar
cd pure-ftpd-1.0.20
groupadd ftpgroup
useradd -g ftpgroup -d /dev/null -s /etc ftpuser
./configure --with-everything --with-largefile --with-virtualchroot
make install-strip
pure-pw useradd cron -u ftpuser -d /home/cron
/usr/local/sbin/pure-ftpd &
NOTE: there is now a utility available to manage eaccelerator from a web interface:
#> cd /usr/src/eaccelerator-0.9.5.3
#> cp control.php /srv/www/htdocs/eaccelerator_control.php
#> cd /srv/www/htdocs/
#> vim eaccelerator_control.php
Edit the following two lines:
$user = "username";
$pw = "password";
#> vim /etc/php5/conf.d/eaccelerator.ini
Add the following line:
eaccelerator.allowed_admin_path = "/srv/www/htdocs/"
!!!!! FOR REFERENCE ONLY, WE CURRENTLY DO NOT SUPPORT THESE VERSIONS OF ASTERISK !!!!!
http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.4.36.tar.gz
http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.6.2.13.tar.gz
http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.8.0.tar.gz
http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-addons-1.4.12.tar.gz
http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-addons-1.6.2.2.tar.gz
@@ -0,0 +1,33 @@
This is the basic list of requirements for using astGUIclient. It is highly
recommended that you read the SCRATCH_INSTALL doc for more information on
installing the package properly.
Requirements for installing astGUIclient/VICIDIAL on an Asterisk server:
- Asterisk 1.2.27 and 1.4.21.2 recommended but will work with most older Asterisk versions
- ViciDial does NOT support Asterisk 1.6.X at this time due to stability issues
- Zap trunks(T1/E1 or PSTN lines), IAX2 trunks or SIP trunks required
- If using VOIP trunks and VICIDIAL auto-dial, you must have trunks registered
- It is strongly suggested that you have a zaptel timer like a PSTN/T1/E1 card or ztdummy
- Client phones can be SIP/IAX/Zap
- In extensions.conf you must use the 'o' Dial flag on your outbound extensions
- In extensions.conf you must have the following line in your default context:
exten => h,1,DeadAGI(agi://127.0.0.1:4577/call_log--HVcauses--PRI-----NODEBUG-----${HANGUPCAUSE}-----${DIALSTATUS}-----${DIALEDTIME}-----${ANSWEREDTIME}))
- No modification of outgoing callerID (you can set callerID through admin)
- Access to Apache/PHP webserver, php.ini memory_limit set to 48M
- In php.ini you must have uploads turned on to use the web lead loader
- Even so eAccelerator is technically not mandatory, it is strongly recommended.
- SoX 12.17.5 or greater must be installed
- GNU screen 3.9.15 or greater must be installed
- ntp must be installed and syncd to same time source as any other servers
- Perl5 with several CPAN modules(Time::HiRes, DBD::mysql, Net::Telnet, etc)
- asterisk-perl-0.08 perl module required (0.09 version does NOT work)
- Access to MySQL server and mysqlclientlibs, must be version 4.0.X or higher
- Several entries in the crontab for interval-running scripts and keepalives
Requirements for using the astGUIclient/VICIDIAL web-client versions
- Recommended 500MHz speed or faster and 64MB RAM or more
- Any Unix with Xwindows, Mac OS9/X or Win98/2k/XP operating system
- Recommended use Firefox for all OSs (will run under IE5.0 or greater as well)
Will also run on Opera 8.5+, Mozilla 1.7+, Netscape 8+ and IE 6.0
- ntp or sntp time syncing to same source as server recommended
- Proper configuration settings for each phone/computer in the phones DB table
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,144 @@
Configuring Sangoma's NetBorder CPA(Call Progress Analysis, aka ParaXip) to work with VICIDIAL.
This walk through assumes the following things:
- That you have a working installation of Vicidial that is able to place outbound calls. VICIbox Server (www.vicibox.com) will set this up for you.
- That you have the asterisk source code on the VICIDIAL server. VICIbox server installs Asterisk from source so it will meet this requirement.
- That you have a SIP Carrier that does not use an outbound proxy and is setup to use host based authentication.
- That you have used the Carrier configuration section of VICIDIAL to setup your SIP Carrier.
- That you have at least one phone setup on the VICIDIAL system and you are able to place outbound phone calls from this phone to your SIP Carrier.
- That you have a Windows system already setup. According to the NetBorder documentation, NetBorder works with Windows XP, Windows 2003 Server, or Windows Vista. We highly recommend installing it on Windows 2003 Server. It is possible, though not confirmed, that it will work on Windows Server 2008.
- The Windows system is able to ping your carrier and its firewall is configured to allow traffic on the following ports UDP 5060 to 5069 and 10000 to 20000 and TCP 5060 to 5069.
Section 1. NetBorder Installation.
Step 1. On the Windows system go to www.sangoma.com.
Step 2. Go to "Products and Solutions" -> "Software Building Blocks" -> "NetBorder(TM) Suite for Contact Centers" and click on "Call Analyzer Call Progress Analysis"
Step 3. Click on the "Try It Now!" tab.
Step 4. Click on the "Download now" button.
Step 5. Fill out the form and click the "Submit" button.
Step 6. The download should start. If not click the link to begin the download.
Step 7. Once the download is complete, unzip the file to the Desktop.
Step 8. Open the extracted directory.
Step 9. Run the ParaxipNetBorderSetup.VERSION.exe file.
Step 10. Read the License Agreement and then click "I Agree" (unless you don't. Then you should probably exit).
Step 11. Where it says "Call Progress Analysis Service" click the check box that is appropriate for your area of the world. For North America you would check the "North American models". Then click "Next".
Step 12. Next you will be prompted on where you want to install NetBorder. Change this if you like, then click "Install".
Step 13. During the install process, Windows may ask you if you want to unblock certain ports. If it does it means that the firewall is not properly configured. It needs to allow traffic on the following ports UDP 5060 to 5069, UDP 10000 to 20000, and TCP 5060 to 5069.
Step 14. Once the installer is complete click the "Close" button.
Section 2. Initial NetBorder Configuration
Step 1. In the Windows Start menu click find the Paraxip NetBorder section and click on the "Start Session Controller" short cut.
Step 2. Go to the Windows Control Panel and double click on "Administrative Tools".
Step 3. Double click on Services.
Step 4. Scroll down to the Paraxip services and verify that the "Paraxip NetBorder Session Controller" and "Paraxip NetBorder Call Progress Analysis" services are both started. If they have not you will need to contact Sangoma's technical support staff.
Step 5. To start these services automatically when Windows starts right click each of them and click on Properties. Then change the Startup Type from Manual to Automatic.
Step 6. Reboot the windows system to verify that these services start on boot up.
Step 7. Once the windows system is back up, log in and go back to Services in the Administrative Tools (see step 16).
Step 8. Scroll back down to the Paraxip Section and verify that the "Paraxip NetBorder Session Controller" and "Paraxip NetBorder Call Progress Analysis" services started on their own. If not, this might be caused by issues with your version of Windows. Contact Sangoma technical support for more details.
Step 9. Open up My Computer and browser to the directory where you installed Paraxip. The default should be "C:\Program Files\Paraxip NetBorder\".
Step 10. Open the "config" directory.
Step 11. Right click the "sip-hub.properties" file and click Open.
Step 12. Choose "Select the program from a list" and click OK.
Step 13. Choose "WordPad" from the available programs and click OK.
Step 14. Change the line that reads "paraxip.sip.userAgent.IPAddress=INADDER_ANY:5062/udp" to "paraxip.sip.userAgent.IPAddress=INADDER_ANY:5060/udp".
Step 15. Change the line that reads "#paraxip.net.primaryIPAddress=x.x.x.x" to "paraxip.net.primaryIPAddress=IPADRESS" where IPADDRESS is the IP address of the windows system. If you have two IP addresses change this to the one where paraxip will be accepting the connections from the VICIDIAL system (usually the internal IP).
Step 16. Go back to the NetBorder config directory and double click the cpa_media_uas.properties file (note windows may now be hiding the ".properties" at the end of the filename).
Step 17. Change the line that reads "#paraxip.net.primaryIPAddress=x.x.x.x" to "paraxip.net.primaryIPAddress=IPADRESS" where IPADDRESS is the IP address of the windows system just like you did in the sip-hub.properties file.
Section 2. Patching and recompiling Asterisk.
Step 1. On the Linux console of your VICIDIAL system change to the Asterisk source code directory (on a VICIbox Server installation this is located at /usr/src/asterisk-1.2.30.4). The command to do so will look something like this "cd /usr/src/asterisk-1.2.30.4".
Step 2. Copy the version (1.2 or 1.4) of the paraxip patch that matches the version of Asterisk which is installed on your VICIDIAL system from the extras directory of the VICIDIAL source code (on a VICIbox Server installation this is the 1.2 version and it is located in the /usr/src/astguiclient/extras/ directory) to the asterisk source code directory. The command to do so will look something like this "cp /usr/src/astguiclient/extras/vicidial_paraxip_chan_sip-1.2.patch ." Adjust this command according to the location of your VICIDIAL source code and the version of asterisk that you are using(new version for Asterisk 1.4: netborder-cpd-1.4.patch).
Step 3. Patch the chan_sip.c file in the channels directory. The command to do so will look something like this "patch channels/chan_sip.c -p1 < vicidial_paraxip_chan_sip-1.2.patch". If you are using 1.4 asterisk be sure to adjust this command accordingly.
Step 4. Now it is time to recompile asterisk. If you are using 1.2 Asterisk the command to do so is this "make clean && make all && make install". If you are using 1.4 asterisk the command to do so is this "./configure && make clean && make all && make install". This process will take some time. What ever you do, do NOT run "make samples" as this will wipe out your existing asterisk configurations.
Section 3. Configuring your Carrier in VICIDIAL.
Step 1. Log into the VICIDIAL admin page and go to the Admin -> Carriers section.
Step 2. Click on the MODIFY link for your Carrier on the right hand side.
Step 3. In the "Account Entry" section add the following:
outboundproxy=NETBORDERIP
port=5060
Where NETBORDERIP is the ip address of the Windows system that you are running NetBorder on. If "outboundproxy" is already set for your carrier it may not be possible to use NetBorder with them.
Section 4. Testing.
Step 1. On the Linux console of your VICIDIAL system enter the Asterisk CLI by typing "asterisk -r".
Step 2. Using the phone that you have already configured to use with Vicidial try placing several test calls.
Step 3. If everything is configured correctly your call should go out to your carrier and connect. If not it is either a problem with your VICIDIAL carrier configuration, the patching of Asterisk, or with the Configuration of NetBorder.
Step 4. If step 3 worked correctly, you should now be able to set the "CPD AMD Action" in your campaigns. The process of which is explained in the VICIDIAL Managers Manual available from eflo.net.
Section 6. Final NetBorder Configuration.
Once you have successfully placed some test calls through ParaXip you should turn down the level of logging that NetBorder is performing. This will increase the number of calls NetBorder is able to handle.
Step 1. Go to NetBorder config directory and open the sip-hub.properties file.
Step 2. Find the line that reads "log4cplus.rootLogger=WARN, NTEVENTLOG, DEVUG_APPENDER, CALL_LOG_APPENDER" to "log4cplus.rootLogger=WARN, NTEVENTLOG".
Step 3. Find the line that reads "log4cplus.appender.NTEVENTLOG.filters.1.LogLevelMin=WARN" to "log4cplus.appender.NTEVENTLOG.filters.1.LogLevelMin=ERROR".
Step 4. Go to NetBorder config directory and open the cpa_media_uas.properties file.
Step 5. Find the line that reads "log4cplus.rootLogger=WARN, NTEVENTLOG, DEVUG_APPENDER, CALL_LOG_APPENDER" to "log4cplus.rootLogger=WARN, NTEVENTLOG".
Step 6. Find the line that reads "log4cplus.appender.NTEVENTLOG.filters.1.LogLevelMin=WARN" to "log4cplus.appender.NTEVENTLOG.filters.1.LogLevelMin=ERROR".
Step 7. Click the windows Start menu and go to the Paraxip NetBorder section and click the "Stop Session Controller" shortcut.
Step 8. Got back to the Paraxip NetBorder section of the Start menu and click the "Start Session Controller" shortcut.
Congratulations! The free trial of NetBorder CPA Analysis and Vicidial are now successfully integrated. The free trial has a limit of 30 concurrent channels. If you try and dial more than this your calls will fail. Also keep an eye on the CPU load on the windows system. If the load gets higher than 60% Paraxip will not be able to react in time. You might get choppy audio or a higher rate of false positives or false negatives.
VICIDIAL Additional statuses for pre-Answer results:
INSERT INTO vicidial_statuses values('CPDATB','CPD All-Trunks-Busy','N','N','UNDEFINED','N','N','N','N','N','N');
INSERT INTO vicidial_statuses values('CPDB','CPD Busy','N','N','UNDEFINED','N','N','N','N','N','N');
INSERT INTO vicidial_statuses values('CPDNA','CPD No-Answer','N','N','UNDEFINED','N','N','N','N','N','N');
INSERT INTO vicidial_statuses values('CPDREJ','CPD Reject','N','N','UNDEFINED','N','N','N','N','N','N');
INSERT INTO vicidial_statuses values('CPDINV','CPD Invalid-Number','N','N','UNDEFINED','N','N','N','N','N','N');
INSERT INTO vicidial_statuses values('CPDSUA','CPD Service-Unavailable','N','N','UNDEFINED','N','N','N','N','N','N');
INSERT INTO vicidial_statuses values('CPDSI','CPD Sit-Intercept','N','N','UNDEFINED','N','N','N','N','N','N');
INSERT INTO vicidial_statuses values('CPDSNC','CPD Sit-No-Circuit','N','N','UNDEFINED','N','N','N','N','N','N');
INSERT INTO vicidial_statuses values('CPDSR','CPD Sit-Reorder','N','N','UNDEFINED','N','N','N','N','N','N');
INSERT INTO vicidial_statuses values('CPDSUK','CPD Sit-Unknown','N','N','UNDEFINED','N','N','N','N','N','N');
INSERT INTO vicidial_statuses values('CPDSV','CPD Sit-Vacant','N','N','UNDEFINED','N','N','N','N','N','N');
INSERT INTO vicidial_statuses values('CPDUK','CPD Unknown','N','N','UNDEFINED','N','N','N','N','N','N');
INSERT INTO vicidial_statuses values('CPDERR','CPD Error','N','N','UNDEFINED','N','N','N','N','N','N');
Marketing Description of the Sangoma Netborder Call Analyzer:
Call Progress Analysis is the process of detecting pre-connect information about failed outbound call attempts and the destination partys media type for connected outbound calls.
Strictly speaking, Call Progress Analysis (CPA) is the automated determination by a piece of telecommunications equipment as to the result of dialing a number. For example, the result of the analysis might be a busy tone, an answered call, ringing at the other end but no answer after a preset number of rings or after a specified duration of time, and so on. The analysis involves detecting the various call progress tones generated by the telephone network as the call is put through.
Traditional Call Progress Analysis implementations rely on simple rule-based algorithms, which provide sub-optimal accuracy of speed of processing, leading to significant inefficiencies in operations. In a number of real-life campaigns, dialing applications often reach their target in less than 30% of the call attempts.
Call Analyzer's Call Progress Analysis engine is patent-pending technology that is built on statistical models that represent the potential outcomes of call attempts. The result is a virtual machine that learns the patterns of what constitutes a call attempt that result in a voice mail versus a live human versus a special intercept tone, etc. The Call Analyzer functions much like the human brain and is able to adapt to a wide variety of noise conditions, ringing patterns and telecom network conditions.
Sangoma has run its own internal benchmarking of various technologies, out of the box, without tuning; using a database of live recordings of approximately 5000 calls. Sangoma provides 15% increase in accuracy over competing technologies. While this does not constitute a guarantee, live deployments should experience similar results and performance over a statistically significant sample of calls.
Features:
* Best-in-industry accuracy and response time
With patent-pending algorithms, NetBorder Call Analyzer delivers the highest accuracy and fastest call delivery rates available for automated calling applications.
* Optimized Detection
o Configurable pre-connect tone detection
o Post-connect analysis
o End of Greeting
* Resilient against different calling conditions
Statistical models used by NetBorder Call Analyzer are robust, regardless of background noise and network conditions.
* Integrate via Standards-Based SIP
No proprietary Application Programming Interfaces. Support for both PSTN and VoIP networks.
* Operate in a dynamic environment
Call progress confidence measures enable the system to adapt according to contact center operating conditions.
* Streamlined tuning process The statistical approach eliminates the need for long and frequent tuning cycles of the call progress parameters.
@@ -0,0 +1,48 @@
Below are Timezone update instructions for Slackware and any generic Linux
install. Because of the changes in Daylight Savings Time in the USA ad Canada
in 2007, it becomes necessary to update your system's timezone info if you are
using a Linux distro that was released before 2006 and have not updated it.
SLACKWARE 10.2:
cd /
wget ftp://ftp.slackware.com/pub/slackware/slackware-10.2/patches/packages/glibc-zoneinfo-2.3.5-noarch-7_slack10.2.tgz
gunzip glibc-zoneinfo-2.3.5-noarch-7_slack10.2.tgz
tar xvf glibc-zoneinfo-2.3.5-noarch-7_slack10.2.tar
chmod 0777 install/doinst.sh
./install/doinst.sh
date
SLACKWARE 10.1:
cd /
ncftpget ftp://ftp.slackware.com/pub/slackware/slackware-10.1/patches/packages/glibc-zoneinfo-2.3.4-noarch-2_slack10.1.tgz
gunzip glibc-zoneinfo-2.3.4-noarch-2_slack10.1.tgz
tar xvf glibc-zoneinfo-2.3.4-noarch-2_slack10.1.tar
chmod 0777 install/doinst.sh
./install/doinst.sh
date
SLACKWARE 10.0:
cd /
ncftpget ftp://ftp.slackware.com/pub/slackware/slackware-10.0/patches/packages/glibc-zoneinfo-2.3.2-noarch-7_slack10.0.tgz
gunzip glibc-zoneinfo-2.3.2-noarch-7_slack10.0.tgz
tar xvf glibc-zoneinfo-2.3.2-noarch-7_slack10.0.tar
chmod 0777 install/doinst.sh
./install/doinst.sh
date
GENERIC LINUX TIMEZONE CHANGES(Example New York EST):
cd /tmp
ncftpget ftp://elsie.nci.nih.gov/pub/tzdata2007c.tar.gz
gunzip tzdata2007c.tar.gz
tar xvf tzdata2007c.tar
zic -d /tmp/zoneinfo northamerica
cp -f /tmp/zoneinfo/EST5EDT /usr/share/zoneinfo/
cp -f /tmp/zoneinfo/America/New_York /usr/share/zoneinfo/America/
zdump -v /usr/share/zoneinfo/EST5EDT | grep 2007
zdump -v /usr/share/zoneinfo/America/New_York | grep 2007
ln -fs /etc/localtime /usr/share/zoneinfo/EST5EDT
zdump -v /etc/localtime | grep 2007
date
@@ -0,0 +1,175 @@
Timeclock process flow 2008-05-12
** THIS TIMECLOCK FUNCTIONALITY PROCESS IS PLANNED FOR THE 2.0.5 RELEASE **
This will outline the process I have thought through for adding a timeclock component to the VICIDIAL system. The objective is to add the following features to make VICIDIAL a more well-rounded product:
- Allow vicidial users to clock-in to the system
- Allow vicidial managers to clock users in and out as well as edit timeclock records
- Maintain an audit trail for manager-modified records
- Add a SHIFT section to administration
- Have reports showing all timeclock totals for various parameters(user-group/time-period/user/current-status/etc...)
- ability to allow managers to alter timeclock records with audit trail
Future planned features:
- Allow restrictions of agent-login by shift
- Allow ability to not allow agents to log-in to any VICIDIAL page(admin or agent) without clocking in.
- reports showing user log activity outside of shift timeframes
Description:
The first new feature to be added to help with the overall adoption of this feature is the ability to have the system optionally generate unique userIDs as users are entered into the system. For this purpose a new auto-generate option has been added to the add-a-new-user and copy-user functions. This auto-generate feature will take the auto_user_add_value field in the system_settings table and check to see if an agent with that ID exists in the system. If they do, then 7 will be added to the number and checked again until a non-used number is found.
To facilitate more workforce management, as is desired with the addition of a timeclock function to VICIDIAL, I have decided to add a SHIFT structure to the system as well. This should allow for scheduling of user_groups of agents and will have the ability to not allow them to login if they try to login outside of their scheduled hours. A shift will have a start time and a length(to make running over midnight easier) as well as a list of the days of the week that the shift applies. Each user-group can have multiple shifts activated for it, for instance you may want a Monday-Friday shift of 9AM-5PM and a Saturday shift of 10AM to 4PM. In this case the user-group would have two shifts selected. Some reports will also be viewable by shift as well.
Newly Created Scripts:
timeclock.php - linked to from vicidial.php/admin.php/welcome.php to give easy access for users to use the timeclock and then go back to what they were doing.
timeclock_auto_logout.pl - script that runs at the defined system_settings.timeclock_end_of_day field that will go through all agents that are currently logged into the timeclock for the day and log them out with the AUTOLOGOUT event. Only runs once a day. Triggered by the ADMIN_keepalive_all.pl script. Defined to run by the '9' flag in the keepalive settings of the astguiclient.conf file
timeclock_report.php - report linked from the reports page that shows completed timeclock records by user and user-group across a timeframe
timeclock_edit.php - page that allows managers to edit existing completed timeclock records
More to come...
New associated features:
VICIDIAL Administrator Log:
The admin log will replace the older flat-file log of administrator and manager activity. This log will allow for much easier viewing of the changes that have taken place for a specific record and other activities that managers and administrators do from the VICIDIAL administration interface. There will be event types and record IDs that identify the kind of record and the specific record worked with by a specific administrator. This table will be utilized at first only by the timeclock apps, but as the code is developed it will fully replace the admin log file.
Administrator Sections:
USER
TIMECLOCK
CAMPAIGN
CAMPAIGN DIAL STATUS
CAMPAIGN HOPPER
CAMPAIGN STATUS
CAMPAIGN HOTKEY
CAMPAIGN RECYCLE
CAMPAIGN AUTO-ALT-DIAL
CAMPAIGN PAUSE CODE
CAMPAIGN LIST MIX
CAMPAIGN QC
LIST
LIST DNC
SCRIPT
FILTER
IN-GROUP
USER GROUP
REMOTE AGENT
PHONE
PHONE ALIAS
CALLTIME
STATE CALLTIME
SHIFT
CONFERENCE
VICIDIAL CONFERENCE
SERVER
SERVER TRUNK
SYSTEM SETTINGS
SYSTEM STATUS
STATUS CATEGORY
QC STATUS
REPORT
OTHER
The Database Changes:
# add field for auto-increment of users
ALTER TABLE system_settings ADD auto_user_add_value INT(9) UNSIGNED default '101';
UPDATE system_settings SET auto_user_add_value='2110';
# This table contains system shift information
CREATE TABLE vicidial_shifts (
shift_id VARCHAR(20) NOT NULL,
shift_name VARCHAR(50),
shift_start_time VARCHAR(4) default '0900',
shift_length VARCHAR(5) default '16:00',
shift_weekdays VARCHAR(7) default '0123456',
index (shift_id)
);
# add field for allowable shifts for user groups
ALTER TABLE vicidial_user_groups ADD group_shifts TEXT;
# This table contains the log of timeclock activity
CREATE TABLE vicidial_timeclock_log (
timeclock_id INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
event_epoch INT(10) UNSIGNED NOT NULL,
event_date DATETIME NOT NULL,
login_sec INT(10) UNSIGNED,
event VARCHAR(50) NOT NULL,
user VARCHAR(20) NOT NULL,
user_group VARCHAR(20) NOT NULL,
ip_address VARCHAR(15),
shift_id VARCHAR(20),
notes VARCHAR(255),
manager_user VARCHAR(20),
manager_ip VARCHAR(15),
event_datestamp TIMESTAMP NOT NULL,
tcid_link INT(9) UNSIGNED,
index (user)
);
# This table contains the current timeclock status of a user
CREATE TABLE vicidial_timeclock_status (
user VARCHAR(20) UNIQUE NOT NULL,
user_group VARCHAR(20) NOT NULL,
event_epoch INT(10) UNSIGNED,
event_date TIMESTAMP,
status VARCHAR(50),
ip_address VARCHAR(15),
shift_id VARCHAR(20),
index (user)
);
# This table contains the audit log of timeclock activity(non-editable)
CREATE TABLE vicidial_timeclock_audit_log (
timeclock_id INT(9) UNSIGNED NOT NULL,
event_epoch INT(10) UNSIGNED NOT NULL,
event_date DATETIME NOT NULL,
login_sec INT(10) UNSIGNED,
event VARCHAR(50) NOT NULL,
user VARCHAR(20) NOT NULL,
user_group VARCHAR(20) NOT NULL,
ip_address VARCHAR(15),
shift_id VARCHAR(20),
event_datestamp TIMESTAMP NOT NULL,
tcid_link INT(9) UNSIGNED,
index (timeclock_id),
index (user)
);
# system settings added fields to define the time when all logged-in agents are to be auto-logged out
ALTER TABLE system_settings ADD timeclock_end_of_day VARCHAR(4) default '0000';
ALTER TABLE system_settings ADD timeclock_last_reset_date DATE;
# vicidial_users added fields for permissions to allow users to edit timeclock_log records
ALTER TABLE vicidial_users ADD add_timeclock_log ENUM('1','0') default '0'
ALTER TABLE vicidial_users ADD modify_timeclock_log ENUM('1','0') default '0'
ALTER TABLE vicidial_users ADD delete_timeclock_log ENUM('1','0') default '0'
# added new table for administrator activity log
CREATE TABLE vicidial_admin_log (
admin_log_id INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
event_date DATETIME NOT NULL,
user VARCHAR(20) NOT NULL,
ip_address VARCHAR(15) NOT NULL,
event_section VARCHAR(30) NOT NULL,
event_type ENUM('ADD','COPY','LOAD','RESET','MODIFY','DELETE','SEARCH','LOGIN','LOGOUT','CLEAR','OTHER') default 'OTHER',
record_id VARCHAR(50) NOT NULL,
event_code VARCHAR(255) NOT NULL,
event_sql TEXT,
event_notes TEXT,
index (user),
index (event_section),
index (record_id)
);
@@ -0,0 +1,305 @@
Ubuntu VICIDIAL Install: 2009-09-13
### NOTE ###
If you just want a quick setup of ViciDial on Ubuntu, take a look at our
downloadable ViciBox server install ISO available at: http://www.vicibox.com
From a full default install of Ubuntu Server 8.0.4.3:
Open a terminal on the system
$ sudo su
$ passwd (set the root user's password)
$ apt-get update (retrieves the latest repository information)
$ apt-get upgrade (upgrades any out of date packages
$ apt-get install linux-headers-server (Used for zaptel compil)
$ reboot (reboot to use the new kernel)
'apt-get install' the following packages:
apache2 (web server)
apache2-mpm-prefork (multi threaded portion to apache2)
build-essential (this is the build tool chain for gcc)
iftop (this is a useful tool for looking at the network interface)
lame (this is a mp3 encoding tool)
libmysqlclient15-dev (library that lets programs connect to mysql)
libncurses5-dev
libploticus0-dev
libsox-fmt-all (encoding and decoding libraries for sox)
linux-source (needed if you are going to recompile the linux kernel)
mpg123 (mp3 playback utility for the commandline)
mtop (utility for monitoring mysql)
mysql-client-5.0 (command for connecting to mysql)
mysql-doc-5.0 (documentation for mysql)
mysql-server-5.0 (this will ask for a password you can just press enter a bunch of times)
mytop (utility for monitoring mysql)
ntp (time synchronization utility)
openssh-server (ssh server allows for remote connection)
php5 (base php files)
php5-cli (php command line interface (allows us to run php -v for eaccelerator))
php5-dev (development tools for php5 allows us to compile eaccelerator
php5-mysql (allows php5 to connect to a mysql server)
phpmyadmin (vicidial uses apache2 as its webserver please select this)
ploticus (this is what creates the graphs for the server performance screen)
screen (vicidial runs its core scripts in screen so this is REQUIRED)
sipsak (tool for sending various information to sip phones)
sox (command line encoding and decoding tool)
subversion (code versioning tool)
subversion-tools
unzip
libcurl3
curl
vim
Go to terminal:
$ cd /usr/src
$ tar -xjf linux-source-*.tar.bz2 (where * is the kernel version)
$ cpan
(press enter to go through the prompts. If you have a multi cored system you should enter the -j option when specified with n+1 as the value, where n is the number of CPUs you have in your system. Also enter UNINST=1 when asked. until you get to the mirror selection portion)
(select 3 mirror sites in your area)
> install MD5
> install Digest::SHA1
> install readline
> install Bundle::CPAN (do not change settings)
> quit
$ cpan (enter through questions until you get to the cpan prompt)
> o conf commit (saves the config changes)
> force install Scalar::Util
> install DBI
> force install DBD::mysql
> install Net::Server
> install Time::HiRes
> install Net::Telnet
> install Unicode::Map
> install Jcode
> install OLE::Storage_Lite
> install Spreadsheet::WriteExcel
> install Proc::ProcessTable
> install Spreadsheet::ParseExcel
> install Mail::Sendmail
> quit
$ cd /usr/src
$ wget http://asterisk.gnuinter.net/files/asterisk-perl-0.08.tar.gz
$ tar xzf asterisk-perl-0.08.tar.gz
$ cd asterisk-perl-0.08
$ perl Makefile.PL
$ make all
$ make install
$ cd /usr/src
$ wget http://www.daveltd.com/src/util/ttyload/ttyload-0.5.tar.gz
$ tar xzf ttyload-0.5.tar.gz
$ cd ttyload-0.5
$ make
$ make install
$ cd /usr/src
$ wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.zip
$ unzip eaccelerator-0.9.5.3.zip
$ cd eaccelerator-0.9.5.3
$ phpize
$ ./configure
$ make
$ make install
$ cd /etc/php5/conf.d/
$ vim eaccelerator.ini
> add the following to the eaccelerator.:
extension="eaccelerator.so"
eaccelerator.shm_size="48"
eaccelerator.cache_dir="/var/lib/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
$ mkdir /var/lib/eaccelerator
$ chmod 0777 /var/lib/eaccelerator
$ php -v
NOTE: You should see a line mentioning eaccelerator. If you do not or you get an error you have done something wrong
$ mkdir /usr/src/asterisk
$ cd /usr/src/asterisk
****FOR 1.2 asterisk run the following
$ wget http://downloads.digium.com/pub/asterisk/releases/asterisk-1.2.30.2.tar.gz
$ wget http://downloads.digium.com/pub/zaptel/releases/zaptel-1.2.27.tar.gz
$ wget http://downloads.digium.com/pub/libpri/releases/libpri-1.2.8.tar.gz
$ tar xzf asterisk-1.2.30.2.tar.gz
$ tar xzf zaptel-1.2.27.tar.gz
$ tar xzf libpri-1.2.8.tar.gz
$ cd libpri-1.2.8
$ make clean && make && make install
$ cd ../zaptel-1.2.27
$ make clean&& make && make install
$ cd ../asterisk-1.2.30.2
$ cd apps
$ wget http://www.eflo.net/files/app_amd2.c
$ mv app_amd2.c app_amd.c
$ vi Makefile
replace this line(line 32):
app_mixmonitor.so app_stack.so
with this line:
app_mixmonitor.so app_stack.so app_amd.so
$ wget http://www.eflo.net/files/amd2.conf
$ mkdir /etc/asterisk
$ mv amd2.conf /etc/asterisk/amd.conf
$ wget http://www.eflo.net/files/meetme_DTMF_passthru-1.2.23.patch
$ patch -p1 < ./meetme_DTMF_passthru-1.2.23.patch
File to patch: app_meetme.c
$ wget http://www.eflo.net/files/meetme_volume_control_1.2.16.patch
$ patch -p1 < ./meetme_volume_control_1.2.16.patch
File to patch: app_meetme.c
$ cd ../
$ wget http://www.eflo.net/files/cli_chan_concise_delimiter.patch
$ patch -p1 < ./cli_chan_concise_delimiter.patch
File to patch: cli.c
$ wget http://www.eflo.net/files/app_waitforsilence.c
$ mv app_waitforsilence.c apps/app_waitforsilence.c
$ wget http://www.eflo.net/files/enter.h
$ wget http://www.eflo.net/files/leave.h
$ mv -f enter.h apps/enter.h
$ mv -f leave.h apps/leave.h
$ vi codecs/gsm/Makefile
add OPTIMIZE=-O2 to the file before the ifneq section, to fix GSM audio problems
$ make clean; make; make installation
$ make samples
$ modprobe zaptel
$ modprobe ztdummy
****FOR 1.4 asterisk do the following:
$ wget http://downloads.vicidial.com/required-apps/asterisk-1.4.21.2-vic.tar.gz
$ wget http://downloads.digium.com/pub/zaptel/zaptel-1.4.12.1.tar.gz
$ wget http://downloads.asterisk.org/pub/telephony/libpri/old/libpri-1.4.10.1.tar.gz
$ tar xzf asterisk-1.4.21.2-vici.tar.gz
$ tar xzf zaptel-1.4.12.1.tar.gz
$ tar xzf libpri-1.4.9.tar.gz
$ cd libpri-1.4.9
$ make clean; make; make install
$ cd ../zaptel-1.4.12.1
$ ./configure; make clean; make; make install
$ cd ../asterisk-1.4.21.2
$ ./configure; make clean; make; make install
$ make samples
$ modprobe zaptel
$ modprobe ztdummy
$ asterisk -vvvvvvvvvvvvvvvvvvvvvvvvvvvvgc (to see if Asterisk runs)
> show version
> zap show status
> show application meetme
> stop now
**** for SVN 2.0.5 branch:
$ mkdir /usr/src/astguiclient
$ cd /usr/src/astguiclient
$ svn checkout svn://svn.eflo.net:43690/agc_2-X/branches/agc_2.0.5
$ cd agc_2.0.5
$ perl install.pl
**** for SVN 2.2.0 trunk:
$ mkdir /usr/src/astguiclient
$ cd /usr/src/astguiclient
$ svn checkout svn://svn.eflo.net:43690/agc_2-X/trunk
$ cd trunk
$ perl install.pl
: manual configuration [y]
: press enter until you get to webroot and set that to the following: /var/www
: press enter through to the Sample configuration files and set that to 'y'
: press enter through to the end of the script
$ cd /var/lib/asterisk/sounds
$ wget http://downloads.vicidial.com/conf/conf.gsm
$ cp conf.gsm park.gsm
$ mysql -p (enter the mysql root user's password you set earlier)
> CREATE DATABASE `asterisk` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
> GRANT SELECT,INSERT,UPDATE,DELETE,LOCK TABLES on asterisk.* TO cron@'%' IDENTIFIED BY '1234';
> GRANT SELECT,INSERT,UPDATE,DELETE,LOCK TABLES on asterisk.* TO cron@localhost IDENTIFIED BY '1234';
> use asterisk;
> \. /usr/src/astguiclient/trunk/extras/MySQL_AST_CREATE_tables.sql
> \. /usr/src/astguiclient/trunk/extras/first_server_install.sql
> \. /usr/src/astguiclient/trunk/extras/sip-iax_phones.sql
> quit
$ /usr/share/astguiclient/ADMIN_update_server_ip.pl --old-server_ip=10.10.10.15
$ /usr/share/astguiclient/ADMIN_area_code_populate.pl
$ cp /usr/src/astguiclient/trunk/extras/performance_test_leads.txt /usr/share/astguiclient/LEADS_IN/
$ /usr/share/astguiclient/VICIDIAL_IN_new_leads_file.pl --forcelistid=107 --forcephonecode=1
$ crontab -e
Add the following lines:
### recording mixing/compressing/ftping scripts
0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57 * * * * /usr/share/astguiclient/AST_CRON_audio_1_move_mix.pl
#0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57 * * * * /usr/share/astguiclient/AST_CRON_audio_1_move_VDonly.pl
1,4,7,10,13,16,19,22,25,28,31,34,37,40,43,46,49,52,55,58 * * * * /usr/share/astguiclient/AST_CRON_audio_2_compress.pl --MP3
#2,5,8,11,14,17,20,23,26,29,32,35,38,41,44,47,50,53,56,59 * * * * /usr/share/astguiclient/AST_CRON_audio_3_ftp.pl --MP3
### keepalive script for astguiclient processes
* * * * * /usr/share/astguiclient/ADMIN_keepalive_ALL.pl
### kill Hangup script for Asterisk updaters
* * * * * /usr/share/astguiclient/AST_manager_kill_hung_congested.pl
### updater for voicemail
* * * * * /usr/share/astguiclient/AST_vm_update.pl
### updater for conference validator
* * * * * /usr/share/astguiclient/AST_conf_update.pl
### flush queue DB table every hour for entries older than 1 hour
11 * * * * /usr/share/astguiclient/AST_flush_DBqueue.pl -q
### fix the vicidial_agent_log once every hour
33 * * * * /usr/share/astguiclient/AST_cleanup_agent_log.pl
### updater for VICIDIAL hopper
* * * * * /usr/share/astguiclient/AST_VDhopper.pl -q
### adjust the GMT offset for the leads in the vicidial_list table
1 1,7 * * * /usr/share/astguiclient/ADMIN_adjust_GMTnow_on_leads.pl --debug
### reset several temporary-info tables in the database
2 1 * * * /usr/share/astguiclient/AST_reset_mysql_vars.pl
### optimize the database tables within the asterisk database
3 1 * * * /usr/share/astguiclient/AST_DB_optimize.pl
## adjust time on the server with ntp
30 * * * * /usr/local/bin/ntpdate -u pool.ntp.org 2>/dev/null 1>&2
### VICIDIAL agent time log weekly summary report generation
2 0 * * 0 /usr/share/astguiclient/AST_agent_week.pl
### remove old recordings more than 7 days old
# 24 0 * * * /usr/bin/find /var/spool/asterisk/monitor -maxdepth 2 -type f -mtime +7 -print | xargs rm -f
### remove old vicidial logs and asterisk logs more than 2 days old
28 0 * * * /usr/bin/find /var/log/astguiclient -maxdepth 1 -type f -mtime +2 -print | xargs rm -f
29 0 * * * /usr/bin/find /var/log/asterisk -maxdepth 3 -type f -mtime +2 -print | xargs rm -f
$ cd /etc/init.d/
$ wget http://download.vicidial.com/ubuntu/vicidial
$ chmod +x vicidial
$ update-rc.d -f vicidial defaults
$ vim /etc/apache2/sites-available/default (add the following lines)
Alias /RECORDINGS/ "/var/spool/asterisk/monitorDONE/"
<Directory "/var/spool/asterisk/monitorDONE">
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
<files *.mp3>
Forcetype application/forcedownload
</files>
</Directory>
$ chmod 0777 /var/spool/asterisk/monitorDONE/
$ /etc/init.d/apache2 restart
$ vi /etc/fstab (add the following line to the end of the file)
tmpfs /var/spool/asterisk/monitor tmpfs rw 0 0
$ shutdown -r 0
$ screen -ls (should show at least 6 screens, one of which should be asterisk)
In a web browser, go to (http://YOUR_SERVER_IP_ADDRESS/vicidial/admin.php) to see if everything is working. You should also reboot at this point to make sure everything will start back up properly.
From here on you should follow the tutorials in the VICIDIAL Manager Manual(available at eflo.net)
+207
View File
@@ -0,0 +1,207 @@
# VICIDIAL.txt - description of the vicidial call center system
# pronounced (VEE-CHEE DIAL)
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 call handling at the same time.
Major 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
- Scalable to hundreds of seats
- Ability to use standard Telco lines and VOIP trunks
- Open-Source GPL licensed, with no software licensing cost
Complete 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 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 per campaign if no agent is available
- Ability to set outbound CallerID per campaign
- Ability to take inbound calls grabbing 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
- 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 Busy 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
- Internal DNC list can optionally be activated per campaign
- All calls are logged and statuses of calls are logged as well as agent time breakdowns
- Load Balancing across multiple inbound or outbound Asterisk servers is possible
- 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
- 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 agents to select a Pause Code when they are not active
- Ability for agents to control volume levels and mute themselves
- Outbound dialing is QueueMetrics-compatible
- Web-based administration
- Client web-app web pages available in English, Spanish, Greek, German, French, Italian, Polish, Portuguese and Brazillian Portuguese
- Admin web pages available in English, Spanish, Greek and German
Required components:
- Asterisk server with Zap, IAX2 or SIP trunks
- SIP/IAX/Zap phones(hard or soft single-line or multiple)
- Computer with proper software installed
- on Win32 Activestate perl
- on UNIX Xwindows Activestate perl recommended with perlTK libs loaded
- 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 three years now on up to 160 seats at
once across 8 separate Asterisk servers all using the same MySQL server and
dialing on the same campaigns. 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 if you
already have asterisk running
Process flow of a one-call-at-a-time call:
- all components are installed and running(with Asterisk and MySQL servers)
- user logs in to the client GUI [user/password/campaign]
- GUI assigns an open meetme extension to the user, this is called the
session_id
- GUI sends manager command ORIGINATE to connect the user to the meetme ext
- user clicks DIAL NEXT NUMBER and GUI UPDATEs first available number-to-call
in DB to PENDING status
- GUI SELECTs info on that number[name/address/...]
- GUI sends ORIGINATE command to call that client's number from meetme ext
- 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
- 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
- call is disconnected
- user selects disposition status of the call and clicks OK
- goes back to step 4 and repeats
Process flow of an auto-dial call:
- 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.
- 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.
- 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.
- 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
- The auto_dial app(AST_VDauto_dial.pl) will:
- count how many agents are READY,QUEUE,INCALL with updated
last_update_time in the last 2.5 seconds.
- look at the campaign's auto_dial_level to determine how many calls
should be placed each specific campaign on each server.
- update the vicidial_auto_calls records by searching for active
callerids in the vicidial_manager to see if they have hung up.
- count the number of active calls that are
occuring(vicidial_auto_calls records with a status of SENT,RINGING or
LIVE)
- place the calls for each server if the active calls is less than the
total that should be placed
- The auto_dial app will then:
- 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)
- 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
- delete the record from vicidial_hopper for that lead
- 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.
- 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
- 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
- The auto_dial_transfer_agent app takes the call and:
- immediately grabs the uniqueid and callerid of the call and updates
the vicidial_auto_calls record to LIVE
- 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])
- inserts the number_dialed and the caller_code in the vicidial_log
table for the uniqueid record of the call
- 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]
- if there are agents available[affected rows = 1](goto substep VII.)
- if there are no agents available:
- wait in 1 second increments and then checking substep IV.
- 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
- grabs the agent info from the vicidial_live_agents[conf_exten] and
does a redirect to the agent's meetme room.
- agent's app checks the vicidial_live_agents record every second for
itself to see if it is changed to QUEUE
- 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
- 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
@@ -0,0 +1,63 @@
NEW - New Lead - Lead has not been called, or cannot be called
QUEUE - Lead To Be Called - Lead is about to be sent to an agent
INCALL - Lead Being Called - Agent is talking to the lead
DROP - Agent Not Available - Call was dropped while customer was waiting for an agent
XDROP - Agent Not Available IN - Call was dropped while customer was waiting for an agent on an inbound call
NA - No Answer AutoDial - Any outbound call that does not receive an Answer signal(or other signal) from the carrier. This can include ring-no-answer, disconnected, carrier congestion and other errors
CALLBK - Call Back - Callback, both scheduled and non-scheduled
CBHOLD - Call Back Hold - Scheduled ANYONE callback that has not hit it's trigger, or an AGENTONLY callback
A - Answering Machine - Agent-defined Answering Machine
AA - Answering Machine Auto - Dialer-defined Answering Machine
AM - Answering Machine Sent to Mesg - AMD(Answering Machine Detection) call sent to a message to be played
AL - Answering Machine Msg Played - AMD(Answering Machine Detection) call sent to a message and message has been played
AFAX - Fax Machine Auto - Dialer-defined Fax Machine
B - Busy - Agent-defined Busy signal
AB - Busy Auto - Carrier-received Busy signal
DC - Disconnected Number - Agent-Defined Disconnected number
ADC - Disconnected Number Auto - Carrier-received Disconnected number
DEC - Declined Sale - Agent-defined status
DNC - DO NOT CALL - If defined, lead will also go in the VICIDIAL DNC list
DNCL - DO NOT CALL Hopper Match - status of a lead that matches the phone number of a lead that has been placed in the VICIDIAL DNC list
DNCC - DO NOT CALL Hopper Match Campaign- status of a lead that matches the phone number of a lead that has been placed in the VICIDIAL Campaign-specific DNC list for this Campaign
SALE - Sale Made - Agent-defined status
N - No Answer - Agent-defined status
NI - Not Interested - Agent-defined status
NP - No Pitch No Price - Agent-defined status
PU - Call Picked Up - Status that a call is changed to as soon as the carrier has sent the Answer signal and before the call is sent on to an agent
PM - Played Message - outbound broadcast or SURVEY campaign status for when a message has been played to the customer
XFER - Call Transferred - Call has been sent from an agent to a Closer agent
ERI - Agent Error - An agent has closed their browser before dispositioning a lead
DONEM - Agent placed a manual dial phone call and then closed their browser before dispositioning a lead
SVYEXT - Survey sent to Extension - Survey outbound campaign status only
SVYVM - Survey sent to Voicemail - Survey outbound campaign status only
SVYHU - Survey Hungup - Survey outbound campaign status only
SVYREC - Survey sent to Record - Survey outbound campaign status only
HXFER - Hold Recall Transfer to another in-group
HOLDTO - Hold time option call termination on inbound call
QVMAIL - Queue Abandon Voicemail Left
RQXFER - Re-Queue Transfer back to agent
CPDATB - Sangoma Call Progress Detection CPD All-Trunks-Busy
CPDB - Sangoma Call Progress Detection CPD Busy
CPDNA - Sangoma Call Progress Detection CPD No-Answer
CPDREJ - Sangoma Call Progress Detection CPD Reject
CPDINV - Sangoma Call Progress Detection CPD Invalid-Number
CPDSUA - Sangoma Call Progress Detection CPD Service-Unavailable
CPDSI - Sangoma Call Progress Detection CPD Sit-Intercept
CPDSNC - Sangoma Call Progress Detection CPD Sit-No-Circuit
CPDSR - Sangoma Call Progress Detection CPD Sit-Reorder
CPDSUK - Sangoma Call Progress Detection CPD Sit-Unknown
CPDSV - Sangoma Call Progress Detection CPD Sit-Vacant
CPDUK - Sangoma Call Progress Detection CPD Unknown
CPDERR - Sangoma Call Progress Detection CPD Error
TIMEOT - Inbound call Drop Timeout, call waited until drop-seconds and was sent on to the drop action
AFTHRS - Inbound after hours drop, call received outside of in-group call time
NANQUE - Inbound no agent no queue drop, no agent logged in
RAXFER - Remote Agent API transfer
ALTNUM - Agent manual Dial Alternate number dialing, number dialed before final disposition
DISPO - Agent in disposition screen when they closed their web browser wiithout selecting dispisition
WAITTO - Wait time option call termination on inbound call
PDROP - Pre-routing dropped call, call hung up the instant the Answer signal is received
IVRXFR - Outbound drop to Call Menu
SVYCLM - Survey sent to Call Menu - Survey outbound campaign status only
MLINAT - Multi-Lead auto-alt-dial lead set to inactive
MAXCAL - Max Calls drop from in-group
+357
View File
@@ -0,0 +1,357 @@
VICIDIAL and Vtiger
Current VICIDIAL integration with Vtiger is for the 5.1.0 release version of Vtiger only (we also have support for older Vtiger 5.0.4)
Current integration features:
- vicidial.php WEBFORM search for lead/account/vendor
- User synchronization of VICIDIAL users to Vtiger user database
- User Group synchronization of VICIDIAL user groups to Vtiger Groups
- Added activity event option(call logging in Vtiger) when going from VICIDIAL to Vtiger
(Or this can be done in the background without having to use the web form)
- Added ViciDial status synchronization after each call to set the siccode field in Vtiger to the last selected VICIDIAL status
- Ability to un-delete or resurrect deleted Accounts within Vtiger from the web form(this is a VICIDIAL campaign option)
- Ability to click-to-dial a phone number from a record in Vtiger screen to the vicidial.php screen
- Ability to click-to-dial from a Planned Activity record then have it changed to Held after VICIDIAL dispo
- Ability for an agent to click on a VC fax log or VC email log link to account for fax or email time through VICIDIAL
- Optional script to bulk load leads into Vtiger from a CSV file since Vtiger only seems to want to load 500 at a time:
Vtiger_IN_new_accounts_file.pl
- Batch Account synchronization through script to output new leads from Vtiger and update existing leads in the VICIDIAL system:
Vtiger_OUT_sync2VICIDIAL_file.pl then you run the VICIDIAL_IN_new_leads_file.pl script to load the new leads
There has been a basic vtiger integration option available in VICIDIAL since the 1.X release versions through the vtiger_search.php web script(when used as a web form in the campaign) that will search through the leads for the dialed phone number in vicidial.php and if it is not in the vtiger system as a lead then it will be put in as a new lead.
More in-depth integration with Vtiger is a bit complicated due to the fact that it has 312 database tables to start with(and you though VICIDIAL had a lot with about 70). Attempts at using the built-in 5.0.4 API structure were unsuccessful because of inaccurate documentation and the inability to use the modules easily outside of the vtiger directory tree without major reworking of the vtiger code, so we decided to have VICIDIAL work directly with the database instead. Unfortunately, working only with the database doesn't get you the whole way with Vtiger. For user synchronization you need to make sure that the patch(Vtiger504_vicidial.patch) is applied to Vtiger(see instructions below). Part of this patch is used to create blank user profile files so Vtiger will load properly with synchronized users from VICIDIAL. Vtiger doesn't check to see if these user profile files exist before trying to use them, so one thing this patch does is check if the files exist for each user, and if they do not, it will create them with a simple placeholder. Another purpose of this patch is to allow for click-to-dial phone numbers in Vtiger, so that the numbers will be dialed as manual dial calls in a VICIDIAL agent screen. For this to work you must have applied the patch, you need to have user 1000 set up in VICIDIAL with a password of 1234 and Agent API set to '1', and the agent needs to be logged into vicidial.php(there is also a VICIDIAL Campaign Detail option to automatically login to Vtiger when an agent logs into vicidial.php, this can log the agent into Vtiger within the SCRIPT tab or by opening a new browser window) then when the agent clicks on any phone number with a "VCcall:" label next to it, a call will be placed in their vicidial.php agent screen and the Vtiger window will be closed(or left open if using alternate patch) so that they can open it up again with the vicidial.php WEB FORM button in VICIDIAL.
Since the 2.0.5 release we have added the ability to initiate a callback from a Planned Event screen that also will alter the event to Held status after the call is dispositioned.
as of 2008-12-31, several user synchronization features have been added to allow for the creation of vtiger users from the vicidial_users user database. The vtiger_search.php script has also been updated to work with the current vtiger release 5.0.4. To enable the Vtiger integration features you will need to go to the Admin -> System Settings section of the admin.php Administration web page to set Vtiger Integration to enabled and configure the connection details for the Vtiger database.
There are options in the VICIDIAL Modify Campaign Detail screen that you can choose how you want the vtiger_search.php to search for a Vtiger record in the Vtiger system. If Vtiger integration is enabled in the system_settings then this setting will define where the vtiger_search.php page will search for the phone number that was entered. There are 4 options that can be used in this field:
ACCTID- This option works only for accounts and it will take the vicidial vendor_lead_code field and try to search for the Vtiger accountid. If unsuccessful it will try any other methods listed that you have selected.
ACCOUNT- This option will search through the Vtiger accounts and all contacts and sub-contacts for the phone number
VENDOR- This option will only search through the Vtiger vendors
LEAD- This option will search through the Vtiger leads only
NOTE: For this to work, you must have the vtiger_search.php set as your webform page, i.e.(http://10.10.10.15/vicidial/vtiger_search.php)
Multiple search options can be used for each campaign(in the VICIDIAL Campaign Detail screen), but on large databases this is not recommended. Default is LEAD. The order that you see the searching options above is the order in which they will be searched if you have selected multiple searching methods. If an account does not exist and you have LEAD selected as a search method, then(if the create lead option is enabled) it will insert the lead with that phone number and you will be taken to the edit screen for that lead when you go to the vtiger_search web page. There is also an option to log the call as an event in Vtiger that will associate with the Lead or Account that the agent screen is sent to. Vtiger recommends on standard equipment a limit of 50,000 account records, but many users report no issues with 100,000 or more account records in their Vtiger systems.
Here are the procedures to load leads into Vtiger, then output them from Vtiger and then load them into VICIDIAL:
(the vicidial_list.vendor_lead_code field[=vtiger_accounts.accountid] is used as a key between systems)
- put properly formatted CSV file into /usr/share/astguiclient/VTIGER_IN/
- /usr/share/astguiclient/Vtiger_IN_new_accounts_file.pl --duplicate-system-website
- /usr/share/astguiclient/Vtiger_OUT_sync2VICIDIAL_file.pl --duplicate-system-vendor
- /usr/share/astguiclient/VICIDIAL_IN_new_leads_file.pl --forcelistid=9988
Then to keep the two systems in sync you would run the last two steps every day or at some other interval.
For VICIDIAL users that are synchronized to Vtiger, the following user_level to roles repationships are used:
- user_level 9 - H2, CEO
- user_level 8 - H3, Vice President
- user_level 7 - H4, Sales Manager
- user_level 6 and lower - H5, Sales Man
Here are the SQL queries used by the vtiger_search.php script to find records in the vtiger system:
ACCTID:
$stmt="SELECT count(*) from vtiger_account where accountid='$vendor_id';";
ACCOUNT:
$stmt="SELECT count(*) from vtiger_account where phone='$phone' or otherphone='$phone' or fax='$phone';";
$stmt="SELECT count(*) from vtiger_contactdetails where phone='$phone' or mobile='$phone' or fax='$phone';";
$stmt="SELECT count(*) from vtiger_contactsubdetails where homephone='$phone' or otherphone='$phone' or assistantphone='$phone';";
VENDOR:
$stmt="SELECT count(*) from vtiger_vendor where phone='$phone';";
LEAD:
$stmt="SELECT count(*) from vtiger_leadaddress where phone='$phone' or mobile='$phone' or fax='$phone';";
Here is a short summary of the needed steps to install vtiger on your system:
NOTE: vtiger requires PHP5, APACHE2.2 and MySQL5,
see the REQUIRED_APPS.txt doc for install instructions for those packages
mysql
GRANT ALL on vtigercrm510.* TO vtiger@'%' IDENTIFIED BY 'vtuser';
GRANT ALL on vtigercrm510.* TO vtiger@localhost IDENTIFIED BY 'vtuser';
create database vtigercrm510;
quit
cd /usr/local/apache2/htdocs/
wget http://sourceforge.net/projects/vtigercrm/files/vtiger%20CRM%205.1.0/vtigercrm-5.1.0.tar.gz
tar xvfz vtigercrm-5.1.0.tar.gz
chmod -R 0777 vtigercrm
cd vtigercrm
ls -l
* in browser go to the following URL: http://ip-address/vtigetcrm/index.php
* enter contact info and click the START button at the bottom of the screen
* in system configuration set the database host to: <ip-address>
* database user/pass: vtiger/vtuser
* database name: vtigercrm510
* change default admin(vtadmin) and standarduser(vtuser) passwords
* click to install vtiger, then follow the on-screen instructions
# patch vtiger to fix issue with user synchronization and add click-to-dial:
cp /usr/src/astguiclient/trunk/extras/Vtiger510_vicidial_001_noclose.patch ./
patch -p1 < ./Vtiger510_vicidial_001_noclose.patch
To link specific Vtiger Roles to ViciDial user levels, you need to find the Vtiger user Role code "H5, H4, etc..." and then run these MySQL queries to set the relationship:
INSERT INTO vtiger_vicidial_roles SET user_level='1',vtiger_role='H5';
INSERT INTO vtiger_vicidial_roles SET user_level='2',vtiger_role='H5';
INSERT INTO vtiger_vicidial_roles SET user_level='3',vtiger_role='H5';
INSERT INTO vtiger_vicidial_roles SET user_level='4',vtiger_role='H5';
INSERT INTO vtiger_vicidial_roles SET user_level='5',vtiger_role='H5';
INSERT INTO vtiger_vicidial_roles SET user_level='6',vtiger_role='H5';
INSERT INTO vtiger_vicidial_roles SET user_level='7',vtiger_role='H4';
INSERT INTO vtiger_vicidial_roles SET user_level='8',vtiger_role='H3';
INSERT INTO vtiger_vicidial_roles SET user_level='9',vtiger_role='H2';
Now to explain the database side of things.
First, here is how users are stored in vtiger:
THE USER TABLES:
vtiger_users
vtiger_user2role
vtiger_users2group
vtiger_users_last_import
vtiger_users_seq
vtiger_usertype
TABLE DETAIL:
The vtiger_users table has the basic user information for users fo the vtiger system. An agent must have an entry in this table to be able to access the vtigers system. user_name is the field that is synchronized with the vicidial_users.user field in VICIDIAL.
mysql> describe vtiger_users;
+--------------------+--------------+------+-----+-----------------------------------------------------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+-----------------------------------------------------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| user_name | varchar(255) | YES | MUL | NULL | |
| user_password | varchar(30) | YES | MUL | NULL | |
| user_hash | varchar(32) | YES | | NULL | |
| cal_color | varchar(25) | YES | | #E6FAD8 | |
| first_name | varchar(30) | YES | | NULL | |
| last_name | varchar(30) | YES | | NULL | |
| reports_to_id | varchar(36) | YES | | NULL | |
| is_admin | varchar(3) | YES | | 0 | |
| currency_id | int(19) | NO | | 1 | |
| description | text | YES | | NULL | |
| date_entered | timestamp | NO | | CURRENT_TIMESTAMP | |
| date_modified | timestamp | NO | | 0000-00-00 00:00:00 | |
| modified_user_id | varchar(36) | YES | | NULL | |
| title | varchar(50) | YES | | NULL | |
| department | varchar(50) | YES | | NULL | |
| phone_home | varchar(50) | YES | | NULL | |
| phone_mobile | varchar(50) | YES | | NULL | |
| phone_work | varchar(50) | YES | | NULL | |
| phone_other | varchar(50) | YES | | NULL | |
| phone_fax | varchar(50) | YES | | NULL | |
| email1 | varchar(100) | YES | | NULL | |
| email2 | varchar(100) | YES | | NULL | |
| yahoo_id | varchar(100) | YES | | NULL | |
| status | varchar(25) | YES | | NULL | |
| signature | varchar(250) | YES | | NULL | |
| address_street | varchar(150) | YES | | NULL | |
| address_city | varchar(100) | YES | | NULL | |
| address_state | varchar(100) | YES | | NULL | |
| address_country | varchar(25) | YES | | NULL | |
| address_postalcode | varchar(9) | YES | | NULL | |
| user_preferences | text | YES | | NULL | |
| tz | varchar(30) | YES | | NULL | |
| holidays | varchar(60) | YES | | NULL | |
| namedays | varchar(60) | YES | | NULL | |
| workdays | varchar(30) | YES | | NULL | |
| weekstart | int(11) | YES | | NULL | |
| date_format | varchar(200) | YES | | NULL | |
| hour_format | varchar(30) | YES | | am/pm | |
| start_hour | varchar(30) | YES | | 10:00 | |
| end_hour | varchar(30) | YES | | 23:00 | |
| homeorder | varchar(255) | YES | | HDB,ALVT,PLVT,QLTQ,CVLVT,HLT,OLV,GRT,OLTSO,ILTI,MNL,OLTPO,LTFAQ | |
| activity_view | varchar(200) | YES | | Today | |
| lead_view | varchar(200) | YES | | Today | |
| imagename | varchar(250) | YES | | NULL | |
| deleted | int(1) | NO | | 0 | |
| defhomeview | varchar(100) | YES | | NULL | |
| confirm_password | varchar(30) | YES | | NULL | |
| tagcloud_view | int(1) | YES | | 1 | |
| internal_mailer | varchar(3) | NO | | 1 | |
| crypt_type | varchar(20) | NO | | MD5 | |
+--------------------+--------------+------+-----+-----------------------------------------------------------------+----------------+
mysql> select * from vtiger_users;
+----+--------------+------------------------------+----------------------------------+-----------+------------+---------------+---------------+----------+-------------+-------------+---------------------+---------------------+------------------+-------+------------+------------+--------------+------------+-------------+-----------+--------------------+--------+----------+--------+-----------+----------------+--------------+---------------+-----------------+--------------------+------------------+------+----------+----------+----------+-----------+-------------+-------------+------------+----------+-----------------------------------------------------------------+---------------+-----------+-----------+---------+-------------+------------------------------+---------------+-----------------+------------+
| id | user_name | user_password | user_hash | cal_color | first_name | last_name | reports_to_id | is_admin | currency_id | description | date_entered | date_modified | modified_user_id | title | department | phone_home | phone_mobile | phone_work | phone_other | phone_fax | email1 | email2 | yahoo_id | status | signature | address_street | address_city | address_state | address_country | address_postalcode | user_preferences | tz | holidays | namedays | workdays | weekstart | date_format | hour_format | start_hour | end_hour | homeorder | activity_view | lead_view | imagename | deleted | defhomeview | confirm_password | tagcloud_view | internal_mailer | crypt_type |
+----+--------------+------------------------------+----------------------------------+-----------+------------+---------------+---------------+----------+-------------+-------------+---------------------+---------------------+------------------+-------+------------+------------+--------------+------------+-------------+-----------+--------------------+--------+----------+--------+-----------+----------------+--------------+---------------+-----------------+--------------------+------------------+------+----------+----------+----------+-----------+-------------+-------------+------------+----------+-----------------------------------------------------------------+---------------+-----------+-----------+---------+-------------+------------------------------+---------------+-----------------+------------+
| 1 | admin | $1$ad$hsl2KFybNRnbXBa.b.WWv. | 21232f297a57a5a743894a0e4a801fc3 | #E6FAD8 | | Administrator | | on | 1 | | 2008-12-27 22:51:30 | 0000-00-00 00:00:00 | NULL | | | | | | | | mattf@vicidial.com | | | Active | | | | | | | NULL | NULL | NULL | NULL | NULL | NULL | yyyy-mm-dd | am/pm | 08:00 | 23:00 | HDB,ALVT,PLVT,QLTQ,CVLVT,HLT,OLV,GRT,OLTSO,ILTI,MNL,OLTPO,LTFAQ | This Week | Today | | 0 | NULL | $1$ad$peilFE10wX.4b0aIm7/.t/ | 1 | 1 | MD5 |
| 2 | standarduser | $1$st$k35HABw/iAKXXthyFMLPF/ | NULL | #E6FAD8 | | StandardUser | | off | 1 | | 2008-12-27 22:47:55 | 0000-00-00 00:00:00 | NULL | | | | | | | | mattf@vicidial.com | | | Active | | | | | | | NULL | NULL | NULL | NULL | NULL | NULL | yyyy-mm-dd | 24 | 08:00 | 23:00 | HDB,ALVT,PLVT,QLTQ,CVLVT,HLT,OLV,GRT,OLTSO,ILTI,MNL,OLTPO,LTFAQ | This Week | Today | | 0 | NULL | $1$st$1iX6Nfn6NbdWdlCljgg3u1 | 1 | 1 | MD5 |
| 4 | 6666 | $1$66$WpuoymV3Cudgm3vI8xWY.0 | 81dc9bdb52d04dc20036dbd8313ed055 | #E6FAD8 | NULL | Admin | NULL | on | 1 | NULL | 2008-12-31 13:32:23 | 0000-00-00 00:00:00 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | Active | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | am/pm | 10:00 | 23:00 | HDB,ALVT,PLVT,QLTQ,CVLVT,HLT,OLV,GRT,OLTSO,ILTI,MNL,OLTPO,LTFAQ | Today | Today | NULL | 0 | NULL | NULL | 1 | 1 | MD5 |
+----+--------------+------------------------------+----------------------------------+-----------+------------+---------------+---------------+----------+-------------+-------------+---------------------+---------------------+------------------+-------+------------+------------+--------------+------------+-------------+-----------+--------------------+--------+----------+--------+-----------+----------------+--------------+---------------+-----------------+--------------------+------------------+------+----------+----------+----------+-----------+-------------+-------------+------------+----------+-----------------------------------------------------------------+---------------+-----------+-----------+---------+-------------+------------------------------+---------------+-----------------+------------+
This table stores the role of the vtiger users. VICIDIAL users will by default be set to H5(Sales Man), user_level 8 vicidial_users will be set to H4(Sales Manager) and user_level 9 vicidial_users will be set to H2(CEO).
mysql> describe vtiger_user2role;
+--------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| userid | int(11) | NO | PRI | | |
| roleid | varchar(255) | NO | MUL | | |
+--------+--------------+------+-----+---------+-------+
mysql> select * from vtiger_user2role;
+--------+--------+
| userid | roleid |
+--------+--------+
| 1 | H2 |
| 2 | H3 |
+--------+--------+
All VICIDIAL users will be entered into the Team Selling(groupid 1)
mysql> describe vtiger_users2group;
+---------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+---------+------+-----+---------+-------+
| groupid | int(19) | NO | PRI | | |
| userid | int(19) | NO | PRI | | |
+---------+---------+------+-----+---------+-------+
mysql> select * from vtiger_users2group;
+---------+--------+
| groupid | userid |
+---------+--------+
| 2 | 1 |
| 1 | 2 |
| 2 | 2 |
| 3 | 2 |
+---------+--------+
mysql> describe vtiger_users_last_import;
+------------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------+-------------+------+-----+---------+----------------+
| id | int(36) | NO | PRI | NULL | auto_increment |
| assigned_user_id | varchar(36) | YES | MUL | NULL | |
| bean_type | varchar(36) | YES | | NULL | |
| bean_id | varchar(36) | YES | | NULL | |
| deleted | int(1) | NO | | 0 | |
+------------------+-------------+------+-----+---------+----------------+
This table keeps the sequence number of the auto-incremented vtiger_users.id field
mysql> describe vtiger_users_seq;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id | int(11) | NO | | | |
+-------+---------+------+-----+---------+-------+
mysql> select * from vtiger_users_seq;
+----+
| id |
+----+
| 2 |
+----+
mysql> describe vtiger_usertype;
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| usertypeid | int(19) | NO | PRI | NULL | auto_increment |
| usertype | varchar(200) | NO | UNI | | |
| sortorderid | int(19) | NO | | 0 | |
| presence | int(1) | NO | | 1 | |
+-------------+--------------+------+-----+---------+----------------+
## Logging calls in Vtiger:
vtiger_crmentity_seq - increment once to account for call log and use for activity ID
vtiger_activity - Where calls are logged
vtiger_cntactivityrel - links a contact to an activity(call)
vtiger_salesmanactivityrel - links a user to an activity(call)
vtiger_seactivityrel - links crmid(account) to an activity(call)
vtiger_seactivityrel_seq - does not appear to be used
mysql> describe vtiger_activity;
+------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| activityid | int(19) | NO | PRI | 0 | |
| subject | varchar(100) | NO | | | |
| semodule | varchar(20) | YES | | NULL | |
| activitytype | varchar(200) | NO | MUL | | |
| date_start | date | NO | MUL | | |
| due_date | date | YES | | NULL | |
| time_start | varchar(50) | YES | | NULL | |
| time_end | varchar(50) | YES | | NULL | |
| sendnotification | varchar(3) | NO | | 0 | |
| duration_hours | varchar(2) | YES | | NULL | |
| duration_minutes | varchar(200) | YES | | NULL | |
| status | varchar(200) | YES | MUL | NULL | |
| eventstatus | varchar(200) | YES | MUL | NULL | |
| priority | varchar(200) | YES | | NULL | |
| location | varchar(150) | YES | | NULL | |
| notime | varchar(3) | NO | | 0 | |
| visibility | varchar(50) | NO | | all | |
| recurringtype | varchar(200) | YES | | NULL | |
+------------------+--------------+------+-----+---------+-------+
activityid: 12
subject: VICIDIAL call
semodule: NULL
activitytype: Call
date_start: 2009-01-11
due_date: 2009-01-11
time_start: 07:00
time_end: 07:05
sendnotification: 0
duration_hours: 0
duration_minutes: 5
status:
eventstatus: Held
priority: Medium
location: Dialer
notime: 0
visibility: Public
recurringtype: --None--
Files edited within Vtiger to allow for click-to-dial and user integration:
./include/utils/ListViewUtils.php
./Smarty/templates/DetailViewFields.tpl
./Smarty/templates/DetailViewUI.tpl
./include/js/general.js
./include/js/dtlviewajax.js
./vtigerservice.php
./include/utils/UserInfoUtil.php
Click-to-dial:
uitype = '11' for phone fields
uitype = '1' for fax
uitype = '13' for email
Use of custom fields for dates within Vtiger, these date fields will be updated by VICIDIAL if the status(siccode) update option is set to Y:
mysql> select * from vtiger_field where fieldlabel LIKE "%Date%" and fieldname LIKE "cf%";
+-------+---------+------------+-------------------+---------------+--------+-----------+--------------------------+----------+----------+----------+---------------+----------+-------+-------------+------------+-------------+---------------------+-----------+
| tabid | fieldid | columnname | tablename | generatedtype | uitype | fieldname | fieldlabel | readonly | presence | selected | maximumlength | sequence | block | displaytype | typeofdata | quickcreate | quickcreatesequence | info_type |
+-------+---------+------------+-------------------+---------------+--------+-----------+--------------------------+----------+----------+----------+---------------+----------+-------+-------------+------------+-------------+---------------------+-----------+
| 6 | 475 | cf_474 | vtiger_accountscf | 2 | 5 | cf_474 | Date of Last Attempt | 0 | 0 | 0 | 100 | 15 | 10 | 1 | D~O | 1 | 0 | BAS |
| 6 | 533 | cf_532 | vtiger_accountscf | 2 | 5 | cf_532 | Date of Last Non-Contact | 0 | 0 | 0 | 100 | 50 | 10 | 1 | D~O | 1 | 0 | BAS |
| 6 | 535 | cf_534 | vtiger_accountscf | 2 | 5 | cf_534 | Date of Last Contact | 0 | 0 | 0 | 100 | 51 | 10 | 1 | D~O | 1 | 0 | BAS |
| 6 | 537 | cf_536 | vtiger_accountscf | 2 | 5 | cf_536 | Date of Last Sale | 0 | 0 | 0 | 100 | 52 | 10 | 1 | D~O | 1 | 0 | BAS |
+-------+---------+------------+-------------------+---------------+--------+-----------+--------------------------+----------+----------+----------+---------------+----------+-------+-------------+------------+-------------+---------------------+-----------+
mysql> select * from vtiger_accountscf where accountid='6762';
+-----------+------------+----------+------------+--------+------------+------------+------------+---------+----------+-----------------------------------+--------+---------------------+--------------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
| accountid | cf_456 | cf_464 | cf_474 | cf_530 | cf_532 | cf_534 | cf_536 | cf_538 | cf_540 | cf_542 | cf_544 | cf_546 | cf_548 | cf_550 | cf_552 | cf_554 | cf_556 | cf_558 | cf_560 | cf_562 | cf_564 | cf_566 | cf_568 |
+-----------+------------+----------+------------+--------+------------+------------+------------+---------+----------+-----------------------------------+--------+---------------------+--------------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
| 6762 | 2009-03-25 | 12:30 pm | 2009-03-09 | Sale | 2009-03-01 | 2009-03-09 | 2009-03-09 | 1500.75 | 30000.00 | Breakroom |##| Jan/San |##| Paper | Hot | Test Decision Maker | 610-701-9661 | | | | | | 1 | 1 | 1 | 1 | 0 |
+-----------+------------+----------+------------+--------+------------+------------+------------+---------+----------+-----------------------------------+--------+---------------------+--------------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
@@ -0,0 +1,108 @@
wget http://ftp.isc.org/isc/bind9/9.3.2/bind-9.3.2.tar.gz
gunzip bind-9.3.2.tar.gz
tar xvf bind-9.3.2.tar
cd bind-9.3.2
./configure
make
make install
locate -u
vi /etc/named.conf
vi /var/named/vicimarketing.zone
/usr/sbin/named-checkconf
/usr/sbin/named-checkzone
/usr/sbin/named-checkzone vicimarketing.com /var/named/vicimarketing.zone
vi /etc/named.conf
vi /etc/resolv.conf
/usr/sbin/named -d 9
To kill named:
killall -15 named
To run testing in foreground:
/usr/sbin/named -f -d 9
root@ftp:/# cat /var/named/vicimarketing.zone
;
; Zone file for vicimarketing.com
;
; The full zone file
;
$TTL 1H
@ IN SOA ftp.vicimarketing.com. sip.vicimarketing.com. (
200607101 ; serial#
3600 ; refresh, seconds
3600 ; retry, seconds
3600 ; expire, seconds
3600 ) ; minimum, seconds
;
NS ftp ; Inet Address of nameserver
vicimarketing.com. MX 10 email ; Primary Mail Exchanger
vicimarketing.com. MX 70 email2 ; Primary Mail Exchanger
;
localhost A 127.0.0.1
@ A 64.31.159.154
www A 64.31.159.154
www2 A 205.201.151.24
email A 205.201.151.23
email2 A 68.143.231.202
ftp A 205.201.151.22
rsc1 A 205.201.151.21
annex A 205.201.151.26
telcove A 64.31.159.154
tc2 A 64.31.159.155
codygate A 67.79.161.170
viciDB3 A 205.201.151.26
exchange A 10.10.10.5
ICIast20 CNAME www2
VICIast1 CNAME www2
app2 CNAME www2
cody CNAME codygate
sip CNAME ftp
gate3 CNAME www2
gate2 CNAME www
root@ftp:/# cat /etc/named.conf
options {
directory "/var/named";
forwarders { 209.84.253.11; 209.84.253.12; };
/*
* If there is a firewall between you and nameservers you want
* to talk to, you might need to uncomment the query-source
* directive below. Previous versions of BIND always asked
* questions using port 53, but BIND 8.1 uses an unprivileged
* port by default.
*/
// query-source address * port 53;
};
//
// a caching only nameserver config
//
zone "." IN {
type hint;
file "caching-example/named.ca";
};
zone "localhost" IN {
type master;
file "caching-example/localhost.zone";
allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "caching-example/named.local";
allow-update { none; };
};
zone "vicimarketing.com" {
type master;
notify no;
allow-query { any; };
file "vicimarketing.zone";
};
@@ -0,0 +1,3 @@
[general]
enable=yes ; enable creation of managed DNS lookups
refreshinterval=300 ; refresh managed DNS lookups every <n> seconds
@@ -0,0 +1,616 @@
[general]
static=yes
writeprotect=no
[globals]
CONSOLE=Console/dsp ; Console interface for demo
TRUNK=Zap/r1 ; Trunk interface
TRUNKX=Zap/r2 ; 2nd trunk interface
TRUNKIAX=IAX2/ASTtest1:test@10.10.10.16:4569 ; IAX trunk interface
TRUNKIAX1=IAX2/ASTtest1:test@10.10.10.16:4569 ; IAX trunk interface
TRUNKBINFONE=IAX2/1112223333:PASSWORD@iax.binfone.com ; IAX trunk interface
SIPtrunk=SIP/1234:PASSWORD@sip.provider.net ; SIP trunk
#include extensions-vicidial.conf
[trunkinbound]
; DID call routing process
; exten => _XXXXXXXXXX,1,AGI(agi-DID_route.agi) ; use this one instead of the one below if you are having delay issues, and match to number of received digits
exten => _X.,1,AGI(agi-DID_route.agi)
; FastAGI for VICIDIAL/astGUIclient call logging
exten => h,1,DeadAGI(agi://127.0.0.1:4577/call_log--HVcauses--PRI-----NODEBUG-----${HANGUPCAUSE}-----${DIALSTATUS}-----${DIALEDTIME}-----${ANSWEREDTIME})
[loopback-no-log]
; This context is to accept calls that have already been logged in another context in Vicidial
; and has been sent through one of the loopbacks. This is why this context is missing the h extension.
; Do not put any extensions in this context unless you specifically understand what this means.
;exten => _91NXXNXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
;exten => _91NXXNXXXXXX,2,Dial(${TRUNKX}/${EXTEN:1},,To)
;exten => _91NXXNXXXXXX,3,Hangup
exten => _999XX11112,1,Wait(2)
exten => _999XX11112,2,Answer
exten => _999XX11112,3,Playback(ss-noservice)
exten => _999XX11112,4,Playback(vm-goodbye)
exten => _999XX11112,5,Hangup
[default]
include => vicidial-auto
; Local agent alert extensions
exten => _8600XXX*.,1,AGI(agi-VDADfixCXFER.agi)
exten => _78600XXX*.,1,AGI(agi-VDADfixCXFER.agi)
; Local blind monitoring
exten => _08600XXX,1,Dial(${TRUNKblind}/6${EXTEN:1},55,To)
; playback of recorded prompts
exten => _851XXXXX,1,Answer
exten => _851XXXXX,2,Playback(${EXTEN})
exten => _851XXXXX,3,Hangup
; this is used for playing a phone-recorded 851XXXXX audio file with waitforsilence
exten => _6851XXXXX,1,Answer()
exten => _6851XXXXX,n,WaitForSilence(2000,1,90)
exten => _6851XXXXX,n,Playback(sip-silence)
exten => _6851XXXXX,n,Playback(${EXTEN:1})
exten => _6851XXXXX,n,Hangup
exten => _7851XXXXX,1,Goto(default,6${EXTEN:1},1)
; FastAGI for VICIDIAL/astGUIclient call logging
exten => h,1,DeadAGI(agi://127.0.0.1:4577/call_log--HVcauses--PRI-----NODEBUG-----${HANGUPCAUSE}-----${DIALSTATUS}-----${DIALEDTIME}-----${ANSWEREDTIME})
; Example phone extensions
; 100-350 phone extensions now auto-generated, so no need to uncommend them
; extensions for other SIP and IAX call center phones
; cc100-cc150 SIP Phones
;exten => _1[0-5]X,1,Dial(sip/cc${EXTEN},20,to)
; cc300-cc350 IAX Phones
;exten => _3[0-5]X,1,Dial(IAX2/cc${EXTEN},20,to)
; extensions if using a T1 channelbank
;exten => _19XX,1,Dial(Zap/${EXTEN:2},30,o)
;exten => _19XX,2,Hangup
; Extension 4001 rings Zap phone (this example for FXS on Zap port 1)
;exten => 4001,1,Dial(Zap/1,30,o) ; ring Zap device 1
;exten => 4001,2,Voicemail,u4001 ; Send to voicemail...
; # timeout invalid rules
exten => #,1,Playback(invalid) ; "Thanks for trying the demo"
exten => #,2,Hangup ; Hang them up.
exten => t,1,Goto(#,1) ; If they take too long, give up
exten => i,1,Playback(invalid) ; "That's not valid, try again"
; Extensions for performance testing
exten => _91999NXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
exten => _91999NXXXXXX,2,Dial(${TRUNKloop}/${EXTEN:2},,tTo)
exten => _91999NXXXXXX,3,Hangup
exten => 999999999999,1,AGI(agi://127.0.0.1:4577/call_log)
exten => 999999999999,2,Dial(${TRUNKloop}/${EXTEN:1},,tTo)
exten => 999999999999,3,Hangup
; This is a loopback dialaround to allow for hearing of ringing for 3way calls
exten => _881NXXNXXXXXX,1,Answer
exten => _881NXXNXXXXXX,2,Dial(${TRUNKloop}/9${EXTEN:2},,To)
exten => _881NXXNXXXXXX,3,Hangup
; Vtiger fax and email log extensions
exten => _9118XXXXXXXX,1,Dial(${TRUNKblind}/9998818112,55,to)
exten => _9119XXXXXXXX,1,Dial(${TRUNKblind}/9998819112,55,to)
; CARRIER DIALING EXTENSIONS, USE THE ADMIN INTERFACE TO PROGRAM THESE
; dial an 800 outbound number
;exten => _91800NXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
;exten => _91800NXXXXXX,2,Dial(${TRUNK}/${EXTEN:1},,To)
;exten => _91800NXXXXXX,3,Hangup
;exten => _91888NXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
;exten => _91888NXXXXXX,2,Dial(${TRUNK}/${EXTEN:1},,To)
;exten => _91888NXXXXXX,3,Hangup
;exten => _91877NXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
;exten => _91877NXXXXXX,2,Dial(${TRUNK}/${EXTEN:1},,To)
;exten => _91877NXXXXXX,3,Hangup
;exten => _91866NXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
;exten => _91866NXXXXXX,2,Dial(${TRUNK}/${EXTEN:1},,To)
;exten => _91866NXXXXXX,3,Hangup
;exten => _91855NXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
;exten => _91855NXXXXXX,2,Dial(${TRUNK}/${EXTEN:1},,To)
;exten => _91855NXXXXXX,3,Hangup
; dial a long distance outbound number
; This 'o' Dial flag is VERY important for VICIDIAL on outbound calls
;exten => _91NXXNXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
;exten => _91NXXNXXXXXX,2,Dial(${TRUNKX}/${EXTEN:1},,To)
;exten => _91NXXNXXXXXX,3,Hangup
; dial a local outbound number (modified because of only LD T1)
;exten => _9NXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
;exten => _9NXXXXXX,2,Dial(${TRUNK}/1727${EXTEN:1},,To)
;exten => _9NXXXXXX,3,Hangup
; dial a local 727 outbound number with area code
;exten => _9727NXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
;exten => _9727NXXXXXX,2,Dial(${TRUNK}/1${EXTEN:1},,To)
;exten => _9727NXXXXXX,3,Hangup
; dial a long distance outbound number to the UK
; This 'o' Dial flag is VERY important for VICIDIAL on outbound calls,
;exten => _901144XXXXXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
;exten => _901144XXXXXXXXXX,2,Dial(${TRUNKX}/${EXTEN:1},55,To)
;exten => _901144XXXXXXXXXX,3,Hangup
; dial a long distance outbound number to Australia
; This 'o' Dial flag is VERY important for VICIDIAL on outbound calls,
;exten => _901161XXXXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
;exten => _901161XXXXXXXXX,2,Dial(${TRUNKX}/${EXTEN:1},,To)
;exten => _901161XXXXXXXXX,3,Hangup
; dial a long distance outbound number through BINFONE
; exten => _91NXXNXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
; exten => _91NXXNXXXXXX,2,Dial(${TRUNKIAX}/${EXTEN:1},55,To)
; exten => _91NXXNXXXXXX,3,Hangup
; dial a long distance outbound number through a SIP provider
; exten => _91NXXNXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
; exten => _91NXXNXXXXXX,2,Dial(sip/${EXTEN:1}@SIPtrunk,55,o)
; exten => _91NXXNXXXXXX,3,Hangup
; special extensions for North America to catch invalid phone numbers
; exten => _91XXX[0-1]XXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
; exten => _91XXX[0-1]XXXXXX,n,Dial(${TRUNKloop}/8889990011112,,to)
; exten => _91XXX[0-1]XXXXXX,n,Hangup
; exten => _91[0-1]XXXXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
; exten => _91[0-1]XXXXXXXXX,n,Dial(${TRUNKloop}/8889990011112,,to)
; exten => _91[0-1]XXXXXXXXX,n,Hangup
; exten => _91XXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
; exten => _91XXXXXX,n,Dial(${TRUNKloop}/8889990011112,,to)
; exten => _91XXXXXX,n,Hangup
; exten => _91XXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
; exten => _91XXXXXXX,n,Dial(${TRUNKloop}/8889990011112,,to)
; exten => _91XXXXXXX,n,Hangup
; exten => _91XXXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
; exten => _91XXXXXXXX,n,Dial(${TRUNKloop}/8889990011112,,to)
; exten => _91XXXXXXXX,n,Hangup
; exten => _91XXXXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
; exten => _91XXXXXXXXX,n,Dial(${TRUNKloop}/8889990011112,,to)
; exten => _91XXXXXXXXX,n,Hangup
; exten => _91XXXXXXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
; exten => _91XXXXXXXXXXX,n,Dial(${TRUNKloop}/8889990011112,,to)
; exten => _91XXXXXXXXXXX,n,Hangup
; exten => _91XXXXXXXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
; exten => _91XXXXXXXXXXXX,n,Dial(${TRUNKloop}/8889990011112,,to)
; exten => _91XXXXXXXXXXXX,n,Hangup
; exten => _91XXXXXXXXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
; exten => _91XXXXXXXXXXXXX,n,Dial(${TRUNKloop}/8889990011112,,to)
; exten => _91XXXXXXXXXXXXX,n,Hangup
; block calls to 555 numbers
; exten => _91NXX555NXXX,1,AGI(agi://127.0.0.1:4577/call_log)
; exten => _91NXX555NXXX,n,Dial(${TRUNKloop}/8889990011112,,to)
; exten => _91NXX555NXXX,n,Hangup
; dial a USA long distance outbound number through the loopback-no-log context
; exten => _91NXXNXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
; exten => _91NXXNXXXXXX,2,Dial(${TRUNKloop}/888${EXTEN:2},55,o)
; exten => _91NXXNXXXXXX,3,Hangup
;exten => 888NXXNXXXXXX,1,Goto(loopback-no-log,91${EXTEN:3},1)
exten => 8889990011112,1,Goto(loopback-no-log,9990011112,1)
; Inbound call from BINFONE
; exten => 1112223333,1,AGI(agi://127.0.0.1:4577/call_log)
; exten => 1112223333,2,Dial(sip/gs102,55,o)
; exten => 1112223333,3,Hangup
; Extension 7275551212 - Inbound local number from PRI with 10 digit delivery
;exten => 7275551212,1,Ringing
;exten => 7275551212,2,Wait(1)
;exten => 7275551212,3,AGI(agi://127.0.0.1:4577/call_log--fullCID--${EXTEN}-----${CALLERID}-----${CALLERIDNUM}-----${CALLERIDNAME})
;exten => 7275551212,4,Answer
;exten => 7275551212,5,Dial(sip/spa2000&sip/spa2001,30,To)
;exten => 7275551212,6,Voicemail,u2000
; parameters for call_inbound.agi (7 fields separated by five dashes "-----"):
; 1. the extension of the phone to ring as defined in the asterisk.phones table
; 2. the phone number that was called, for the live_inbound/_log entry
; 3. a text description of the number that was called in
; 4-7. optional fields, they are also passed as fields in the GUI to web browser
; This is not part of VICIDIAL, it is for astGUIclient agent use only
; Extension 3429 - Inbound 800 number (1-800-555-3429) example of RBS T1
; with 10 digit ANI and 4 digit DNIS star separated
;exten => _**3429,1,Ringing
;exten => _**3429,2,AGI(agi://127.0.0.1:4577/call_log)
;exten => _**3429,3,AGI(call_inbound.agi,spa2000-----8005553429-----Inbound 800-----x-----y-----z-----w)
;exten => _**3429,4,Answer
;exten => _**3429,5,Dial(sip/spa2000&sip/spa2001,30,to)
;exten => _**3429,6,Voicemail,u2000
; Extension 3429 - with ANI [callerID]
;exten => _*NXXNXXXXXX*3429,1,Ringing
;exten => _*NXXNXXXXXX*3429,2,AGI(agi://127.0.0.1:4577/call_log)
;exten => _*NXXNXXXXXX*3429,3,AGI(call_inbound.agi,spa2000-----8005553429-----Inbound 800-----x-----y-----z-----w)
;exten => _*NXXNXXXXXX*3429,4,Answer
;exten => _*NXXNXXXXXX*3429,5,Dial(sip/spa2000&sip/spa2001,30,to)
;exten => _*NXXNXXXXXX*3429,6,Voicemail,u2000
; parameters for agi-VDAD_ALL_inbound.agi (upto 12 fields separated by five dashes "-----"):
; Below are the parameters needed for the script to be run properly
; 1. the method of call handling for the script:
; - CID - CID received, add record with phone number
; - CIDLOOKUP - Lookup CID to find record in whole system
; - CIDLOOKUPRL - Restrict lookup to one list
; - CIDLOOKUPRC - Restrict lookup to one campaign's lists
; - CLOSER - Closer calls from VICIDIAL fronters
; - ANI - ANI received, add record with phone number (based on RBS T1s)
; - ANILOOKUP - Lookup ANI to find record in whole system
; - ANILOOKUPRL - Restrict lookup to one list
; - ANILOOKUPRC - Restrict lookup to one campaign's lists
; - VID - Add record with Vendor Lead Code received as argument 12
; - VIDLOOKUP - Lookup Vendor Lead Code received as argument 12 to find record in whole system
; - VIDLOOKUPRL - Restrict lookup to one list (argument 12)
; - VIDLOOKUPRC - Restrict lookup to one campaign's lists (argument 12)
; - VIDPROMPT - Prompt Vendor Lead Code to User with IVR to add record with Vendor Lead Code
; - VIDPROMPTLOOKUP - Prompt Vendor Lead Code to User with IVR to find record in whole system
; - VIDPROMPTLOOKUPRL - Restrict lookup to one list
; - VIDPROMPTLOOKUPRC - Restrict lookup to one campaign's lists
; - 3DIGITID - Enter 3 digit code to go to agent
; - 4DIGITID - Enter 4 digit code to go to agent
; - XDIGITID - Enter X digit code to go to agent(variable, i.e. 9DIGITID, 12DIGITID, etc...)
; 2. the method of searching for an available agent:
; - LO - Load Balance Overflow only (priority to home server)
; - LB - <default> Load Balance total system
; - SO - Home server only
; 3. the full name of the IN GROUP to be used in vicidial for the inbound call
; 4. the phone number that was called, for the log entry
; 5. the callerID or lead_id of the person that called(usually overridden)
; 6. the park extension audio file name if used
; 7. the status of the call initially(usually not used)
; 8. the list_id to insert the new lead under if it is new (and CID/ANI available)
; 9. the phone dialing code to insert with the new lead if new (and CID/ANI available)
; 10. the campaign_id to search within lists if CIDLOOKUPRC
; 11. the user to queue the call to for AGENTDIRECT in-group calls
; 12. vendor_lead_code if external mechanism like custom IVR is used to prompt user for ID
;
; inbound VICIDIAL call with CID delivery through T1 PRI
;exten => 1234,1,Answer ; Answer the line
;exten => 1234,2,AGI(agi-VDAD_ALL_inbound.agi,CID-----LB-----CL_GALLERIA-----7274515134-----Closer-----park----------999-----1)
;exten => 1234,3,Hangup
; inbound VICIDIAL transfer calls [can arrive through PRI T1 crossover, IAX or SIP channel]
exten => _90009.,1,Answer ; Answer the line
exten => _90009.,2,Dial(${TRUNKloop}/9${EXTEN},,to)
exten => _90009.,3,Hangup
exten => _990009.,1,Answer ; Answer the line, Sometimes needs to be removed
exten => _990009.,2,AGI(agi-VDAD_ALL_inbound.agi,CLOSER-----LB-----CL_TESTCAMP-----7275551212-----Closer-----park----------999-----1)
exten => _990009.,3,Hangup
; DID forwarded calls
exten => _99909*.,1,Answer
exten => _99909*.,2,AGI(agi-VDAD_ALL_inbound.agi)
exten => _99909*.,3,Hangup
; barge monitoring extension
exten => 8159,1,ZapBarge
exten => 8159,2,Hangup
; ZapBarge direct channel extensions
exten => _86120XX,1,ZapBarge(${EXTEN:5})
exten => _X48600XXX,1,MeetMeAdmin(${EXTEN:2},T,${EXTEN:0:1})
exten => _X48600XXX,2,Hangup
exten => _X38600XXX,1,MeetMeAdmin(${EXTEN:2},t,${EXTEN:0:1})
exten => _X38600XXX,2,Hangup
exten => _X28600XXX,1,MeetMeAdmin(${EXTEN:2},m,${EXTEN:0:1})
exten => _X28600XXX,2,Hangup
exten => _X18600XXX,1,MeetMeAdmin(${EXTEN:2},M,${EXTEN:0:1})
exten => _X18600XXX,2,Hangup
exten => _55558600XXX,1,MeetMeAdmin(${EXTEN:4},K)
exten => _55558600XXX,2,Hangup
exten => 8300,1,Hangup
; astGUIclient conferences
exten => _86000[0-4]X,1,Meetme,${EXTEN}|q
exten => _86000[0-4]X,n,Hangup
; VICIDIAL conferences
exten => _86000[5-9]X,1,Meetme,${EXTEN}|F
exten => _86000[5-9]X,n,Hangup
exten => _8600[1-2]XX,1,Meetme,${EXTEN}|F
exten => _8600[1-2]XX,n,Hangup
; quiet entry and leaving conferences for VICIDIAL (inbound announce, SendDTMF and ring-agent)
exten => _78600XXX,1,Meetme,${EXTEN:1}|Fq
exten => _78600XXX,n,Hangup
; quiet monitor-only extensions for meetme rooms (for room managers)
exten => _68600XXX,1,Meetme,${EXTEN:1}|Fmq
exten => _68600XXX,n,Hangup
; quiet monitor-only entry and leaving conferences for VICIDIAL (recording)
exten => _58600XXX,1,Meetme,${EXTEN:1}|Fmq
exten => _58600XXX,n,Hangup
; voicelab exten
exten => _86009XX,1,Meetme,${EXTEN}|Fmq
; voicelab exten moderator
exten => _986009XX,1,Meetme,${EXTEN:1}
; park channel for client GUI parking, hangup after 30 minutes
; create a GSM formatted audio file named "park.gsm" that is 30 minutes long
; and put it in /var/lib/asterisk/sounds
exten => 8301,1,Answer
exten => 8301,2,AGI(park_CID.agi)
exten => 8301,3,Playback(park)
exten => 8301,4,Hangup
exten => 8303,1,Answer
exten => 8303,2,AGI(park_CID.agi)
exten => 8303,3,Playback(conf)
exten => 8303,4,Hangup
; park channel for client GUI conferencing, hangup after 30 minutes
; create a GSM formatted audio file named "conf.gsm" that is 30 minutes long
; and put it in /var/lib/asterisk/sounds
exten => 8302,1,Answer
exten => 8302,2,Playback(conf)
exten => 8302,3,Hangup
exten => 8304,1,Answer
exten => 8304,2,Playback(ding)
exten => 8304,3,Hangup
; default audio for safe harbor 2-second-after-hello message then hangup
; create a GSM formatted audio file complies with safe harbor rules
; and put it in /var/lib/asterisk/sounds then change filename below
exten => 8307,1,Answer
exten => 8307,2,Playback(vm-goodbye)
exten => 8307,3,Hangup
; this is used for playing a message to an answering machine forwarded from AMD in VICIDIAL
exten => 8320,1,AGI(VD_amd.agi,${EXTEN}-----YES)
exten => 8320,2,Hangup
exten => _8320*.,1,AGI(VD_amd.agi,${EXTEN}-----YES)
exten => _8320*.,2,Hangup
; these are used for the ring_all function in VICIDIAL
exten => _8331*.,1,Playback(sip-silence)
exten => _8331*.,n,AGI(agi-VDAD_RINGALL.agi,${EXTEN})
exten => _8331*.,n,AGI(agi-VDAD_RINGALL.agi,${EXTEN})
exten => _8331*.,n,AGI(agi-VDAD_RINGALL.agi,${EXTEN})
exten => _8331*.,n,Hangup
; use for selective CallerID hangup by area code(hard-coded)
exten => 8352,1,AGI(agi-VDADselective_CID_hangup.agi,${EXTEN})
exten => 8352,2,Playback(safe_harbor)
exten => 8352,3,Hangup
; this is used for sending DTMF signals within conference calls, the client app
; sends the digits to be played in the callerID field
; sound files must be placed in /var/lib/asterisk/sounds
exten => 8500998,1,Answer
exten => 8500998,2,Playback(silence)
exten => 8500998,3,AGI(agi-dtmf.agi)
exten => 8500998,4,Hangup
; multi-remote-monitor entry extensions
exten => 8162,1,Dial(${TRUNKblind}/34567890123456789,55,to)
exten => 34567890123456789,1,Answer
exten => 34567890123456789,2,Goto(monitor,s,1)
;#### VDAD STANDARD TRANSFER ENTRIES ####
; Below are the parameters needed for the agi-VDAD_ALL_outbound.agi script to be run properly
; 1. the method of call handling for the script:
; - NORMAL - <default> Standard outbound routing to agent
; - TEST - For performance testing only
; - BROADCAST - For no-agent broadcast dialing
; - SURVEY - For survery question then on to agent
; - REMINDER - Reminder campaign
; - REMINDX - Reminder with transfer to agent
; 2. the method of searching for an available agent:
; - LB - <default> Load Balance total system
; - LO - Load Balance Overflow only (priority to home server)
; - SO - Home server only
; 3. the sound file to play when doing a SURVEY, REMINDER, REMINDX campaign
; 4. the acceptible dtmf digits for a SURVEY
; 5. the out-opt digit for a SURVEY (must be in the digit map)
; 6. the sound file to play for a SURVEY when transfering to an agent
; 7. the sound file to play for a SURVEY when DNCing the call
; 8. OPTIN or OPTOUT: if OPTIN call is only sent to agent with button press
; if OPTOUT call is sent to agent if no button press at all
; 9. the status that is use for a SURVEY when someone opts out
; if the status is DNC it will also add them to the internal dnc table
; VICIDIAL_auto_dialer transfer script for no-agent campaigns:
exten => 8364,1,Playback(sip-silence)
exten => 8364,2,AGI(agi://127.0.0.1:4577/call_log)
exten => 8364,3,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LB)
exten => 8364,4,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LB)
exten => 8364,5,Hangup
; VICIDIAL_auto_dialer transfer script:
exten => 8365,1,Playback(sip-silence)
exten => 8365,2,AGI(agi://127.0.0.1:4577/call_log)
exten => 8365,3,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----SO)
exten => 8365,4,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----SO)
exten => 8365,5,Hangup
; VICIDIAL_auto_dialer transfer script SURVEY at beginning:
exten => 8366,1,Playback(sip-silence)
exten => 8366,2,AGI(agi://127.0.0.1:4577/call_log)
exten => 8366,3,AGI(agi-VDAD_ALL_outbound.agi,SURVEYCAMP-----LB)
exten => 8366,4,AGI(agi-VDAD_ALL_outbound.agi,SURVEYCAMP-----LB)
exten => 8366,5,Hangup
; VICIDIAL_auto_dialer transfer script Load Balance Overflow:
exten => 8367,1,Playback(sip-silence)
exten => 8367,2,AGI(agi://127.0.0.1:4577/call_log)
exten => 8367,3,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LO)
exten => 8367,4,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LO)
exten => 8367,5,Hangup
; VICIDIAL_auto_dialer transfer script Load Balanced:
exten => 8368,1,Playback(sip-silence)
exten => 8368,2,AGI(agi://127.0.0.1:4577/call_log)
exten => 8368,3,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LB)
exten => 8368,4,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LB)
exten => 8368,5,Hangup
; VICIDIAL_auto_dialer transfer script AMD with Load Balanced:
exten => 8369,1,Playback(sip-silence)
exten => 8369,2,AGI(agi://127.0.0.1:4577/call_log)
exten => 8369,3,AMD(2000|2000|1000|5000|120|50|4|256)
exten => 8369,4,AGI(VD_amd.agi,${EXTEN})
exten => 8369,5,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LB)
exten => 8369,6,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LB)
exten => 8369,7,Hangup
; VICIDIAL auto-dial reminder script
exten => 8372,1,Playback(sip-silence)
exten => 8372,2,AGI(agi://127.0.0.1:4577/call_log)
exten => 8372,3,AGI(agi-VDADautoREMINDER.agi,${EXTEN})
exten => 8372,4,AGI(agi-VDADautoREMINDER.agi,${EXTEN})
exten => 8372,5,Hangup
; VICIDIAL SURVEY transfer script AMD with Load Balanced:
exten => 8373,1,Playback(sip-silence)
exten => 8373,2,AGI(agi://127.0.0.1:4577/call_log)
exten => 8373,3,AMD(2000|2000|1000|5000|120|50|4|256)
exten => 8373,4,AGI(VD_amd.agi,${EXTEN})
exten => 8373,5,AGI(agi-VDAD_ALL_outbound.agi,SURVEYCAMP-----LB)
exten => 8373,6,AGI(agi-VDAD_ALL_outbound.agi,SURVEYCAMP-----LB)
exten => 8373,7,Hangup
; VICIDIAL SURVEY transfer script with Cepstral names:
exten => 8374,1,Playback(sip-silence)
exten => 8374,2,AGI(agi://127.0.0.1:4577/call_log)
exten => 8374,3,AGI(agi-VDAD_ALL_outbound.agi,SURVEYCAMPCEP-----LB)
exten => 8374,4,AGI(agi-VDAD_ALL_outbound.agi,SURVEYCAMPCEP-----LB)
exten => 8374,5,Hangup
; VICIDIAL SURVEY transfer script AMD with Cepstral variables:
exten => 8375,1,Playback(sip-silence)
exten => 8375,2,AGI(agi://127.0.0.1:4577/call_log)
exten => 8375,3,AMD(2000|2000|1000|5000|120|50|4|256)
exten => 8375,4,AGI(VD_amd.agi,${EXTEN})
exten => 8375,5,AGI(agi-VDAD_ALL_outbound.agi,SURVEYCAMPCEP-----LB)
exten => 8375,6,AGI(agi-VDAD_ALL_outbound.agi,SURVEYCAMPCEP-----LB)
exten => 8375,7,Hangup
; PERFORMANCE TESTING
exten => _999XXXXXX1,1,Answer
exten => _999XXXXXX1,2,Wait(2)
exten => _999XXXXXX1,3,Playback(vicidial-welcome)
exten => _999XXXXXX1,4,Hangup
exten => _999XX11112,1,Wait(2)
exten => _999XX11112,2,Answer
exten => _999XX11112,3,Playback(ss-noservice)
exten => _999XX11112,4,Playback(vm-goodbye)
exten => _999XX11112,5,Hangup
exten => _999XX18112,1,Wait(2)
exten => _999XX18112,2,Answer
exten => _999XX18112,3,Playback(vtiger-fax)
exten => _999XX18112,4,Playback(vtiger-fax)
exten => _999XX18112,5,Hangup
exten => _999XX19112,1,Wait(2)
exten => _999XX19112,2,Answer
exten => _999XX19112,3,Playback(vtiger-email)
exten => _999XX19112,4,Playback(vtiger-email)
exten => _999XX19112,5,Hangup
exten => _999XXXX112,1,Wait(5)
exten => _999XXXX112,2,Answer
exten => _999XXXX112,3,Playback(demo-instruct)
exten => _999XXXX112,4,Playback(demo-instruct)
exten => _999XXXX112,5,Hangup
exten => _999XXXXXX2,1,Wait(8)
exten => _999XXXXXX2,2,Answer
exten => _999XXXXXX2,3,Playback(demo-instruct)
exten => _999XXXXXX2,4,Hangup
exten => _999XXXXXX3,1,SetVar(PRI_CAUSE=1)
exten => _999XXXXXX3,2,Hangup
exten => _999XXXXXX4,1,SetVar(PRI_CAUSE=27)
exten => _999XXXXXX4,2,Hangup
exten => _999XXXXXX5,1,Wait(60)
exten => _999XXXXXX5,2,Hangup
exten => _999XXXXXX6,1,Wait(10)
exten => _999XXXXXX6,2,Answer
exten => _999XXXXXX6,3,Playback(demo-instruct)
exten => _999XXXXXX6,4,Hangup
exten => _999XXXXXX7,1,Wait(12)
exten => _999XXXXXX7,2,Answer
exten => _999XXXXXX7,3,Playback(demo-enterkeywords)
exten => _999XXXXXX7,4,Hangup
exten => _999XXXXXX8,1,SetVar(PRI_CAUSE=17)
exten => _999XXXXXX8,2,Hangup
exten => _999XXXXXX9,1,Wait(6)
exten => _999XXXXXX9,2,Answer
exten => _999XXXXXX9,3,Playback(demo-abouttotry)
exten => _999XXXXXX9,4,Hangup
exten => _999XXXXXX0,1,Wait(5)
exten => _999XXXXXX0,2,Answer
exten => _999XXXXXX0,3,Playback(vm-goodbye)
exten => _999XXXXXX0,4,Hangup
exten => 99999999999,1,Answer
exten => 99999999999,2,Playback(conf)
exten => 99999999999,3,Playback(conf)
exten => 99999999999,4,Playback(conf)
exten => 99999999999,5,Playback(conf)
exten => 99999999999,6,Playback(conf)
exten => 99999999999,7,Playback(conf)
exten => 99999999999,8,Playback(conf)
exten => 99999999999,9,Playback(conf)
exten => 99999999999,10,Playback(conf)
exten => 99999999999,11,Playback(conf)
exten => 99999999999,12,Playback(conf)
exten => 99999999999,13,Playback(conf)
exten => 99999999999,14,Hangup
[monitor]
exten => h,1,DeadAGI(agi://127.0.0.1:4577/call_log--HVcauses--PRI-----NODEBUG-----${HANGUPCAUSE}-----${DIALSTATUS}-----${DIALEDTIME}-----${ANSWEREDTIME})
exten => s,1,SetVar(TIMEOUT(digit)=10)
exten => s,n,SetVar(TIMEOUT(response)=10)
exten => s,n,SetVar(MEETME_EXIT_CONTEXT=monitor_exit)
exten => s,n,Background(vm-extension) ; need audio prompt.
exten => s,n,WaitExten(10)
exten => i,1,Goto(monitor_exit,s,1)
exten => #,1,Goto(monitor_exit,s,1)
exten => t,1,Goto(monitor_exit,s,1)
exten => _8[0-2]XX,1,Meetme(8600${EXTEN:1},mqX) ; Listen
exten => _99[0-2]XX,1,Meetme(8600${EXTEN:2},X) ; Barge
[monitor_exit]
exten => h,1,DeadAGI(agi://127.0.0.1:4577/call_log--HVcauses--PRI-----NODEBUG-----${HANGUPCAUSE}-----${DIALSTATUS}-----${DIALEDTIME}-----${ANSWEREDTIME})
exten => _X,1,Goto(monitor,s,1)
exten => i,1,Goto(monitor,s,1)
exten => #,1,Goto(monitor,s,1)
exten => t,1,Goto(monitor,s,1)
@@ -0,0 +1,620 @@
[general]
static=yes
writeprotect=no
[globals]
CONSOLE=Console/dsp ; Console interface for demo
TRUNK=Zap/r1 ; Trunk interface
TRUNKX=Zap/r2 ; 2nd trunk interface
TRUNKIAX=IAX2/ASTtest1:test@10.10.10.16:4569 ; IAX trunk interface
TRUNKIAX1=IAX2/ASTtest1:test@10.10.10.16:4569 ; IAX trunk interface
TRUNKBINFONE=IAX2/1112223333:PASSWORD@iax.binfone.com ; IAX trunk interface
SIPtrunk=SIP/1234:PASSWORD@sip.provider.net ; SIP trunk
#include extensions-vicidial.conf
[trunkinbound]
; DID call routing process
; exten => _XXXXXXXXXX,1,AGI(agi-DID_route.agi) ; use this one instead of the one below if you are having delay issues, and match to number of received digits
exten => _X.,1,AGI(agi-DID_route.agi)
; FastAGI for VICIDIAL/astGUIclient call logging
exten => h,1,DeadAGI(agi://127.0.0.1:4577/call_log--HVcauses--PRI-----NODEBUG-----${HANGUPCAUSE}-----${DIALSTATUS}-----${DIALEDTIME}-----${ANSWEREDTIME})
[loopback-no-log]
; This context is to accept calls that have already been logged in another context in Vicidial
; and has been sent through one of the loopbacks. This is why this context is missing the h extension.
; Do not put any extensions in this context unless you specifically understand what this means.
;exten => _91NXXNXXXXXX,1,Dial(${TRUNKX}/${EXTEN:1},,To)
;exten => _91NXXNXXXXXX,n,Hangup
; special Canadian PRI callerIDname settings FOR USE IN LOOPBACK CONTEXT ONLY
;exten => _91NXXNXXXXXX,1,Set(CALLERID(name)="ACME Widgets")
;exten => _91NXXNXXXXXX,n,AGI(agi-CANADA_PRI_CIDname.agi)
;exten => _91NXXNXXXXXX,n,Dial(${TRUNKX}/${EXTEN:1},,To)
;exten => _91NXXNXXXXXX,n,Hangup
exten => _999XX11112,1,Wait(2)
exten => _999XX11112,n,Answer
exten => _999XX11112,n,Playback(ss-noservice)
exten => _999XX11112,n,Playback(vm-goodbye)
exten => _999XX11112,n,Hangup
[default]
include => vicidial-auto
; Local agent alert extensions
exten => _8600XXX*.,1,AGI(agi-VDADfixCXFER.agi)
exten => _78600XXX*.,1,AGI(agi-VDADfixCXFER.agi)
; Local blind monitoring
exten => _08600XXX,1,Dial(${TRUNKblind}/6${EXTEN:1},55,To)
; playback of recorded prompts
exten => _851XXXXX,1,Answer
exten => _851XXXXX,2,Playback(${EXTEN})
exten => _851XXXXX,3,Hangup
; this is used for playing a phone-recorded 851XXXXX audio file with waitforsilence
exten => _6851XXXXX,1,Answer()
exten => _6851XXXXX,n,WaitForSilence(2000,1,90)
exten => _6851XXXXX,n,Playback(sip-silence)
exten => _6851XXXXX,n,Playback(${EXTEN:1})
exten => _6851XXXXX,n,Hangup
exten => _7851XXXXX,1,Goto(default,6${EXTEN:1},1)
; FastAGI for VICIDIAL/astGUIclient call logging
exten => h,1,DeadAGI(agi://127.0.0.1:4577/call_log--HVcauses--PRI-----NODEBUG-----${HANGUPCAUSE}-----${DIALSTATUS}-----${DIALEDTIME}-----${ANSWEREDTIME})
; Example phone extensions
; 100-350 phone extensions now auto-generated, so no need to uncommend them
; extensions for other SIP and IAX call center phones
; cc100-cc150 SIP Phones
;exten => _1[0-5]X,1,Dial(sip/cc${EXTEN},20,to)
; cc300-cc350 IAX Phones
;exten => _3[0-5]X,1,Dial(IAX2/cc${EXTEN},20,to)
; extensions if using a T1 channelbank
;exten => _19XX,1,Dial(Zap/${EXTEN:2},30,o)
;exten => _19XX,2,Hangup
; Extension 4001 rings Zap phone (this example for FXS on Zap port 1)
;exten => 4001,1,Dial(Zap/1,30,o) ; ring Zap device 1
;exten => 4001,2,Voicemail,u4001 ; Send to voicemail...
; # timeout invalid rules
exten => #,1,Playback(invalid) ; "Thanks for trying the demo"
exten => #,2,Hangup ; Hang them up.
exten => t,1,Goto(#,1) ; If they take too long, give up
exten => i,1,Playback(invalid) ; "That's not valid, try again"
; Extensions for performance testing
exten => _91999NXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
exten => _91999NXXXXXX,2,Dial(${TRUNKloop}/${EXTEN:2},,tTo)
exten => _91999NXXXXXX,3,Hangup
exten => 999999999999,1,AGI(agi://127.0.0.1:4577/call_log)
exten => 999999999999,2,Dial(${TRUNKloop}/${EXTEN:1},,tTo)
exten => 999999999999,3,Hangup
; This is a loopback dialaround to allow for hearing of ringing for 3way calls
exten => _881NXXNXXXXXX,1,Answer
exten => _881NXXNXXXXXX,2,Dial(${TRUNKloop}/9${EXTEN:2},,To)
exten => _881NXXNXXXXXX,3,Hangup
; Vtiger fax and email log extensions
exten => _9118XXXXXXXX,1,Dial(${TRUNKblind}/9998818112,55,to)
exten => _9119XXXXXXXX,1,Dial(${TRUNKblind}/9998819112,55,to)
; CARRIER DIALING EXTENSIONS, USE THE ADMIN INTERFACE TO PROGRAM THESE
; dial an 800 outbound number
;exten => _91800NXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
;exten => _91800NXXXXXX,2,Dial(${TRUNK}/${EXTEN:1},,To)
;exten => _91800NXXXXXX,3,Hangup
;exten => _91888NXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
;exten => _91888NXXXXXX,2,Dial(${TRUNK}/${EXTEN:1},,To)
;exten => _91888NXXXXXX,3,Hangup
;exten => _91877NXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
;exten => _91877NXXXXXX,2,Dial(${TRUNK}/${EXTEN:1},,To)
;exten => _91877NXXXXXX,3,Hangup
;exten => _91866NXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
;exten => _91866NXXXXXX,2,Dial(${TRUNK}/${EXTEN:1},,To)
;exten => _91866NXXXXXX,3,Hangup
;exten => _91855NXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
;exten => _91855NXXXXXX,2,Dial(${TRUNK}/${EXTEN:1},,To)
;exten => _91855NXXXXXX,3,Hangup
; dial a long distance outbound number
; This 'o' Dial flag is VERY important for VICIDIAL on outbound calls
;exten => _91NXXNXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
;exten => _91NXXNXXXXXX,2,Dial(${TRUNKX}/${EXTEN:1},,To)
;exten => _91NXXNXXXXXX,3,Hangup
; dial a local outbound number (modified because of only LD T1)
;exten => _9NXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
;exten => _9NXXXXXX,2,Dial(${TRUNK}/1727${EXTEN:1},,To)
;exten => _9NXXXXXX,3,Hangup
; dial a local 727 outbound number with area code
;exten => _9727NXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
;exten => _9727NXXXXXX,2,Dial(${TRUNK}/1${EXTEN:1},,To)
;exten => _9727NXXXXXX,3,Hangup
; dial a long distance outbound number to the UK
; This 'o' Dial flag is VERY important for VICIDIAL on outbound calls,
;exten => _901144XXXXXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
;exten => _901144XXXXXXXXXX,2,Dial(${TRUNKX}/${EXTEN:1},55,To)
;exten => _901144XXXXXXXXXX,3,Hangup
; dial a long distance outbound number to Australia
; This 'o' Dial flag is VERY important for VICIDIAL on outbound calls,
;exten => _901161XXXXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
;exten => _901161XXXXXXXXX,2,Dial(${TRUNKX}/${EXTEN:1},,To)
;exten => _901161XXXXXXXXX,3,Hangup
; dial a long distance outbound number through BINFONE
; exten => _91NXXNXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
; exten => _91NXXNXXXXXX,2,Dial(${TRUNKIAX}/${EXTEN:1},55,To)
; exten => _91NXXNXXXXXX,3,Hangup
; dial a long distance outbound number through a SIP provider
; exten => _91NXXNXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
; exten => _91NXXNXXXXXX,2,Dial(sip/${EXTEN:1}@SIPtrunk,55,o)
; exten => _91NXXNXXXXXX,3,Hangup
; special extensions for North America to catch invalid phone numbers
; exten => _91XXX[0-1]XXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
; exten => _91XXX[0-1]XXXXXX,n,Dial(${TRUNKloop}/8889990011112,,to)
; exten => _91XXX[0-1]XXXXXX,n,Hangup
; exten => _91[0-1]XXXXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
; exten => _91[0-1]XXXXXXXXX,n,Dial(${TRUNKloop}/8889990011112,,to)
; exten => _91[0-1]XXXXXXXXX,n,Hangup
; exten => _91XXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
; exten => _91XXXXXX,n,Dial(${TRUNKloop}/8889990011112,,to)
; exten => _91XXXXXX,n,Hangup
; exten => _91XXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
; exten => _91XXXXXXX,n,Dial(${TRUNKloop}/8889990011112,,to)
; exten => _91XXXXXXX,n,Hangup
; exten => _91XXXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
; exten => _91XXXXXXXX,n,Dial(${TRUNKloop}/8889990011112,,to)
; exten => _91XXXXXXXX,n,Hangup
; exten => _91XXXXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
; exten => _91XXXXXXXXX,n,Dial(${TRUNKloop}/8889990011112,,to)
; exten => _91XXXXXXXXX,n,Hangup
; exten => _91XXXXXXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
; exten => _91XXXXXXXXXXX,n,Dial(${TRUNKloop}/8889990011112,,to)
; exten => _91XXXXXXXXXXX,n,Hangup
; exten => _91XXXXXXXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
; exten => _91XXXXXXXXXXXX,n,Dial(${TRUNKloop}/8889990011112,,to)
; exten => _91XXXXXXXXXXXX,n,Hangup
; exten => _91XXXXXXXXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
; exten => _91XXXXXXXXXXXXX,n,Dial(${TRUNKloop}/8889990011112,,to)
; exten => _91XXXXXXXXXXXXX,n,Hangup
; block calls to 555 numbers
; exten => _91NXX555NXXX,1,AGI(agi://127.0.0.1:4577/call_log)
; exten => _91NXX555NXXX,n,Dial(${TRUNKloop}/8889990011112,,to)
; exten => _91NXX555NXXX,n,Hangup
; dial a USA long distance outbound number through the loopback-no-log context
; exten => _91NXXNXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
; exten => _91NXXNXXXXXX,2,Dial(${TRUNKloop}/888${EXTEN:2},55,o)
; exten => _91NXXNXXXXXX,3,Hangup
;exten => 888NXXNXXXXXX,1,Goto(loopback-no-log,91${EXTEN:3},1)
exten => 8889990011112,1,Goto(loopback-no-log,9990011112,1)
; Inbound call from BINFONE
; exten => 1112223333,1,AGI(agi://127.0.0.1:4577/call_log)
; exten => 1112223333,2,Dial(sip/gs102,55,o)
; exten => 1112223333,3,Hangup
; Extension 7275551212 - Inbound local number from PRI with 10 digit delivery
;exten => 7275551212,1,Ringing
;exten => 7275551212,2,Wait(1)
;exten => 7275551212,3,AGI(agi://127.0.0.1:4577/call_log--fullCID--${EXTEN}-----${CALLERID(all)}-----${CALLERID(num)}-----${CALLERID(name)})
;exten => 7275551212,4,Answer
;exten => 7275551212,5,Dial(sip/spa2000&sip/spa2001,30,To)
;exten => 7275551212,6,Voicemail,u2000
; parameters for call_inbound.agi (7 fields separated by five dashes "-----"):
; 1. the extension of the phone to ring as defined in the asterisk.phones table
; 2. the phone number that was called, for the live_inbound/_log entry
; 3. a text description of the number that was called in
; 4-7. optional fields, they are also passed as fields in the GUI to web browser
; This is not part of VICIDIAL, it is for astGUIclient agent use only
; Extension 3429 - Inbound 800 number (1-800-555-3429) example of RBS T1
; with 10 digit ANI and 4 digit DNIS star separated
;exten => _**3429,1,Ringing
;exten => _**3429,2,AGI(agi://127.0.0.1:4577/call_log)
;exten => _**3429,3,AGI(call_inbound.agi,spa2000-----8005553429-----Inbound 800-----x-----y-----z-----w)
;exten => _**3429,4,Answer
;exten => _**3429,5,Dial(sip/spa2000&sip/spa2001,30,to)
;exten => _**3429,6,Voicemail,u2000
; Extension 3429 - with ANI [callerID]
;exten => _*NXXNXXXXXX*3429,1,Ringing
;exten => _*NXXNXXXXXX*3429,2,AGI(agi://127.0.0.1:4577/call_log)
;exten => _*NXXNXXXXXX*3429,3,AGI(call_inbound.agi,spa2000-----8005553429-----Inbound 800-----x-----y-----z-----w)
;exten => _*NXXNXXXXXX*3429,4,Answer
;exten => _*NXXNXXXXXX*3429,5,Dial(sip/spa2000&sip/spa2001,30,to)
;exten => _*NXXNXXXXXX*3429,6,Voicemail,u2000
; parameters for agi-VDAD_ALL_inbound.agi (upto 12 fields separated by five dashes "-----"):
; Below are the parameters needed for the script to be run properly
; 1. the method of call handling for the script:
; - CID - CID received, add record with phone number
; - CIDLOOKUP - Lookup CID to find record in whole system
; - CIDLOOKUPRL - Restrict lookup to one list
; - CIDLOOKUPRC - Restrict lookup to one campaign's lists
; - CLOSER - Closer calls from VICIDIAL fronters
; - ANI - ANI received, add record with phone number (based on RBS T1s)
; - ANILOOKUP - Lookup ANI to find record in whole system
; - ANILOOKUPRL - Restrict lookup to one list
; - ANILOOKUPRC - Restrict lookup to one campaign's lists
; - VID - Add record with Vendor Lead Code received as argument 12
; - VIDLOOKUP - Lookup Vendor Lead Code received as argument 12 to find record in whole system
; - VIDLOOKUPRL - Restrict lookup to one list (argument 12)
; - VIDLOOKUPRC - Restrict lookup to one campaign's lists (argument 12)
; - VIDPROMPT - Prompt Vendor Lead Code to User with IVR to add record with Vendor Lead Code
; - VIDPROMPTLOOKUP - Prompt Vendor Lead Code to User with IVR to find record in whole system
; - VIDPROMPTLOOKUPRL - Restrict lookup to one list
; - VIDPROMPTLOOKUPRC - Restrict lookup to one campaign's lists
; - 3DIGITID - Enter 3 digit code to go to agent
; - 4DIGITID - Enter 4 digit code to go to agent
; - XDIGITID - Enter X digit code to go to agent(variable, i.e. 9DIGITID, 12DIGITID, etc...)
; 2. the method of searching for an available agent:
; - LO - Load Balance Overflow only (priority to home server)
; - LB - <default> Load Balance total system
; - SO - Home server only
; 3. the full name of the IN GROUP to be used in vicidial for the inbound call
; 4. the phone number that was called, for the log entry
; 5. the callerID or lead_id of the person that called(usually overridden)
; 6. the park extension audio file name if used
; 7. the status of the call initially(usually not used)
; 8. the list_id to insert the new lead under if it is new (and CID/ANI available)
; 9. the phone dialing code to insert with the new lead if new (and CID/ANI available)
; 10. the campaign_id to search within lists if CIDLOOKUPRC
; 11. the user to queue the call to for AGENTDIRECT in-group calls
; 12. vendor_lead_code if external mechanism like custom IVR is used to prompt user for ID
;
; inbound VICIDIAL call with CID delivery through T1 PRI
;exten => 1234,1,Answer ; Answer the line
;exten => 1234,2,AGI(agi-VDAD_ALL_inbound.agi,CID-----LB-----CL_GALLERIA-----7274515134-----Closer-----park----------999-----1)
;exten => 1234,3,Hangup
; inbound VICIDIAL transfer calls [can arrive through PRI T1 crossover, IAX or SIP channel]
exten => _90009.,1,Answer ; Answer the line
exten => _90009.,2,Dial(${TRUNKloop}/9${EXTEN},,to)
exten => _90009.,3,Hangup
exten => _990009.,1,Answer ; Answer the line, Sometimes needs to be removed
exten => _990009.,2,AGI(agi-VDAD_ALL_inbound.agi,CLOSER-----LB-----CL_TESTCAMP-----7275551212-----Closer-----park----------999-----1)
exten => _990009.,3,Hangup
; DID forwarded calls
exten => _99909*.,1,Answer
exten => _99909*.,2,AGI(agi-VDAD_ALL_inbound.agi)
exten => _99909*.,3,Hangup
; barge monitoring extension
exten => 8159,1,ZapBarge
exten => 8159,2,Hangup
; ZapBarge direct channel extensions
exten => _86120XX,1,ZapBarge(${EXTEN:5})
exten => _X48600XXX,1,MeetMeAdmin(${EXTEN:2},T,${EXTEN:0:1})
exten => _X48600XXX,2,Hangup
exten => _X38600XXX,1,MeetMeAdmin(${EXTEN:2},t,${EXTEN:0:1})
exten => _X38600XXX,2,Hangup
exten => _X28600XXX,1,MeetMeAdmin(${EXTEN:2},m,${EXTEN:0:1})
exten => _X28600XXX,2,Hangup
exten => _X18600XXX,1,MeetMeAdmin(${EXTEN:2},M,${EXTEN:0:1})
exten => _X18600XXX,2,Hangup
exten => _55558600XXX,1,MeetMeAdmin(${EXTEN:4},K)
exten => _55558600XXX,2,Hangup
exten => 8300,1,Hangup
; astGUIclient conferences
exten => _86000[0-4]X,1,Meetme,${EXTEN}|q
exten => _86000[0-4]X,n,Hangup
; VICIDIAL conferences
exten => _86000[5-9]X,1,Meetme,${EXTEN}|F
exten => _86000[5-9]X,n,Hangup
exten => _8600[1-2]XX,1,Meetme,${EXTEN}|F
exten => _8600[1-2]XX,n,Hangup
; quiet entry and leaving conferences for VICIDIAL (inbound announce, SendDTMF and ring-agent)
exten => _78600XXX,1,Meetme,${EXTEN:1}|Fq
exten => _78600XXX,n,Hangup
; quiet monitor-only extensions for meetme rooms (for room managers)
exten => _68600XXX,1,Meetme,${EXTEN:1}|Fmq
exten => _68600XXX,n,Hangup
; quiet monitor-only entry and leaving conferences for VICIDIAL (recording)
exten => _58600XXX,1,Meetme,${EXTEN:1}|Fmq
exten => _58600XXX,n,Hangup
; voicelab exten
exten => _86009XX,1,Meetme,${EXTEN}|Fmq
; voicelab exten moderator
exten => _986009XX,1,Meetme,${EXTEN:1}
; park channel for client GUI parking, hangup after 30 minutes
; create a GSM formatted audio file named "park.gsm" that is 30 minutes long
; and put it in /var/lib/asterisk/sounds
exten => 8301,1,Answer
exten => 8301,2,AGI(park_CID.agi)
exten => 8301,3,Playback(park)
exten => 8301,4,Hangup
exten => 8303,1,Answer
exten => 8303,2,AGI(park_CID.agi)
exten => 8303,3,Playback(conf)
exten => 8303,4,Hangup
; park channel for client GUI conferencing, hangup after 30 minutes
; create a GSM formatted audio file named "conf.gsm" that is 30 minutes long
; and put it in /var/lib/asterisk/sounds
exten => 8302,1,Answer
exten => 8302,2,Playback(conf)
exten => 8302,3,Hangup
exten => 8304,1,Answer
exten => 8304,2,Playback(ding)
exten => 8304,3,Hangup
; default audio for safe harbor 2-second-after-hello message then hangup
; create a GSM formatted audio file complies with safe harbor rules
; and put it in /var/lib/asterisk/sounds then change filename below
exten => 8307,1,Answer
exten => 8307,2,Playback(vm-goodbye)
exten => 8307,3,Hangup
; this is used for playing a message to an answering machine forwarded from AMD in VICIDIAL
exten => 8320,1,AGI(VD_amd.agi,${EXTEN}-----YES)
exten => 8320,2,Hangup
exten => _8320*.,1,AGI(VD_amd.agi,${EXTEN}-----YES)
exten => _8320*.,2,Hangup
; these are used for the ring_all function in VICIDIAL
exten => _8331*.,1,Playback(sip-silence)
exten => _8331*.,n,AGI(agi-VDAD_RINGALL.agi,${EXTEN})
exten => _8331*.,n,AGI(agi-VDAD_RINGALL.agi,${EXTEN})
exten => _8331*.,n,AGI(agi-VDAD_RINGALL.agi,${EXTEN})
exten => _8331*.,n,Hangup
; use for selective CallerID hangup by area code(hard-coded)
exten => 8352,1,AGI(agi-VDADselective_CID_hangup.agi,${EXTEN})
exten => 8352,2,Playback(safe_harbor)
exten => 8352,3,Hangup
; this is used for sending DTMF signals within conference calls, the client app
; sends the digits to be played in the callerID field
; sound files must be placed in /var/lib/asterisk/sounds
exten => 8500998,1,Answer
exten => 8500998,2,Playback(silence)
exten => 8500998,3,AGI(agi-dtmf.agi)
exten => 8500998,4,Hangup
; multi-remote-monitor entry extensions
exten => 8162,1,Dial(${TRUNKblind}/34567890123456789,55,to)
exten => 34567890123456789,1,Answer
exten => 34567890123456789,2,Goto(monitor,s,1)
;#### VDAD STANDARD TRANSFER ENTRIES ####
; Below are the parameters needed for the agi-VDAD_ALL_outbound.agi script to be run properly
; 1. the method of call handling for the script:
; - NORMAL - <default> Standard outbound routing to agent
; - TEST - For performance testing only
; - BROADCAST - For no-agent broadcast dialing
; - SURVEY - For survery question then on to agent
; - REMINDER - Reminder campaign
; - REMINDX - Reminder with transfer to agent
; 2. the method of searching for an available agent:
; - LB - <default> Load Balance total system
; - LO - Load Balance Overflow only (priority to home server)
; - SO - Home server only
; 3. the sound file to play when doing a SURVEY, REMINDER, REMINDX campaign
; 4. the acceptible dtmf digits for a SURVEY
; 5. the out-opt digit for a SURVEY (must be in the digit map)
; 6. the sound file to play for a SURVEY when transfering to an agent
; 7. the sound file to play for a SURVEY when DNCing the call
; 8. OPTIN or OPTOUT: if OPTIN call is only sent to agent with button press
; if OPTOUT call is sent to agent if no button press at all
; 9. the status that is use for a SURVEY when someone opts out
; if the status is DNC it will also add them to the internal dnc table
; VICIDIAL_auto_dialer transfer script for no-agent campaigns:
exten => 8364,1,Playback(sip-silence)
exten => 8364,2,AGI(agi://127.0.0.1:4577/call_log)
exten => 8364,3,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LB)
exten => 8364,4,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LB)
exten => 8364,5,Hangup
; VICIDIAL_auto_dialer transfer script:
exten => 8365,1,Playback(sip-silence)
exten => 8365,2,AGI(agi://127.0.0.1:4577/call_log)
exten => 8365,3,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----SO)
exten => 8365,4,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----SO)
exten => 8365,5,Hangup
; VICIDIAL_auto_dialer transfer script SURVEY at beginning:
exten => 8366,1,Playback(sip-silence)
exten => 8366,2,AGI(agi://127.0.0.1:4577/call_log)
exten => 8366,3,AGI(agi-VDAD_ALL_outbound.agi,SURVEYCAMP-----LB)
exten => 8366,4,AGI(agi-VDAD_ALL_outbound.agi,SURVEYCAMP-----LB)
exten => 8366,5,Hangup
; VICIDIAL_auto_dialer transfer script Load Balance Overflow:
exten => 8367,1,Playback(sip-silence)
exten => 8367,2,AGI(agi://127.0.0.1:4577/call_log)
exten => 8367,3,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LO)
exten => 8367,4,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LO)
exten => 8367,5,Hangup
; VICIDIAL_auto_dialer transfer script Load Balanced:
exten => 8368,1,Playback(sip-silence)
exten => 8368,2,AGI(agi://127.0.0.1:4577/call_log)
exten => 8368,3,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LB)
exten => 8368,4,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LB)
exten => 8368,5,Hangup
; VICIDIAL_auto_dialer transfer script AMD with Load Balanced:
exten => 8369,1,Playback(sip-silence)
exten => 8369,2,AGI(agi://127.0.0.1:4577/call_log)
exten => 8369,3,AMD(2000|2000|1000|5000|120|50|4|256)
exten => 8369,4,AGI(VD_amd.agi,${EXTEN})
exten => 8369,5,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LB)
exten => 8369,6,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LB)
exten => 8369,7,Hangup
; VICIDIAL auto-dial reminder script
exten => 8372,1,Playback(sip-silence)
exten => 8372,2,AGI(agi://127.0.0.1:4577/call_log)
exten => 8372,3,AGI(agi-VDADautoREMINDER.agi,${EXTEN})
exten => 8372,4,AGI(agi-VDADautoREMINDER.agi,${EXTEN})
exten => 8372,5,Hangup
; VICIDIAL SURVEY transfer script AMD with Load Balanced:
exten => 8373,1,Playback(sip-silence)
exten => 8373,2,AGI(agi://127.0.0.1:4577/call_log)
exten => 8373,3,AMD(2000|2000|1000|5000|120|50|4|256)
exten => 8373,4,AGI(VD_amd.agi,${EXTEN})
exten => 8373,5,AGI(agi-VDAD_ALL_outbound.agi,SURVEYCAMP-----LB)
exten => 8373,6,AGI(agi-VDAD_ALL_outbound.agi,SURVEYCAMP-----LB)
exten => 8373,7,Hangup
; VICIDIAL SURVEY transfer script with Cepstral names:
exten => 8374,1,Playback(sip-silence)
exten => 8374,2,AGI(agi://127.0.0.1:4577/call_log)
exten => 8374,3,AGI(agi-VDAD_ALL_outbound.agi,SURVEYCAMPCEP-----LB)
exten => 8374,4,AGI(agi-VDAD_ALL_outbound.agi,SURVEYCAMPCEP-----LB)
exten => 8374,5,Hangup
; VICIDIAL SURVEY transfer script AMD with Cepstral variables:
exten => 8375,1,Playback(sip-silence)
exten => 8375,2,AGI(agi://127.0.0.1:4577/call_log)
exten => 8375,3,AMD(2000|2000|1000|5000|120|50|4|256)
exten => 8375,4,AGI(VD_amd.agi,${EXTEN})
exten => 8375,5,AGI(agi-VDAD_ALL_outbound.agi,SURVEYCAMPCEP-----LB)
exten => 8375,6,AGI(agi-VDAD_ALL_outbound.agi,SURVEYCAMPCEP-----LB)
exten => 8375,7,Hangup
; PERFORMANCE TESTING
exten => _999XXXXXX1,1,Answer
exten => _999XXXXXX1,2,Wait(2)
exten => _999XXXXXX1,3,Playback(vicidial-welcome)
exten => _999XXXXXX1,4,Hangup
exten => _999XX11112,1,Wait(2)
exten => _999XX11112,2,Answer
exten => _999XX11112,3,Playback(ss-noservice)
exten => _999XX11112,4,Playback(vm-goodbye)
exten => _999XX11112,5,Hangup
exten => _999XX18112,1,Wait(2)
exten => _999XX18112,2,Answer
exten => _999XX18112,3,Playback(vtiger-fax)
exten => _999XX18112,4,Playback(vtiger-fax)
exten => _999XX18112,5,Hangup
exten => _999XX19112,1,Wait(2)
exten => _999XX19112,2,Answer
exten => _999XX19112,3,Playback(vtiger-email)
exten => _999XX19112,4,Playback(vtiger-email)
exten => _999XX19112,5,Hangup
exten => _999XXXX112,1,Wait(5)
exten => _999XXXX112,2,Answer
exten => _999XXXX112,3,Playback(demo-instruct)
exten => _999XXXX112,4,Playback(demo-instruct)
exten => _999XXXX112,5,Hangup
exten => _999XXXXXX2,1,Wait(8)
exten => _999XXXXXX2,2,Answer
exten => _999XXXXXX2,3,Playback(demo-instruct)
exten => _999XXXXXX2,4,Hangup
exten => _999XXXXXX3,1,Set(PRI_CAUSE=1)
exten => _999XXXXXX3,2,Hangup
exten => _999XXXXXX4,1,Set(PRI_CAUSE=27)
exten => _999XXXXXX4,2,Hangup
exten => _999XXXXXX5,1,Wait(60)
exten => _999XXXXXX5,2,Hangup
exten => _999XXXXXX6,1,Wait(10)
exten => _999XXXXXX6,2,Answer
exten => _999XXXXXX6,3,Playback(demo-instruct)
exten => _999XXXXXX6,4,Hangup
exten => _999XXXXXX7,1,Wait(12)
exten => _999XXXXXX7,2,Answer
exten => _999XXXXXX7,3,Playback(demo-enterkeywords)
exten => _999XXXXXX7,4,Hangup
exten => _999XXXXXX8,1,Set(PRI_CAUSE=17)
exten => _999XXXXXX8,2,Hangup
exten => _999XXXXXX9,1,Wait(6)
exten => _999XXXXXX9,2,Answer
exten => _999XXXXXX9,3,Playback(demo-abouttotry)
exten => _999XXXXXX9,4,Hangup
exten => _999XXXXXX0,1,Wait(5)
exten => _999XXXXXX0,2,Answer
exten => _999XXXXXX0,3,Playback(vm-goodbye)
exten => _999XXXXXX0,4,Hangup
exten => 99999999999,1,Answer
exten => 99999999999,2,Playback(conf)
exten => 99999999999,3,Playback(conf)
exten => 99999999999,4,Playback(conf)
exten => 99999999999,5,Playback(conf)
exten => 99999999999,6,Playback(conf)
exten => 99999999999,7,Playback(conf)
exten => 99999999999,8,Playback(conf)
exten => 99999999999,9,Playback(conf)
exten => 99999999999,10,Playback(conf)
exten => 99999999999,11,Playback(conf)
exten => 99999999999,12,Playback(conf)
exten => 99999999999,13,Playback(conf)
exten => 99999999999,14,Hangup
[monitor]
exten => h,1,DeadAGI(agi://127.0.0.1:4577/call_log--HVcauses--PRI-----NODEBUG-----${HANGUPCAUSE}-----${DIALSTATUS}-----${DIALEDTIME}-----${ANSWEREDTIME})
exten => s,1,Set(TIMEOUT(digit)=10)
exten => s,n,Set(TIMEOUT(response)=10)
exten => s,n,Set(MEETME_EXIT_CONTEXT=monitor_exit)
exten => s,n,Background(vm-extension) ; need audio prompt.
exten => s,n,WaitExten(10)
exten => i,1,Goto(monitor_exit,s,1)
exten => #,1,Goto(monitor_exit,s,1)
exten => t,1,Goto(monitor_exit,s,1)
exten => _8[0-2]XX,1,Meetme(8600${EXTEN:1},mqX) ; Listen
exten => _99[0-2]XX,1,Meetme(8600${EXTEN:2},X) ; Barge
[monitor_exit]
exten => h,1,DeadAGI(agi://127.0.0.1:4577/call_log--HVcauses--PRI-----NODEBUG-----${HANGUPCAUSE}-----${DIALSTATUS}-----${DIALEDTIME}-----${ANSWEREDTIME})
exten => _X,1,Goto(monitor,s,1)
exten => i,1,Goto(monitor,s,1)
exten => #,1,Goto(monitor,s,1)
exten => t,1,Goto(monitor,s,1)
@@ -0,0 +1,54 @@
;
; Sample Parking configuration
;
[general]
parkext => 700 ; What extension to dial to park
parkpos => 701-720 ; What extensions to park calls on. These needs to be
; numeric, as Asterisk starts from the start position
; and increments with one for the next parked call.
context => parkedcalls ; Which context parked calls are in
;parkingtime => 45 ; Number of seconds a call can be parked for
; (default is 45 seconds)
;transferdigittimeout => 3 ; Number of seconds to wait between digits when transferring a call
;courtesytone = beep ; Sound file to play to the parked caller
; when someone dials a parked call
;xfersound = beep ; to indicate an attended transfer is complete
;xferfailsound = beeperr ; to indicate a failed transfer
;adsipark = yes ; if you want ADSI parking announcements
;findslot => next ; Continue to the 'next' free parking space.
; Defaults to 'first' available
;pickupexten = *8 ; Configure the pickup extension. Default is *8
;featuredigittimeout = 500 ; Max time (ms) between digits for
; feature activation. Default is 500
[featuremap]
;blindxfer => #1 ; Blind transfer
;disconnect => *0 ; Disconnect
;automon => *1 ; One Touch Record
;atxfer => *2 ; Attended transfer
; ATTENTION VICIDIAL ADMINS:
; The follow effectively disables the built in blind transfer feature of Asterisk.
; This sets it to a DTMF tone that asterisk cannot even process, that is only available
; on certain telco style test sets. This does NOT disable the VICIDIAL blind transfer
; ability as this is implemented through other means. If you are using your VICIDIAL
; server as PBX you may want to comment this out. Be aware however that this can make
; it so that anyone can transfer the call to anyone else that is allowed by your dialplan.
; IE someone you have called could transfer the call to a their mother, the Pope, or
; a 900 number if you do not have your dialplan carefully setup.
blindxfer => CC
disconnect => B
[applicationmap]
; Note that the DYNAMIC_FEATURES channel variable must be set to use the features
; defined here. The value of DYNAMIC_FEATURES should be the names of the features
; to allow the channel to use separated by '#'. For example:
; Set(DYNAMIC_FEATURES=myfeature1#myfeature2#myfeature3)
;
;testfeature => #9,callee,Playback,tt-monkeys ;Play tt-monkeys to
;callee if #9 was pressed
@@ -0,0 +1,13 @@
[general]
bindport=4569
iaxcompat=yes
bandwidth=high
disallow=all
allow=all
allow=gsm ; Always allow GSM, it's cool :)
jitterbuffer=no
tos=lowdelay
context=trunkinbound
#include iax-vicidial.conf
@@ -0,0 +1,45 @@
[general]
bindport=4569 ; bindport and bindaddr may be specified
bindaddr=0.0.0.0 ; more than once to bind to multiple
;iaxcompat=yes
;nochecksums=no
delayreject=yes
;amaflags=default
adsi=no
;accountcode=vicidial
language=en
mohinterpret=passthrough
mohsuggest=default
disallow=all
allow=ulaw
allow=gsm
jitterbuffer=yes
forcejitterbuffer=no
maxjitterbuffer=1000
maxjitterinterps=10
resyncthreshold=1000
trunkfreq=20 ; How frequently to send trunk msgs (in ms)
trunktimestamps=yes
minregexpire = 60
maxregexpire = 360
iaxthreadcount = 50
iaxmaxthreadcount = 250
;register => marko:secretpass@tormenta.linux-support.net
;register => joe@remotehost:5656
;register => marko:[torkey]@tormenta.linux-support.net
;register => user:pass@iaxtel.com
;register => FWDNumber:passwd@iax.fwdnet.net
authdebug=no
regcontext=default
autokill=yes
codecpriority=host
allowfwdownload=no
;rtcachefriends=yes ; Cache realtime friends by adding them to the internal list
;rtupdate=yes ; Send registry updates to database using realtime? (yes|no)
;rtautoclear=yes ; Auto-Expire friends created on the fly on the same schedule
;rtignoreregexpire=yes ; When reading a peer from Realtime, if the peer's registration
context=trunkinbound
#include iax-vicidial.conf
;ASTloop/ASTblind removed and now included in iax-vicidial.conf
@@ -0,0 +1,3 @@
[logfiles]
console => notice,warning,error
messages => notice,warning,error,debug,verbose
@@ -0,0 +1,24 @@
[general]
enabled = yes
port = 5038
bindaddr = 0.0.0.0
[cron]
secret = 1234
read = system,call,log,verbose,command,agent,user
write = system,call,log,verbose,command,agent,user
[updatecron]
secret = 1234
read = command
write = command
[listencron]
secret = 1234
read = system,call,log,verbose,command,agent,user
write = command
[sendcron]
secret = 1234
read = command
write = system,call,log,verbose,command,agent,user
@@ -0,0 +1,5 @@
[rooms]
conf => 8600
conf => 8601,1234
#include meetme-vicidial.conf
@@ -0,0 +1,22 @@
;
; Music on Hold -- Sample Configuration
;
[old-default]
mode=files
directory=/var/lib/asterisk/mohmp3
[old-quiet]
mode=files
directory=/var/lib/asterisk/quiet-mp3
#include musiconhold-vicidial.conf
; valid mode options:
; quietmp3 -- default
; mp3 -- loud
; mp3nb -- unbuffered
; quietmp3nb -- quiet unbuffered
; custom -- run a custom application
; files -- read files from a directory in any Asterisk supported format
@@ -0,0 +1,80 @@
[general]
context=trunkinbound ; Default context for incoming calls
allowguest=no ; Allow or reject guest calls (default is yes, this can also be set to 'osp'
;realm=mydomain.tld ; Realm for digest authentication
bindport=5060 ; UDP Port to bind to (SIP standard port is 5060)
bindaddr=0.0.0.0 ; IP address to bind to (0.0.0.0 binds to all)
srvlookup=yes ; Enable DNS SRV lookups on outbound calls
;domain=mydomain.tld ; Set default domain for this host
;domain=mydomain.tld,mydomain-incoming
;domain=1.2.3.4 ; Add IP address as local domain
;allowexternalinvites=no ; Disable INVITE and REFER to non-local domains
;autodomain=yes ; Turn this on to have Asterisk add local host
;pedantic=yes ; Enable slow, pedantic checking for Pingtel
;tos=184 ; Set IP QoS to either a keyword or numeric val
tos=lowdelay ; lowdelay,throughput,reliability,mincost,none
maxexpiry=3600 ; Max length of incoming registration we allow
defaultexpiry=120 ; Default length of incoming/outgoing registration
;notifymimetype=text/plain ; Allow overriding of mime type in MWI NOTIFY
;checkmwi=10 ; Default time between mailbox checks for peers
;vmexten=voicemail ; dialplan extension to reach mailbox sets the
;videosupport=yes ; Turn on support for SIP video
;recordhistory=yes ; Record SIP history by default
disallow=all ; First disallow all codecs
allow=ulaw ; Allow codecs in order of preference
allow=gsm ;
musicclass=default ; Sets the default music on hold class for all SIP calls
language=en ; Default language setting for all users/peers
relaxdtmf=yes ; Relax dtmf handling
rtptimeout=60 ; Terminate call if 60 seconds of no RTP activity
;rtpholdtimeout=300 ; Terminate call if 300 seconds of no RTP activity
trustrpid = no ; If Remote-Party-ID should be trusted
sendrpid = yes ; If Remote-Party-ID should be sent
progressinband=no ; If we should generate in-band ringing always
;useragent=Asterisk PBX ; Allows you to change the user agent string
promiscredir = no ; If yes, allows 302 or REDIR to non-local SIP address
;usereqphone = no ; If yes, ";user=phone" is added to uri that contains
dtmfmode = rfc2833 ; Set default dtmfmode for sending DTMF. Default: rfc2833
;compactheaders = yes ; send compact sip headers.
;sipdebug = yes ; Turn on SIP debugging by default, from
;subscribecontext = default ; Set a specific context for SUBSCRIBE requests
;notifyringing = yes ; Notify subscriptions on RINGING state
;alwaysauthreject = yes ; When an incoming INVITE or REGISTER is to be rejected,
;regcontext=sipregistrations
;registertimeout=20 ; retry registration calls every 20 seconds (default)
;registerattempts=10 ; Number of registration attempts before we give up
callevents=no ; generate manager events when sip ua performs events (e.g. hold)
;externip = 192.168.1.1 ; Address that we're going to put in outbound SIP messages
;externhost=foo.dyndns.net ; Alternatively you can specify an
;externrefresh=10 ; How often to refresh externhost if
localnet=192.168.0.0/255.255.0.0; All RFC 1918 addresses are local networks
localnet=10.0.0.0/255.0.0.0 ; Also RFC1918
localnet=172.16.0.0/12 ; Another RFC1918 with CIDR notation
localnet=169.254.0.0/255.255.0.0 ;Zero conf local network
nat=yes ; Global NAT settings (Affects all peers and users)
canreinvite=no
;rtcachefriends=yes ; Cache realtime friends by adding them to the internal list
;rtupdate=yes ; Send registry updates to database using realtime? (yes|no)
;rtautoclear=yes ; Auto-Expire friends created on the fly on the same schedule
;ignoreregexpire=yes ; Enabling this setting has two functions:
; domain=myasterisk.dom
; domain=customer.com,customer-context
; autodomain=yes
; fromdomain=mydomain.tld ; When making outbound SIP INVITEs to
#include sip-vicidial.conf
; register SIP account on remote machine if using SIP trunks
; register => testSIPtrunk:test@10.10.10.16:5060
;
; setup account for SIP trunking:
; [SIPtrunk]
; disallow=all
; allow=ulaw
; allow=alaw
; type=friend
; username=testSIPtrunk
; secret=test
; host=10.10.10.16
; dtmfmode=inband
; qualify=1000
@@ -0,0 +1,104 @@
[general]
context=trunkinbound ; Default context for incoming calls
allowguest=no ; Allow or reject guest calls (default is yes)
allowoverlap=no ; Disable overlap dialing support. (Default is yes)
;allowtransfer=no ; Disable all transfers (unless enabled in peers or users)
;realm=mydomain.tld ; Realm for digest authentication
bindport=5060 ; UDP Port to bind to (SIP standard port is 5060)
bindaddr=0.0.0.0 ; IP address to bind to (0.0.0.0 binds to all)
srvlookup=yes ; Enable DNS SRV lookups on outbound calls
;domain=mydomain.tld ; Set default domain for this host
;pedantic=yes ; Enable checking of tags in headers,
;tos_sip=cs3 ; Sets TOS for SIP packets.
;tos_audio=ef ; Sets TOS for RTP audio packets.
;tos_video=af41 ; Sets TOS for RTP video packets.
;maxexpiry=3600 ; Maximum allowed time of incoming registrations
;minexpiry=60 ; Minimum length of registrations/subscriptions (default 60)
;defaultexpiry=120 ; Default length of incoming/outgoing registration
;t1min=100 ; Minimum roundtrip time for messages to monitored hosts
;notifymimetype=text/plain ; Allow overriding of mime type in MWI NOTIFY
;checkmwi=10 ; Default time between mailbox checks for peers
;buggymwi=no ; Cisco SIP firmware doesn't support the MWI RFC
;vmexten=voicemail ; dialplan extension to reach mailbox sets the
disallow=all ; First disallow all codecs
allow=ulaw ; Allow codecs in order of preference
allow=gsm
mohinterpret=default
mohsuggest=default
language=en ; Default language setting for all users/peers
relaxdtmf=yes ; Relax dtmf handling
trustrpid = no ; If Remote-Party-ID should be trusted
sendrpid = yes ; If Remote-Party-ID should be sent
progressinband=no ; If we should generate in-band ringing always
;useragent=Asterisk PBX ; Allows you to change the user agent string
;promiscredir = no ; If yes, allows 302 or REDIR to non-local SIP address
;usereqphone = no ; If yes, ";user=phone" is added to uri that contains
dtmfmode = rfc2833 ; Set default dtmfmode for sending DTMF. Default: rfc2833
;compactheaders = yes ; send compact sip headers.
videosupport=no ; Turn on support for SIP video. You need to turn this on
;maxcallbitrate=384 ; Maximum bitrate for video calls (default 384 kb/s)
callevents=yes ; generate manager events when sip ua
;alwaysauthreject = yes ; When an incoming INVITE or REGISTER is to be rejected,
;g726nonstandard = yes ; If the peer negotiates G726-32 audio, use AAL2 packing
;matchexterniplocally = yes ; Only substitute the externip or externhost setting if it matches
;regcontext=sipregistrations
rtptimeout=60 ; Terminate call if 60 seconds of no RTP or RTCP activity
;rtpholdtimeout=300 ; Terminate call if 300 seconds of no RTP or RTCP activity
;rtpkeepalive=<secs> ; Send keepalives in the RTP stream to keep NAT open
;sipdebug = yes ; Turn on SIP debugging by default, from
;recordhistory=yes ; Record SIP history by default
;dumphistory=yes ; Dump SIP history at end of SIP dialogue
;allowsubscribe=no ; Disable support for subscriptions. (Default is yes)
;subscribecontext = default ; Set a specific context for SUBSCRIBE requests
notifyringing = yes ; Notify subscriptions on RINGING state (default: no)
notifyhold = yes ; Notify subscriptions on HOLD state (default: no)
limitonpeers = yes ; Apply call limits on peers only. This will improve
;t38pt_udptl = yes ; Default false
;register => 1234:password@mysipprovider.com
;registertimeout=20 ; retry registration calls every 20 seconds (default)
;registerattempts=10 ; Number of registration attempts before we give up
;externip = 192.168.1.1 ; Address that we're going to put in outbound SIP
;externhost=test.test.com ; Alternatively you can specify a domain
;externrefresh=10 ; How often to refresh externhost if
localnet=192.168.0.0/255.255.0.0; All RFC 1918 addresses are local networks
localnet=10.0.0.0/255.0.0.0 ; Also RFC1918
localnet=172.16.0.0/12 ; Another RFC1918 with CIDR notation
localnet=169.254.0.0/255.255.0.0 ;Zero conf local network
nat=yes ; Global NAT settings (Affects all peers and users)
canreinvite=no ; Asterisk by default tries to redirect the
;directrtpsetup=yes ; Enable the new experimental direct RTP setup. This sets up
;rtcachefriends=yes ; Cache realtime friends by adding them to the internal list
;rtsavesysname=yes ; Save systemname in realtime database at registration
;rtupdate=yes ; Send registry updates to database using realtime? (yes|no)
;rtautoclear=yes ; Auto-Expire friends created on the fly on the same schedule
;ignoreregexpire=yes ; Enabling this setting has two functions:
;domain=mydomain.tld,mydomain-incoming
;domain=1.2.3.4 ; Add IP address as local domain
;allowexternaldomains=no ; Disable INVITE and REFER to non-local domains
;autodomain=yes ; Turn this on to have Asterisk add local host
;fromdomain=mydomain.tld ; When making outbound SIP INVITEs to
jbenable = yes ; Enables the use of a jitterbuffer on the receiving side of a
jbforce = no ; Forces the use of a jitterbuffer on the receive side of a SIP
jbmaxsize = 100 ; Max length of the jitterbuffer in milliseconds.
jbresyncthreshold = 1000 ; Jump in the frame timestamps over which the jitterbuffer is
jbimpl = fixed ; Jitterbuffer implementation, used on the receiving side of a SIP
jblog = no ; Enables jitterbuffer frame logging. Defaults to "no".
qualify=yes ; By default, qualify all peers at 2000ms
limitonpeer = yes ; enable call limit on a per peer basis, different from limitonpeers
#include sip-vicidial.conf
; register SIP account on remote machine if using SIP trunks
; register => testSIPtrunk:test@10.10.10.16:5060
;
; setup account for SIP trunking:
; [SIPtrunk]
; disallow=all
; allow=ulaw
; allow=alaw
; type=friend
; username=testSIPtrunk
; secret=test
; host=10.10.10.16
; dtmfmode=inband
; qualify=1000
@@ -0,0 +1,59 @@
; WARNING- THIS FILE IS AUTO-GENERATED BY VICIDIAL, ANY EDITS YOU MAKE WILL BE LOST
; ONLY VOICEMAIL BOXES DEFINED IN VICIDIAL WILL BE ALLOWED IN THIS FILE
; IF YOU WANT TO ADD NON-VICIDIAL VOICEMAIL BOXES, ADD THEM IN A NEW
; CONTEXT BEFORE THE DEFAULT CONTEXT
[general]
format=wav49|gsm|wav
serveremail=asterisk
attach=yes
skipms=3000
maxsilence=10
silencethreshold=128
maxlogins=3
maxmsg=500
maxmessage=300
emailbody=Dear ${VM_NAME}:\n\n\tJust wanted to let you know you were just left a ${VM_DUR} long message (number ${VM_MSGNUM})\nin mailbox ${VM_MAILBOX} from ${VM_CIDNAME} ${VM_CIDNUM}, on ${VM_DATE}, so you might\nwant to check it when you get a chance. Thanks!\n\n\t\t\t\t--PBX\n
[zonemessages]
newzealand=Pacific/Auckland|'vm-received' q 'digits/at' H 'digits/hundred' M 'hours'
australiaeast=Australia/Sydney|'vm-received' q 'digits/at' H 'digits/hundred' M 'hours'
australiacentral=Australia/Adelaide|'vm-received' q 'digits/at' H 'digits/hundred' M 'hours'
australiawest=Australia/Perth|'vm-received' q 'digits/at' H 'digits/hundred' M 'hours'
japan=Asia/Tokyo|'vm-received' q 'digits/at' H 'digits/hundred' M 'hours'
philippines=Asia/Manila|'vm-received' q 'digits/at' H 'digits/hundred' M 'hours'
china=Asia/Shanghai|'vm-received' q 'digits/at' H 'digits/hundred' M 'hours'
malaysia=Asia/Kuala_Lumpur|'vm-received' q 'digits/at' H 'digits/hundred' M 'hours'
thailand=Asia/Bangkok|'vm-received' q 'digits/at' H 'digits/hundred' M 'hours'
india=Asia/Calcutta|'vm-received' q 'digits/at' H 'digits/hundred' M 'hours'
pakistan=Asia/Karachi|'vm-received' q 'digits/at' H 'digits/hundred' M 'hours'
russiaeast=Europe/Moscow|'vm-received' q 'digits/at' H 'digits/hundred' M 'hours'
kenya=Africa/Nairobi|'vm-received' q 'digits/at' H 'digits/hundred' M 'hours'
europeaneast=Europe/Kiev|'vm-received' q 'digits/at' H 'digits/hundred' M 'hours'
southafrica=Africa/Johannesburg|'vm-received' q 'digits/at' H 'digits/hundred' M 'hours'
european=Europe/Copenhagen|'vm-received' q 'digits/at' H 'digits/hundred' M 'hours'
nigeria=Africa/Lagos|'vm-received' q 'digits/at' H 'digits/hundred' M 'hours'
uk=Europe/London|'vm-received' q 'digits/at' H 'digits/hundred' M 'hours'
brazil=America/Sao_Paulo|'vm-received' Q 'digits/at' IMp
newfoundland=Canada/Newfoundland|'vm-received' Q 'digits/at' IMp
carribeaneast=America/Santo_Domingo|'vm-received' Q 'digits/at' IMp
atlantic=Canada/Atlantic|'vm-received' Q 'digits/at' IMp
chile=America/Santiago|'vm-received' Q 'digits/at' IMp
eastern=America/New_York|'vm-received' Q 'digits/at' IMp
peru=America/Lima|'vm-received' Q 'digits/at' IMp
central=America/Chicago|'vm-received' Q 'digits/at' IMp
mexicocity=America/Mexico_City|'vm-received' Q 'digits/at' IMp
mountain=America/Denver|'vm-received' Q 'digits/at' IMp
arizona=America/Phoenix|'vm-received' Q 'digits/at' IMp
saskatchewan=America/Saskatchewan|'vm-received' Q 'digits/at' IMp
pacific=America/Los_Angeles|'vm-received' Q 'digits/at' IMp
alaska=America/Anchorage|'vm-received' Q 'digits/at' IMp
hawaii=Pacific/Honolulu|'vm-received' Q 'digits/at' IMp
eastern24=America/New_York|'vm-received' q 'digits/at' H 'digits/hundred' M 'hours'
central24=America/Chicago|'vm-received' q 'digits/at' H 'digits/hundred' M 'hours'
mountain24=America/Denver|'vm-received' q 'digits/at' H 'digits/hundred' M 'hours'
pacific24=America/Los_Angeles|'vm-received' q 'digits/at' H 'digits/hundred' M 'hours'
military=Zulu|'vm-received' q 'digits/at' H N 'hours' 'phonetic/z_p'
[default]
; mailboxes go here
@@ -0,0 +1,46 @@
# /etc/asterisk/zapata.conf:
# Digium/Clone T100P EXAMPLE:
# Here is an example of a configuration where an T100P single T1 card is used
# for connecting a single T1 PRI circuit with 23 voice channels
[channels]
language=it
rxgain=1.0
txgain=1.0
usecallerid=yes
callerid=asreceived
busydetect=no
context=default
echotraining=no
echocancel=yes
echocancelwhenbridged=no
usecallingpres=yes
callprogress = no
prilocaldialplan=unknown
pridialplan=unknown
overlapdial=yes
switchtype=euroisdn
immediate=no
group=0
signalling=pri_cpe
#PRI 1
channel => 1-15
channel => 17-31
#PRI 2
channel => 32-46
channel => 48-62
#PRI 3
channel => 63-77
channel => 79-93
group=1
signalling=pri_net
#PRI 4
channel => 94-108
channel => 110-124
@@ -0,0 +1,46 @@
# /etc/asterisk/zapata.conf:
# Digium/Clone T100P EXAMPLE:
# Here is an example of a configuration where an T100P single T1 card is used
# for connecting a single T1 PRI circuit with 23 voice channels
[channels]
group=1
language=en
signalling=pri_cpe
usecallerid=yes
callerid=asreceived
callprogress=no
busydetect=no
context=default
echocancel=64
echocancelwhenbridged=yes
rxgain=1.0
txgain=1.0
channel => 1-23
# FOR A RBS WinkStart T1 YOU WOULD USE SOMETHING LIKE THIS:
# group=1
# language=en
# signalling=em_w
# usecallerid=yes
# callerid=asreceived
# context=default
# echocancel=64
# echocancelwhenbridged=yes
# rxgain=1.0
# txgain=1.0
# channel => 1-24
#
# FOR AN ANALOG T1 ChannelBank YOU WOULD USE SOMETHING LIKE THIS:
# group=4
# language=en
# signalling=fxo_ks
# usecallerid=yes
# callerid=asreceived
# context=default
# echocancel=64
# echocancelwhenbridged=no
# rxgain=-1.0
# txgain=-1.0
# channel => 1-24
@@ -0,0 +1,13 @@
# /etc/asterisk/zapata.conf:
# Digium/Clone X100P EXAMPLE:
# Here is an example of a configuration where an X100P single FXO card is used
# for zaptel timing and not used for calling:
#
# NOTE: you can get an X100P on ebay for $10-30 that will work with Asterisk
[trunkgroups]
[channels]
context=unused
signalling=fxs_ks
channel => 1
@@ -0,0 +1,24 @@
# /etc/zaptel.conf:
# Digium/Clone T100P EXAMPLE:
# Here is an example of a configuration where an T100P single T1 card is used
# for connecting a single T1 PRI circuit with 23 voice channels
loadzone=it
defaultzone=it
span=1,1,0,ccs,hdb3,crc4
bchan=1-15,17-31
dchan=16
span=2,2,0,ccs,hdb3,crc4
bchan=32-46,48-62
dchan=47
span=3,3,0,ccs,hdb3,crc4
bchan=63-77,79-93
dchan=78
span=4,4,0,ccs,hdb3,crc4
bchan=94-108,110-124
dchan=109
@@ -0,0 +1,23 @@
# /etc/zaptel.conf:
# Digium/Clone T100P EXAMPLE:
# Here is an example of a configuration where an T100P single T1 card is used
# for connecting a single T1 PRI circuit with 23 voice channels
span=1,1,0,esf,b8zs
bchan=1-23
dchan=24
loadzone = us
defaultzone=us
# FOR A RBS WinkStart T1 YOU WOULD USE SOMETHING LIKE THIS:
# span=1,1,0,esf,b8zs
# e&m=1-24
# loadzone = us
# defaultzone=us
#
# FOR AN ANALOG T1 ChannelBank YOU WOULD USE SOMETHING LIKE THIS:
# span=1,1,0,esf,b8zs
# fxoks=1-24
# loadzone = us
# defaultzone=us
#
@@ -0,0 +1,10 @@
# /etc/zaptel.conf:
# Digium/Clone X100P EXAMPLE:
# Here is an example of a configuration where an X100P single FXO card is used
# for zaptel timing and not used for calling:
#
# NOTE: you can get an X100P on ebay for $10-30 that will work with Asterisk
loadzone=us
defaultzone=us
fxsks=1