Added Agent API functions for Send DTMF, Park Customer and the Transfer Conference functions as well

Backported two small bug fixes to 2.2 branch

git-svn-id: svn://192.168.202.10@1443 3d104415-ff17-0410-8863-d5cf3c621b8a
This commit is contained in:
mattf
2010-05-28 02:26:51 +00:00
parent 347b530093
commit e5366d85e6
9 changed files with 658 additions and 34 deletions
+3
View File
@@ -156,6 +156,9 @@ OTHER CHANGES:
36. Added utility in CallCard section to generate new card IDs and view by Run.
37. Added Agent API functions for Send DTMF, Park Customer and the Transfer
Conference functions as well
+104 -10
View File
@@ -22,6 +22,9 @@ 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
New scripts:
@@ -445,6 +448,107 @@ 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
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
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
@@ -459,16 +563,6 @@ update vicidial_live_agents set external_hangup=1 where user='1000';
update vicidial_live_agents set external_status='A' where user='1000';
Database changes: (these are already in the system, DO NOT RUN THEM)
ALTER TABLE vicidial_live_agents ADD external_hangup VARCHAR(1) default '';
ALTER TABLE vicidial_live_agents ADD external_status VARCHAR(6) default '';
ALTER TABLE vicidial_live_agents ADD external_pause VARCHAR(20) default '';
ALTER TABLE vicidial_live_agents ADD external_dial VARCHAR(100) default '';
ALTER TABLE vicidial_users ADD vdc_agent_api_access ENUM('0','1') default '0';
ALTER TABLE system_settings ADD vdc_agent_api_active ENUM('0','1') default '0';
CREATE TABLE vicidial_api_log (
api_id INT(9) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
user VARCHAR(20) NOT NULL,
+4 -1
View File
@@ -373,6 +373,9 @@ outbound_autodial ENUM('Y','N') default 'N',
manager_ingroup_set ENUM('Y','N','SET') default 'N',
ra_user VARCHAR(20) default '',
ra_extension VARCHAR(100) default '',
external_dtmf VARCHAR(100) default '',
external_transferconf VARCHAR(100) default '',
external_park VARCHAR(40) default '',
index (random_id),
index (last_call_time),
index (last_update_time),
@@ -2245,7 +2248,7 @@ ALTER TABLE vicidial_agent_log_archive MODIFY agent_log_id INT(9) UNSIGNED NOT N
CREATE TABLE vicidial_carrier_log_archive LIKE vicidial_carrier_log;
UPDATE system_settings SET db_schema_version='1224',db_schema_update_date=NOW();
UPDATE system_settings SET db_schema_version='1225',db_schema_update_date=NOW();
GRANT RELOAD ON *.* TO cron@'%';
GRANT RELOAD ON *.* TO cron@localhost;
+6
View File
@@ -349,3 +349,9 @@ ALTER table vicidial_inbound_groups ADD onhold_prompt_no_block ENUM('N','Y') def
ALTER table vicidial_inbound_groups ADD onhold_prompt_seconds SMALLINT(5) default '10';
UPDATE system_settings SET db_schema_version='1224',db_schema_update_date=NOW();
ALTER TABLE vicidial_live_agents ADD external_dtmf VARCHAR(100) default '';
ALTER TABLE vicidial_live_agents ADD external_transferconf VARCHAR(100) default '';
ALTER TABLE vicidial_live_agents ADD external_park VARCHAR(40) default '';
UPDATE system_settings SET db_schema_version='1225',db_schema_update_date=NOW();
+343 -3
View File
@@ -10,7 +10,7 @@
# - $user
# - $pass
# - $agent_user
# - $function - ('external_hangup','external_status','external_pause','external_dial','change_ingroups')
# - $function - ('external_hangup','external_status','external_pause','external_dial','change_ingroups',...)
# - $value
# - $vendor_id
# - $focus
@@ -47,10 +47,11 @@
# 100315-2021 - Added ra_call_control function
# 100318-0605 - Added close_window_link and language options
# 100401-2357 - Added external_add_lead function (contributed by aouyar)
# 100527-0926 - Added send_dtmf, transfer_conference and park_call functions
#
$version = '2.4-14';
$build = '100401-2357';
$version = '2.4-15';
$build = '100527-0926';
require("dbconnect.php");
@@ -157,6 +158,10 @@ if (isset($_GET["dnc_check"])) {$dnc_check=$_GET["dnc_check"];}
elseif (isset($_POST["dnc_check"])) {$dnc_check=$_POST["dnc_check"];}
if (isset($_GET["campaign_dnc_check"])) {$campaign_dnc_check=$_GET["campaign_dnc_check"];}
elseif (isset($_POST["campaign_dnc_check"])) {$campaign_dnc_check=$_POST["campaign_dnc_check"];}
if (isset($_GET["dial_override"])) {$dial_override=$_GET["dial_override"];}
elseif (isset($_POST["dial_override"])) {$dial_override=$_POST["dial_override"];}
if (isset($_GET["consultative"])) {$consultative=$_GET["consultative"];}
elseif (isset($_POST["consultative"])) {$consultative=$_POST["consultative"];}
if (isset($_GET["DB"])) {$DB=$_GET["DB"];}
elseif (isset($_POST["DB"])) {$DB=$_POST["DB"];}
@@ -228,6 +233,8 @@ if ($non_latin < 1)
$vendor_lead_code = ereg_replace("[^ -\.\_0-9a-zA-Z]","",$vendor_lead_code);
$rank = ereg_replace("[^-0-9]","",$rank);
$owner = ereg_replace("[^-\.\:\/\@\_0-9a-zA-Z]","",$owner);
$dial_override = ereg_replace("[^A-Z]","",$dial_override);
$consultative = ereg_replace("[^A-Z]","",$consultative);
}
else
{
@@ -248,6 +255,7 @@ $ENTRYdate = date("YmdHis");
$MT[0]='';
$api_script = 'agent';
$api_logging = 1;
if ($consultative != 'YES') {$consultative='NO';}
################################################################################
@@ -1953,6 +1961,338 @@ if ($function == 'ra_call_control')
################################################################################
### BEGIN - send_dtmf - send dtmf signals
################################################################################
if ($function == 'send_dtmf')
{
if ( (strlen($value)<1) or ( (strlen($agent_user)<1) and (strlen($alt_user)<2) ) )
{
$result = 'ERROR';
$result_reason = "send_dtmf not valid";
echo "$result: $result_reason - $value|$agent_user\n";
api_log($link,$api_logging,$api_script,$user,$agent_user,$function,$value,$result,$result_reason,$source,$data);
}
else
{
if (strlen($alt_user)>1)
{
$stmt = "select count(*) from vicidial_users where custom_three='$alt_user';";
if ($DB) {echo "$stmt\n";}
$rslt=mysql_query($stmt, $link);
$row=mysql_fetch_row($rslt);
if ($row[0] > 0)
{
$stmt = "select user from vicidial_users where custom_three='$alt_user' order by user;";
if ($DB) {echo "$stmt\n";}
$rslt=mysql_query($stmt, $link);
$row=mysql_fetch_row($rslt);
$agent_user = $row[0];
}
else
{
$result = 'ERROR';
$result_reason = "no user found";
echo "$result: $result_reason - $alt_user\n";
api_log($link,$api_logging,$api_script,$user,$agent_user,$function,$value,$result,$result_reason,$source,$data);
}
}
$stmt = "select count(*) from vicidial_live_agents where user='$agent_user';";
if ($DB) {echo "$stmt\n";}
$rslt=mysql_query($stmt, $link);
$row=mysql_fetch_row($rslt);
if ($row[0] > 0)
{
$stmt="UPDATE vicidial_live_agents set external_dtmf='$value' where user='$agent_user';";
if ($format=='debug') {echo "\n<!-- $stmt -->";}
$rslt=mysql_query($stmt, $link);
$result = 'SUCCESS';
$result_reason = "send_dtmf function set";
echo "$result: $result_reason - $value|$agent_user\n";
api_log($link,$api_logging,$api_script,$user,$agent_user,$function,$value,$result,$result_reason,$source,$data);
}
else
{
$result = 'ERROR';
$result_reason = "agent_user is not logged in";
echo "$result: $result_reason - $agent_user\n";
api_log($link,$api_logging,$api_script,$user,$agent_user,$function,$value,$result,$result_reason,$source,$data);
}
}
}
################################################################################
### END - send_dtmf
################################################################################
################################################################################
### BEGIN - park_call - send customer to park or pick up customer from park
################################################################################
if ($function == 'park_call')
{
if ( (strlen($value)<10) or ( (strlen($agent_user)<1) and (strlen($alt_user)<2) ) )
{
$result = 'ERROR';
$result_reason = "park_call not valid";
echo "$result: $result_reason - $value|$agent_user\n";
api_log($link,$api_logging,$api_script,$user,$agent_user,$function,$value,$result,$result_reason,$source,$data);
}
else
{
if (strlen($alt_user)>1)
{
$stmt = "select count(*) from vicidial_users where custom_three='$alt_user';";
if ($DB) {echo "$stmt\n";}
$rslt=mysql_query($stmt, $link);
$row=mysql_fetch_row($rslt);
if ($row[0] > 0)
{
$stmt = "select user from vicidial_users where custom_three='$alt_user' order by user;";
if ($DB) {echo "$stmt\n";}
$rslt=mysql_query($stmt, $link);
$row=mysql_fetch_row($rslt);
$agent_user = $row[0];
}
else
{
$result = 'ERROR';
$result_reason = "no user found";
echo "$result: $result_reason - $alt_user\n";
api_log($link,$api_logging,$api_script,$user,$agent_user,$function,$value,$result,$result_reason,$source,$data);
}
}
$stmt = "select count(*) from vicidial_live_agents where user='$agent_user';";
if ($DB) {echo "$stmt\n";}
$rslt=mysql_query($stmt, $link);
$row=mysql_fetch_row($rslt);
if ($row[0] > 0)
{
$stmt = "select lead_id from vicidial_live_agents where user='$agent_user';";
if ($DB) {echo "$stmt\n";}
$rslt=mysql_query($stmt, $link);
$row=mysql_fetch_row($rslt);
$lead_id = $row[0];
if ($lead_id > 0)
{
$stmt="UPDATE vicidial_live_agents set external_park='$value' where user='$agent_user';";
if ($format=='debug') {echo "\n<!-- $stmt -->";}
$rslt=mysql_query($stmt, $link);
$result = 'SUCCESS';
$result_reason = "park_call function set";
echo "$result: $result_reason - $value|$agent_user\n";
api_log($link,$api_logging,$api_script,$user,$agent_user,$function,$value,$result,$result_reason,$source,$data);
}
else
{
$result = 'ERROR';
$result_reason = "agent_user does not have a lead on their screen";
echo "$result: $result_reason - $agent_user\n";
api_log($link,$api_logging,$api_script,$user,$agent_user,$function,$value,$result,$result_reason,$source,$data);
}
}
else
{
$result = 'ERROR';
$result_reason = "agent_user is not logged in";
echo "$result: $result_reason - $agent_user\n";
api_log($link,$api_logging,$api_script,$user,$agent_user,$function,$value,$result,$result_reason,$source,$data);
}
}
}
################################################################################
### END - park_call
################################################################################
################################################################################
### BEGIN - transfer_conference - send several different functions for 3-way calling and transfers
################################################################################
if ($function == 'transfer_conference')
{
if ( (strlen($value)<8) or ( (strlen($agent_user)<1) and (strlen($alt_user)<2) ) )
{
$result = 'ERROR';
$result_reason = "transfer_conference not valid";
echo "$result: $result_reason - $value|$agent_user\n";
api_log($link,$api_logging,$api_script,$user,$agent_user,$function,$value,$result,$result_reason,$source,$data);
}
else
{
$processed=0;
$SUCCESS=0;
if (strlen($alt_user)>1)
{
$stmt = "select count(*) from vicidial_users where custom_three='$alt_user';";
if ($DB) {echo "$stmt\n";}
$rslt=mysql_query($stmt, $link);
$row=mysql_fetch_row($rslt);
if ($row[0] > 0)
{
$stmt = "select user from vicidial_users where custom_three='$alt_user' order by user;";
if ($DB) {echo "$stmt\n";}
$rslt=mysql_query($stmt, $link);
$row=mysql_fetch_row($rslt);
$agent_user = $row[0];
}
else
{
$result = 'ERROR';
$result_reason = "no user found";
echo "$result: $result_reason - $alt_user\n";
api_log($link,$api_logging,$api_script,$user,$agent_user,$function,$value,$result,$result_reason,$source,$data);
}
}
$stmt = "select count(*) from vicidial_live_agents where user='$agent_user';";
if ($DB) {echo "$stmt\n";}
$rslt=mysql_query($stmt, $link);
$row=mysql_fetch_row($rslt);
if ($row[0] > 0)
{
$stmt = "select lead_id,callerid from vicidial_live_agents where user='$agent_user';";
if ($DB) {echo "$stmt\n";}
$rslt=mysql_query($stmt, $link);
$row=mysql_fetch_row($rslt);
$lead_id = $row[0];
$callerid = $row[1];
if ( ($lead_id > 0) and (strlen($callerid)>15) )
{
### START In-group transfer or bridge ###
if ( ($value=='LOCAL_CLOSER') or ( ( ($value=='DIAL_WITH_CUSTOMER') or ($value=='PARK_CUSTOMER_DIAL') ) and ($consultative=='YES') ) )
{
$processed++;
if (strlen($ingroup_choices) < 2)
{
$result = 'ERROR';
$result_reason = "ingroup is not valid";
echo "$result: $result_reason - $ingroup_choices\n";
api_log($link,$api_logging,$api_script,$user,$agent_user,$function,$value,$result,$result_reason,$source,$data);
}
else
{
if (preg_match("/DEFAULTINGROUP/",$ingroup_choices))
{
$stmt = "select campaign_id,call_type from vicidial_auto_calls where callerid='$callerid';";
if ($DB) {echo "$stmt\n";}
$rslt=mysql_query($stmt, $link);
$row=mysql_fetch_row($rslt);
$campaign_id = $row[0];
$call_type = $row[1];
if ($call_type=='IN')
{
$stmt = "select default_xfer_group from vicidial_inbound_groups where group_id='$campaign_id';";
}
else
{
$stmt = "select default_xfer_group from vicidial_campaigns where campaign_id='$campaign_id';";
}
if ($DB) {echo "$stmt\n";}
$rslt=mysql_query($stmt, $link);
$row=mysql_fetch_row($rslt);
$ingroup_choices = $row[0];
}
$stmt = "select count(*) from vicidial_inbound_groups where group_id='$ingroup_choices' and active='Y';";
if ($DB) {echo "$stmt\n";}
$rslt=mysql_query($stmt, $link);
$row=mysql_fetch_row($rslt);
$ingroupactive = $row[0];
if ($ingroupactive < 1)
{
$result = 'ERROR';
$result_reason = "ingroup is not valid";
echo "$result: $result_reason - $ingroup_choices\n";
api_log($link,$api_logging,$api_script,$user,$agent_user,$function,$value,$result,$result_reason,$source,$data);
}
else
{
$SUCCESS++;
$external_transferconf = "$value---$ingroup_choices---$phone_number---$consultative---";
}
}
}
### END In-group transfer or bridge ###
### START other transfers ###
if ( ($processed < 1) and (($value=='BLIND_TRANSFER') or ($value=='LEAVE_VM') or ($value=='DIAL_WITH_CUSTOMER') or ($value=='PARK_CUSTOMER_DIAL')) )
{
$processed++;
$external_transferconf = "$value------$phone_number---NO---$dial_override";
$SUCCESS++;
}
### START hangups ###
if ( ($processed < 1) and ( ($value=='HANGUP_XFER') or ($value=='HANGUP_BOTH') ) )
{
$processed++;
$external_transferconf = "$value---------NO---";
$SUCCESS++;
}
### START leave-3way-call ###
if ( ($processed < 1) and ($value=='LEAVE_3WAY_CALL') )
{
$processed++;
$external_transferconf = "$value---------NO---";
$SUCCESS++;
}
if ($processed < 1)
{
$result = 'ERROR';
$result_reason = "value is not valid";
echo "$result: $result_reason - $value|$user\n";
api_log($link,$api_logging,$api_script,$user,$agent_user,$function,$value,$result,$result_reason,$source,$data);
}
else
{
if ($SUCCESS > 0)
{
$stmt="UPDATE vicidial_live_agents set external_transferconf='$external_transferconf' where user='$agent_user';";
if ($format=='debug') {echo "\n<!-- $stmt -->";}
$rslt=mysql_query($stmt, $link);
$result = 'SUCCESS';
$result_reason = "transfer_conference function set";
echo "$result: $result_reason - $value|$ingroup_choices|$phone_number|$consultative|$agent_user\n";
api_log($link,$api_logging,$api_script,$user,$agent_user,$function,$value,$result,$result_reason,$source,$data);
}
}
}
else
{
$result = 'ERROR';
$result_reason = "agent_user does not have a live call";
echo "$result: $result_reason - $agent_user\n";
api_log($link,$api_logging,$api_script,$user,$agent_user,$function,$value,$result,$result_reason,$source,$data);
}
}
else
{
$result = 'ERROR';
$result_reason = "agent_user is not logged in";
echo "$result: $result_reason - $agent_user\n";
api_log($link,$api_logging,$api_script,$user,$agent_user,$function,$value,$result,$result_reason,$source,$data);
}
}
}
################################################################################
### END - transfer_conference
################################################################################
################################################################################
### BEGIN - optional "close window" link
################################################################################
+10 -6
View File
@@ -1,7 +1,7 @@
<?php
# conf_exten_check.php version 2.2.0
# conf_exten_check.php version 2.4
#
# Copyright (C) 2009 Matt Florell <vicidial@gmail.com> LICENSE: AGPLv2
# Copyright (C) 2010 Matt Florell <vicidial@gmail.com> LICENSE: AGPLv2
#
# This script is designed purely to send whether the meetme conference has live channels connected and which they are
# This script depends on the server_ip being sent and also needs to have a valid user/pass from the vicidial_users table
@@ -50,10 +50,11 @@
# 91130-2022 - Added code for manager override of in-group selection
# 91228-1341 - Added API fields update functions
# 100109-1337 - Fixed Manual dial live call detection
# 100527-0957 - Added send_dtmf, transfer_conference and park_call API functions
#
$version = '2.2.0-25';
$build = '100109-1337';
$version = '2.4-26';
$build = '100527-0957';
$mel=1; # Mysql Error Log enabled = 1
$mysql_log_count=32;
$one_mysql_log=0;
@@ -387,7 +388,7 @@ echo "<BODY BGCOLOR=white marginheight=0 marginwidth=0 leftmargin=0 topmargin=0>
}
### grab the API hangup and API dispo fields in vicidial_live_agents
$stmt="SELECT external_hangup,external_status,external_pause,external_dial,external_update_fields,external_update_fields_data,external_timer_action,external_timer_action_message,external_timer_action_seconds from vicidial_live_agents where user='$user' and server_ip='$server_ip';";
$stmt="SELECT external_hangup,external_status,external_pause,external_dial,external_update_fields,external_update_fields_data,external_timer_action,external_timer_action_message,external_timer_action_seconds,external_dtmf,external_transferconf,external_park from vicidial_live_agents where user='$user' and server_ip='$server_ip';";
if ($DB) {echo "|$stmt|\n";}
$rslt=mysql_query($stmt, $link);
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'03010',$user,$server_ip,$session_name,$one_mysql_log);}
@@ -401,6 +402,9 @@ echo "<BODY BGCOLOR=white marginheight=0 marginwidth=0 leftmargin=0 topmargin=0>
$timer_action = $row[6];
$timer_action_message = $row[7];
$timer_action_seconds = $row[8];
$external_dtmf = $row[9];
$external_transferconf = $row[10];
$external_park = $row[11];
if (strlen($external_status)<1) {$external_status = '::::::::::';}
@@ -570,7 +574,7 @@ echo "<BODY BGCOLOR=white marginheight=0 marginwidth=0 leftmargin=0 topmargin=0>
if ($Ashift_logout > 0)
{$Alogin='SHIFT_LOGOUT';}
echo 'DateTime: ' . $NOW_TIME . '|UnixTime: ' . $StarTtime . '|Logged-in: ' . $Alogin . '|CampCalls: ' . $RingCalls . '|Status: ' . $Astatus . '|DiaLCalls: ' . $DiaLCalls . '|APIHanguP: ' . $external_hangup . '|APIStatuS: ' . $external_status . '|APIPausE: ' . $external_pause . '|APIDiaL: ' . $external_dial . '|DEADcall: ' . $DEADcustomer . '|InGroupChange: ' . $InGroupChangeDetails . '|APIFields: ' . $external_update_fields . '|APIFieldsData: ' . $external_update_fields_data . '|APITimerAction: ' . $timer_action . '|APITimerMessage: ' . $timer_action_message . '|APITimerSeconds: ' . $timer_action_seconds . "\n";
echo 'DateTime: ' . $NOW_TIME . '|UnixTime: ' . $StarTtime . '|Logged-in: ' . $Alogin . '|CampCalls: ' . $RingCalls . '|Status: ' . $Astatus . '|DiaLCalls: ' . $DiaLCalls . '|APIHanguP: ' . $external_hangup . '|APIStatuS: ' . $external_status . '|APIPausE: ' . $external_pause . '|APIDiaL: ' . $external_dial . '|DEADcall: ' . $DEADcustomer . '|InGroupChange: ' . $InGroupChangeDetails . '|APIFields: ' . $external_update_fields . '|APIFieldsData: ' . $external_update_fields_data . '|APITimerAction: ' . $timer_action . '|APITimerMessage: ' . $timer_action_message . '|APITimerSeconds: ' . $timer_action_seconds . '|APIdtmf: ' . $external_dtmf . '|APItransferconf: ' . $external_transferconf . '|APIpark: ' . $external_park . "\n";
if (strlen($timer_action) > 3)
{
+29 -4
View File
@@ -1,5 +1,5 @@
<?php
# manager_send.php version 2.2.0
# manager_send.php version 2.4
#
# Copyright (C) 2010 Matt Florell <vicidial@gmail.com> LICENSE: AGPLv2
#
@@ -12,7 +12,7 @@
# - $user
# - $pass
# optional variables:
# - $ACTION - ('Originate','Redirect','Hangup','Command','Monitor','StopMonitor','SysCIDOriginate','RedirectName','RedirectNameVmail','MonitorConf','StopMonitorConf','RedirectXtra','RedirectXtraCX','RedirectVD','HangupConfDial','VolumeControl','OriginateVDRelogin')
# - $ACTION - ('Originate','Redirect','Hangup','Command','Monitor','StopMonitor','SysCIDOriginate','SysCIDdtmfOriginate','RedirectName','RedirectNameVmail','MonitorConf','StopMonitorConf','RedirectXtra','RedirectXtraCX','RedirectVD','HangupConfDial','VolumeControl','OriginateVDRelogin')
# - $queryCID - ('CN012345678901234567',...)
# - $format - ('text','debug')
# - $channel - ('Zap/41-1','SIP/test101-1jut','IAX2/iaxy@iaxy',...)
@@ -97,10 +97,11 @@
# 91213-1208 - Added queue_position to queue_log COMPLETE... records
# 100327-0846 - Fix for list_id override answering machine message
# 100423-2304 - Added alertCID
# 100527-1014 - Added SysCIDdtmfOriginate function
#
$version = '2.2.0-48';
$build = '100423-2304';
$version = '2.4-49';
$build = '100527-1014';
$mel=1; # Mysql Error Log enabled = 1
$mysql_log_count=85;
$one_mysql_log=0;
@@ -294,6 +295,20 @@ if ($format=='debug')
######################
# ACTION=SysCIDdtmfOriginate - prep the send dtmf command
######################
if ($ACTION=="SysCIDdtmfOriginate")
{
$stmt="UPDATE vicidial_live_agents SET external_dtmf='' where user='$user';";
if ($format=='debug') {echo "\n<!-- $stmt -->";}
$rslt=mysql_query($stmt, $link);
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'02XXX',$user,$server_ip,$session_name,$one_mysql_log);}
$ACTION="SysCIDOriginate";
}
######################
# ACTION=SysCIDOriginate - insert Originate Manager statement allowing small CIDs for system calls
@@ -771,6 +786,11 @@ if ($ACTION=="RedirectToPark")
# fwrite ($fp, "$NOW_TIME|MS_LOG_0|$queryCID|$stmt|\n");
# fclose($fp);
}
$stmt="UPDATE vicidial_live_agents SET external_park='' where user='$user';";
if ($format=='debug') {echo "\n<!-- $stmt -->";}
$rslt=mysql_query($stmt, $link);
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'02XXX',$user,$server_ip,$session_name,$one_mysql_log);}
}
if ($ACTION=="RedirectFromPark")
@@ -795,6 +815,11 @@ if ($ACTION=="RedirectFromPark")
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'02026',$user,$server_ip,$session_name,$one_mysql_log);}
$ACTION="Redirect";
}
$stmt="UPDATE vicidial_live_agents SET external_park='' where user='$user';";
if ($format=='debug') {echo "\n<!-- $stmt -->";}
$rslt=mysql_query($stmt, $link);
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'02XXX',$user,$server_ip,$session_name,$one_mysql_log);}
}
if ($ACTION=="RedirectName")
+16 -1
View File
@@ -5014,7 +5014,7 @@ if ($ACTION == 'updateDISPO')
}
### reset the API fields in vicidial_live_agents record
$stmt = "UPDATE vicidial_live_agents set lead_id=0,external_hangup=0,external_status='',external_update_fields='0',external_update_fields_data='',external_timer_action_seconds='-1',last_state_change='$NOW_TIME' where user='$user' and server_ip='$server_ip';";
$stmt = "UPDATE vicidial_live_agents set lead_id=0,external_hangup=0,external_status='',external_update_fields='0',external_update_fields_data='',external_timer_action_seconds='-1',external_dtmf='',external_transferconf='',external_park='',last_state_change='$NOW_TIME' where user='$user' and server_ip='$server_ip';";
if ($DB) {echo "$stmt\n";}
$rslt=mysql_query($stmt, $link);
if ($mel > 0) {$errno = mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'00141',$user,$server_ip,$session_name,$one_mysql_log);}
@@ -7391,6 +7391,21 @@ if ($ACTION == 'DiaLableLeaDsCounT')
}
################################################################################
### Clear_API_Field - clears a single vicidial_live_agents field
################################################################################
if ($ACTION == 'Clear_API_Field')
{
$stmt="UPDATE vicidial_live_agents SET $comments='' where user='$user';";
if ($format=='debug') {echo "\n<!-- $stmt -->";}
$rslt=mysql_query($stmt, $link);
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'00XXX',$user,$server_ip,$session_name,$one_mysql_log);}
echo "DONE: $comments";
}
if ($format=='debug')
+143 -9
View File
@@ -294,10 +294,11 @@
# 100428-0544 - Added uniqueid display option for PRESERVE
# 100513-0714 - Added options.php option to hide the timeclock link
# 100513-2337 - Changed user_login_first to attempt full login if phone_login/pass are filled in
# 100527-2212 - Added API send_dtmf, transfer_conference and park_call functions
#
$version = '2.4-272';
$build = '100513-2337';
$version = '2.4-273';
$build = '100527-2212';
$mel=1; # Mysql Error Log enabled = 1
$mysql_log_count=66;
$one_mysql_log=0;
@@ -2921,6 +2922,14 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
var uniqueid_status_display='';
var uniqueid_status_prefix='';
var custom_call_id='';
var api_dtmf='';
var api_transferconf_function='';
var api_transferconf_group='';
var api_transferconf_number='';
var api_transferconf_consultative='';
var api_transferconf_override='';
var api_parkcustomer='';
var API_selected_xfergroup='';
var DiaLControl_auto_HTML = "<IMG SRC=\"./images/vdc_LB_pause_OFF.gif\" border=0 alt=\" Pause \"><a href=\"#\" onclick=\"AutoDial_ReSume_PauSe('VDADready');\"><IMG SRC=\"./images/vdc_LB_resume.gif\" border=0 alt=\"Resume\"></a>";
var DiaLControl_auto_HTML_ready = "<a href=\"#\" onclick=\"AutoDial_ReSume_PauSe('VDADpause');\"><IMG SRC=\"./images/vdc_LB_pause.gif\" border=0 alt=\" Pause \"></a><IMG SRC=\"./images/vdc_LB_resume_OFF.gif\" border=0 alt=\"Resume\">";
var DiaLControl_auto_HTML_OFF = "<IMG SRC=\"./images/vdc_LB_pause_OFF.gif\" border=0 alt=\" Pause \"><IMG SRC=\"./images/vdc_LB_resume_OFF.gif\" border=0 alt=\"Resume\">";
@@ -3269,16 +3278,19 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
{
var Ctasknum = tasknum_string.replace(regCXFvars, '');
if (Ctasknum.length < 2)
{Ctasknum = '990009';}
{Ctasknum = '90009';}
var agentdirect = '';
}
else
{
Ctasknum = '990009';
Ctasknum = '90009';
var agentdirect = tasknum_string;
}
var XfeRSelecT = document.getElementById("XfeRGrouP");
tasknum = Ctasknum + "*" + XfeRSelecT.value + '*CXFER*' + document.vicidial_form.lead_id.value + '**' + dialed_number + '*' + user + '*' + agentdirect + '*' + VD_live_call_secondS + '*';
var XfeR_GrouP = XfeRSelecT.value;
if (API_selected_xfergroup.length > 1)
{var XfeR_GrouP = API_selected_xfergroup;}
tasknum = Ctasknum + "*" + XfeR_GrouP + '*CXFER*' + document.vicidial_form.lead_id.value + '**' + dialed_number + '*' + user + '*' + agentdirect + '*' + VD_live_call_secondS + '*';
CustomerData_update();
}
@@ -3441,7 +3453,7 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
if (xmlhttp)
{
var queryCID = dtmf_string;
VMCoriginate_query = "server_ip=" + server_ip + "&session_name=" + session_name + "&user=" + user + "&pass=" + pass + "&ACTION=SysCIDOriginate&format=text&channel=" + dtmf_send_extension + "&queryCID=" + queryCID + "&exten=" + dtmf_silent_prefix + '' + conf_dtmf_room + "&ext_context=" + ext_context + "&ext_priority=1";
VMCoriginate_query = "server_ip=" + server_ip + "&session_name=" + session_name + "&user=" + user + "&pass=" + pass + "&ACTION=SysCIDdtmfOriginate&format=text&channel=" + dtmf_send_extension + "&queryCID=" + queryCID + "&exten=" + dtmf_silent_prefix + '' + conf_dtmf_room + "&ext_context=" + ext_context + "&ext_priority=1";
xmlhttp.open('POST', 'manager_send.php');
xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
xmlhttp.send(VMCoriginate_query);
@@ -3600,6 +3612,80 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
api_timer_action_message = APITimerMessage_array[1];
var APITimerSeconds_array = check_time_array[19].split("APITimerSeconds: ");
api_timer_action_seconds = APITimerSeconds_array[1];
var APIdtmf_array = check_time_array[20].split("APIdtmf: ");
api_dtmf = APIdtmf_array[1];
var APItransfercond_array = check_time_array[21].split("APItransferconf: ");
var api_transferconf_values_array = APItransfercond_array[1].split("---");
api_transferconf_function = api_transferconf_values_array[0];
api_transferconf_group = api_transferconf_values_array[1];
api_transferconf_number = api_transferconf_values_array[2];
api_transferconf_consultative = api_transferconf_values_array[3];
api_transferconf_override = api_transferconf_values_array[4];
var APIpark_array = check_time_array[22].split("APIpark: ");
api_parkcustomer = APIpark_array[1];
if (api_transferconf_function.length > 0)
{
if (api_transferconf_function == 'HANGUP_XFER')
{xfercall_send_hangup();}
if (api_transferconf_function == 'HANGUP_BOTH')
{bothcall_send_hangup();}
if (api_transferconf_function == 'LEAVE_VM')
{mainxfer_send_redirect('XfeRVMAIL',lastcustchannel,lastcustserverip);}
if (api_transferconf_function == 'LEAVE_3WAY_CALL')
{leave_3way_call('FIRST');}
if (api_transferconf_function == 'BLIND_TRANSFER')
{
document.vicidial_form.xfernumber.value = api_transferconf_number;
mainxfer_send_redirect('XfeRBLIND',lastcustchannel,lastcustserverip);
}
if (api_transferconf_function == 'LOCAL_CLOSER')
{
API_selected_xfergroup = api_transferconf_group;
document.vicidial_form.xfernumber.value = api_transferconf_number;
mainxfer_send_redirect('XfeRLOCAL',lastcustchannel,lastcustserverip);
}
if (api_transferconf_function == 'DIAL_WITH_CUSTOMER')
{
if (api_transferconf_consultative=='YES')
{document.vicidial_form.consultativexfer.checked=true;}
if (api_transferconf_consultative=='NO')
{document.vicidial_form.consultativexfer.checked=false;}
if (api_transferconf_override=='YES')
{document.vicidial_form.xferoverride.checked=true;}
API_selected_xfergroup = api_transferconf_group;
document.vicidial_form.xfernumber.value = api_transferconf_number;
SendManualDial('YES');
}
if (api_transferconf_function == 'PARK_CUSTOMER_DIAL')
{
if (api_transferconf_consultative=='YES')
{document.vicidial_form.consultativexfer.checked=true;}
if (api_transferconf_consultative=='NO')
{document.vicidial_form.consultativexfer.checked=false;}
if (api_transferconf_override=='YES')
{document.vicidial_form.xferoverride.checked=true;}
API_selected_xfergroup = api_transferconf_group;
document.vicidial_form.xfernumber.value = api_transferconf_number;
xfer_park_dial();
}
Clear_API_Field('external_transferconf');
}
if (api_parkcustomer == 'PARK_CUSTOMER')
{mainxfer_send_redirect('ParK',lastcustchannel,lastcustserverip);}
if (api_parkcustomer == 'GRAB_CUSTOMER')
{mainxfer_send_redirect('FROMParK',lastcustchannel,lastcustserverip);}
if (api_dtmf.length > 0)
{
var REGdtmfPOUND = new RegExp("P","g");
var REGdtmfSTAR = new RegExp("S","g");
var REGdtmfQUIET = new RegExp("Q","g");
api_dtmf = api_dtmf.replace(REGdtmfPOUND, '#');
api_dtmf = api_dtmf.replace(REGdtmfSTAR, '*');
api_dtmf = api_dtmf.replace(REGdtmfQUIET, ',');
document.vicidial_form.conf_dtmf.value = api_dtmf;
SendConfDTMF(session_id);
}
if (api_timer_action.length > 2)
{
@@ -3607,7 +3693,6 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
timer_action_message = api_timer_action_message;
timer_action_seconds = api_timer_action_seconds;
}
if ( (APIHanguP==1) && (VD_live_customer_call==1) )
{
hideDiv('CustomerGoneBox');
@@ -4112,9 +4197,13 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
CustomerData_update();
var XfeRSelecT = document.getElementById("XfeRGrouP");
var XfeR_GrouP = XfeRSelecT.value;
if (API_selected_xfergroup.length > 1)
{var XfeR_GrouP = API_selected_xfergroup;}
var queryCID = "XLvdcW" + epoch_sec + user_abb;
// "90009*$group**$lead_id**$phone_number*$user*$agent_only*";
var redirectdestination = closerxferinternal + '90009*' + XfeRSelecT.value + '**' + document.vicidial_form.lead_id.value + '**' + dialed_number + '*' + user + '*' + document.vicidial_form.xfernumber.value + '*';
var redirectdestination = closerxferinternal + '90009*' + XfeR_GrouP + '**' + document.vicidial_form.lead_id.value + '**' + dialed_number + '*' + user + '*' + document.vicidial_form.xfernumber.value + '*';
xferredirect_query = "server_ip=" + server_ip + "&session_name=" + session_name + "&user=" + user + "&pass=" + pass + "&ACTION=RedirectVD&format=text&channel=" + redirectvalue + "&call_server_ip=" + redirectserverip + "&queryCID=" + queryCID + "&exten=" + redirectdestination + "&ext_context=" + ext_context + "&ext_priority=1&auto_dial_level=" + auto_dial_level + "&campaign=" + campaign + "&uniqueid=" + document.vicidial_form.uniqueid.value + "&lead_id=" + document.vicidial_form.lead_id.value + "&secondS=" + VD_live_call_secondS + "&session_id=" + session_id;
}
@@ -4145,6 +4234,9 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
var redirectXTRAvalue = XDchannel;
var redirecttype_test = document.vicidial_form.xfernumber.value;
var XfeRSelecT = document.getElementById("XfeRGrouP");
var XfeR_GrouP = XfeRSelecT.value;
if (API_selected_xfergroup.length > 1)
{var XfeR_GrouP = API_selected_xfergroup;}
var regRXFvars = new RegExp("CXFER","g");
if ( ( (redirecttype_test.match(regRXFvars)) || (consultativexfer_checked > 0) ) && (local_consult_xfers > 0) )
{var redirecttype = 'RedirectXtraCXNeW';}
@@ -4156,7 +4248,7 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
DispO3wayCalLxfernumber = document.vicidial_form.xfernumber.value;
DispO3wayCalLcamptail = '';
xferredirect_query = "server_ip=" + server_ip + "&session_name=" + session_name + "&user=" + user + "&pass=" + pass + "&ACTION=" + redirecttype + "&format=text&channel=" + redirectvalue + "&call_server_ip=" + redirectserverip + "&queryCID=" + queryCID + "&exten=" + redirectdestination + "&ext_context=" + ext_context + "&ext_priority=1&extrachannel=" + redirectXTRAvalue + "&lead_id=" + document.vicidial_form.lead_id.value + "&phone_code=" + document.vicidial_form.phone_code.value + "&phone_number=" + document.vicidial_form.phone_number.value + "&filename=" + taskdebugnote + "&campaign=" + XfeRSelecT.value + "&session_id=" + session_id + "&agentchannel=" + agentchannel + "&protocol=" + protocol + "&extension=" + extension + "&auto_dial_level=" + auto_dial_level;
xferredirect_query = "server_ip=" + server_ip + "&session_name=" + session_name + "&user=" + user + "&pass=" + pass + "&ACTION=" + redirecttype + "&format=text&channel=" + redirectvalue + "&call_server_ip=" + redirectserverip + "&queryCID=" + queryCID + "&exten=" + redirectdestination + "&ext_context=" + ext_context + "&ext_priority=1&extrachannel=" + redirectXTRAvalue + "&lead_id=" + document.vicidial_form.lead_id.value + "&phone_code=" + document.vicidial_form.phone_code.value + "&phone_number=" + document.vicidial_form.phone_number.value + "&filename=" + taskdebugnote + "&campaign=" + XfeR_GrouP + "&session_id=" + session_id + "&agentchannel=" + agentchannel + "&protocol=" + protocol + "&extension=" + extension + "&auto_dial_level=" + auto_dial_level;
if (taskdebugnote == 'FIRST')
{
@@ -8334,6 +8426,7 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
uniqueid_status_display='';
uniqueid_status_prefix='';
custom_call_id='';
API_selected_xfergroup='';
if (manual_dial_in_progress==1)
{
@@ -8914,6 +9007,47 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
}
// ################################################################################
// clear api field
function Clear_API_Field(temp_field)
{
var xmlhttp=false;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
// JScript gives us Conditional compilation, we can cope with old IE versions.
// and security blocked creation of the objects.
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
@end @*/
if (!xmlhttp && typeof XMLHttpRequest!='undefined')
{
xmlhttp = new XMLHttpRequest();
}
if (xmlhttp)
{
TERRupdate_query = "server_ip=" + server_ip + "&session_name=" + session_name + "&ACTION=Clear_API_Field&format=text&user=" + user + "&pass=" + pass + "&comments=" + temp_field;
xmlhttp.open('POST', 'vdc_db_query.php');
xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
xmlhttp.send(TERRupdate_query);
xmlhttp.onreadystatechange = function()
{
if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
{
// alert(xmlhttp.responseText);
}
}
delete xmlhttp;
}
}
// ################################################################################
// Log the user out of the system when they close their browser while logged in
function BrowserCloseLogout()