Added chat dead detection in agent screen, real-time report and API

Added chat/email live images for agent screen

git-svn-id: svn://192.168.202.10@2455 3d104415-ff17-0410-8863-d5cf3c621b8a
This commit is contained in:
mattf
2016-01-04 19:11:44 +00:00
parent 138ed007c2
commit 2ad67cd044
10 changed files with 303 additions and 111 deletions
@@ -3206,7 +3206,8 @@ poster VARCHAR(100) COLLATE utf8_unicode_ci DEFAULT NULL,
chat_member_name VARCHAR(100) COLLATE utf8_unicode_ci DEFAULT NULL,
chat_level ENUM('0','1') COLLATE utf8_unicode_ci DEFAULT '0',
PRIMARY KEY (message_row_id),
KEY vicidial_chat_log_user_key (poster)
KEY vicidial_chat_log_user_key (poster),
KEY vicidial_chat_log_chat_id (chat_id)
) ENGINE=MyISAM CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE vicidial_chat_log_archive (
@@ -3688,4 +3689,4 @@ UPDATE vicidial_configuration set value='1766' where name='qc_database_version';
UPDATE system_settings set vdc_agent_api_active='1';
UPDATE system_settings SET db_schema_version='1446',db_schema_update_date=NOW(),reload_timestamp=NOW();
UPDATE system_settings SET db_schema_version='1447',db_schema_update_date=NOW(),reload_timestamp=NOW();
+4
View File
@@ -465,3 +465,7 @@ index(processed)
) ENGINE=MyISAM CHARSET=utf8 COLLATE=utf8_unicode_ci;
UPDATE system_settings SET db_schema_version='1446',db_schema_update_date=NOW() where db_schema_version < 1446;
CREATE INDEX live_chat_id on vicidial_chat_log (chat_id);
UPDATE system_settings SET db_schema_version='1447',db_schema_update_date=NOW() where db_schema_version < 1447;
+109 -76
View File
@@ -1,7 +1,7 @@
<?php
# conf_exten_check.php version 2.12
#
# Copyright (C) 2015 Matt Florell <vicidial@gmail.com> LICENSE: AGPLv2
# Copyright (C) 2016 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
@@ -69,13 +69,14 @@
# 141228-0053 - Found missing phrase for QXZ
# 150723-1708 - Added ajax logging and agent screen click logging
# 150904-2138 - Added SQL features for chats started via agent invite, modified output
# 160104-1232 - Added proper detection of dead chats, disabled dead detection of emails
#
$version = '2.12-44';
$build = '150904-2138';
$version = '2.12-45';
$build = '160104-1232';
$php_script = 'conf_exten_check.php';
$mel=1; # Mysql Error Log enabled = 1
$mysql_log_count=43;
$mysql_log_count=44;
$one_mysql_log=0;
$DB=0;
$SSagent_debug_logging=0;
@@ -115,6 +116,10 @@ if (isset($_GET["bcrypt"])) {$bcrypt=$_GET["bcrypt"];}
elseif (isset($_POST["bcrypt"])) {$bcrypt=$_POST["bcrypt"];}
if (isset($_GET["clicks"])) {$clicks=$_GET["clicks"];}
elseif (isset($_POST["clicks"])) {$clicks=$_POST["clicks"];}
if (isset($_GET["customer_chat_id"])) {$customer_chat_id=$_GET["customer_chat_id"];}
elseif (isset($_POST["customer_chat_id"])) {$customer_chat_id=$_POST["customer_chat_id"];}
if (isset($_GET["live_call_seconds"])) {$live_call_seconds=$_GET["live_call_seconds"];}
elseif (isset($_POST["live_call_seconds"])) {$live_call_seconds=$_POST["live_call_seconds"];}
if ($bcrypt == 'OFF')
{$bcrypt=0;}
@@ -279,7 +284,7 @@ if ($ACTION == 'refresh')
if ($Acount > 0)
{
$stmt="SELECT status,callerid,agent_log_id,campaign_id,lead_id from vicidial_live_agents where user='$user' and server_ip='$server_ip';";
$stmt="SELECT status,callerid,agent_log_id,campaign_id,lead_id,comments from vicidial_live_agents where user='$user' and server_ip='$server_ip';";
if ($DB) {echo "|$stmt|\n";}
$rslt=mysql_to_mysqli($stmt, $link);
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'03004',$user,$server_ip,$session_name,$one_mysql_log);}
@@ -289,6 +294,7 @@ if ($ACTION == 'refresh')
$Aagent_log_id = $row[2];
$Acampaign_id = $row[3];
$Alead_id = $row[4];
$Acomments = $row[5];
$api_manual_dial='STANDARD';
$stmt = "SELECT api_manual_dial FROM vicidial_campaigns where campaign_id='$Acampaign_id';";
@@ -367,7 +373,7 @@ if ($ACTION == 'refresh')
$stmt="SELECT status,campaign_id,closer_campaigns,comments from vicidial_live_agents where user='$user' and server_ip='$server_ip';";
if ($DB) {echo "|$stmt|\n";}
$rslt=mysql_to_mysqli($stmt, $link);
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'03043',$user,$server_ip,$session_name,$one_mysql_log);}
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'03043',$user,$server_ip,$session_name,$one_mysql_log);}
$row=mysqli_fetch_row($rslt);
$Alogin=$row[0];
$Acampaign=$row[1];
@@ -440,48 +446,71 @@ if ($ACTION == 'refresh')
$retry_count++;
}
##### BEGIN DEAD logging section #####
### find whether the call the agent is on is hung up
$stmt="SELECT count(*) from vicidial_auto_calls where callerid='$Acallerid';";
if ($DB) {echo "|$stmt|\n";}
$rslt=mysql_to_mysqli($stmt, $link);
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'03018',$user,$server_ip,$session_name,$one_mysql_log);}
$row=mysqli_fetch_row($rslt);
$AcalleridCOUNT=$row[0];
if ( ($AcalleridCOUNT > 0) and (preg_match("/INCALL/i",$Astatus)) and (preg_match("/^M/",$Acallerid)) )
if ( ( ($Acomments != 'CHAT') and ($Acomments != 'EMAIL') ) or ($live_call_seconds > 4) )
{
$updateNOW_TIME = date("Y-m-d H:i:s");
$stmt="UPDATE vicidial_auto_calls set last_update_time='$updateNOW_TIME' where callerid='$Acallerid';";
if ($format=='debug') {echo "\n<!-- $stmt -->";}
$rslt=mysql_to_mysqli($stmt, $link);
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'03038',$user,$server_ip,$session_name,$one_mysql_log);}
}
if ( ($AcalleridCOUNT < 1) and (preg_match("/INCALL/i",$Astatus)) and (strlen($Aagent_log_id) > 0) )
{
$DEADcustomer++;
### find whether the agent log record has already logged DEAD
$stmt="SELECT count(*) from vicidial_agent_log where agent_log_id='$Aagent_log_id' and ( (dead_epoch IS NOT NULL) or (dead_epoch > 10000) );";
if ($DB) {echo "|$stmt|\n";}
$rslt=mysql_to_mysqli($stmt, $link);
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'03019',$user,$server_ip,$session_name,$one_mysql_log);}
$row=mysqli_fetch_row($rslt);
$Aagent_log_idCOUNT=$row[0];
if ($Aagent_log_idCOUNT < 1)
##### BEGIN DEAD logging section #####
if ( ( (strlen($customer_chat_id > 0) ) and ($customer_chat_id > 0) ) or ($Acomments == 'EMAIL') )
{
$NEWdead_epoch = date("U");
$deadNOW_TIME = date("Y-m-d H:i:s");
$stmt="UPDATE vicidial_agent_log set dead_epoch='$NEWdead_epoch' where agent_log_id='$Aagent_log_id';";
if ($Acomments == 'EMAIL')
{$AcalleridCOUNT=1;}
else
{
### find whether the call the agent is on is hung up
$stmt="SELECT count(*) from vicidial_chat_log where chat_id='$customer_chat_id' and message LIKE \"%has left chat\";";
if ($DB) {echo "|$stmt|\n";}
$rslt=mysql_to_mysqli($stmt, $link);
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'03044',$user,$server_ip,$session_name,$one_mysql_log);}
$row=mysqli_fetch_row($rslt);
$AchatendCOUNT=$row[0];
$AcalleridCOUNT=1;
if ($AchatendCOUNT > 0)
{$AcalleridCOUNT=0;}
}
}
else
{
### find whether the call the agent is on is hung up
$stmt="SELECT count(*) from vicidial_auto_calls where callerid='$Acallerid';";
if ($DB) {echo "|$stmt|\n";}
$rslt=mysql_to_mysqli($stmt, $link);
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'03018',$user,$server_ip,$session_name,$one_mysql_log);}
$row=mysqli_fetch_row($rslt);
$AcalleridCOUNT=$row[0];
}
if ( ($AcalleridCOUNT > 0) and (preg_match("/INCALL/i",$Astatus)) and (preg_match("/^M/",$Acallerid)) )
{
$updateNOW_TIME = date("Y-m-d H:i:s");
$stmt="UPDATE vicidial_auto_calls set last_update_time='$updateNOW_TIME' where callerid='$Acallerid';";
if ($format=='debug') {echo "\n<!-- $stmt -->";}
$rslt=mysql_to_mysqli($stmt, $link);
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'03020',$user,$server_ip,$session_name,$one_mysql_log);}
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'03038',$user,$server_ip,$session_name,$one_mysql_log);}
}
$stmt="UPDATE vicidial_live_agents set last_state_change='$deadNOW_TIME' where agent_log_id='$Aagent_log_id';";
if ($format=='debug') {echo "\n<!-- $stmt -->";}
if ( ($AcalleridCOUNT < 1) and (preg_match("/INCALL/i",$Astatus)) and (strlen($Aagent_log_id) > 0) )
{
$DEADcustomer++;
### find whether the agent log record has already logged DEAD
$stmt="SELECT count(*) from vicidial_agent_log where agent_log_id='$Aagent_log_id' and ( (dead_epoch IS NOT NULL) or (dead_epoch > 10000) );";
if ($DB) {echo "|$stmt|\n";}
$rslt=mysql_to_mysqli($stmt, $link);
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'03021',$user,$server_ip,$session_name,$one_mysql_log);}
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'03019',$user,$server_ip,$session_name,$one_mysql_log);}
$row=mysqli_fetch_row($rslt);
$Aagent_log_idCOUNT=$row[0];
if ($Aagent_log_idCOUNT < 1)
{
$NEWdead_epoch = date("U");
$deadNOW_TIME = date("Y-m-d H:i:s");
$stmt="UPDATE vicidial_agent_log set dead_epoch='$NEWdead_epoch' where agent_log_id='$Aagent_log_id';";
if ($format=='debug') {echo "\n<!-- $stmt -->";}
$rslt=mysql_to_mysqli($stmt, $link);
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'03020',$user,$server_ip,$session_name,$one_mysql_log);}
$stmt="UPDATE vicidial_live_agents set last_state_change='$deadNOW_TIME' where agent_log_id='$Aagent_log_id';";
if ($format=='debug') {echo "\n<!-- $stmt -->";}
$rslt=mysql_to_mysqli($stmt, $link);
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'03021',$user,$server_ip,$session_name,$one_mysql_log);}
}
}
}
##### END DEAD logging section #####
@@ -502,48 +531,52 @@ if ($ACTION == 'refresh')
$one_mysql_log=0;
$retry_count++;
}
##### BEGIN DEAD logging section #####
### find whether the call the agent is on is hung up
$stmt="SELECT count(*) from vicidial_auto_calls where callerid='$Acallerid';";
if ($DB) {echo "|$stmt|\n";}
$rslt=mysql_to_mysqli($stmt, $link);
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'03029',$user,$server_ip,$session_name,$one_mysql_log);}
$row=mysqli_fetch_row($rslt);
$AcalleridCOUNT=$row[0];
if ( ($AcalleridCOUNT > 0) and (preg_match("/INCALL/i",$Astatus)) )
if ($Acomments != 'EMAIL')
{
$updateNOW_TIME = date("Y-m-d H:i:s");
$stmt="UPDATE vicidial_auto_calls set last_update_time='$updateNOW_TIME' where callerid='$Acallerid';";
if ($format=='debug') {echo "\n<!-- $stmt -->";}
$rslt=mysql_to_mysqli($stmt, $link);
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'03037',$user,$server_ip,$session_name,$one_mysql_log);}
}
if ( ($AcalleridCOUNT < 1) and (preg_match("/INCALL/i",$Astatus)) and (strlen($Aagent_log_id) > 0) )
{
$DEADcustomer++;
### find whether the agent log record has already logged DEAD
$stmt="SELECT count(*) from vicidial_agent_log where agent_log_id='$Aagent_log_id' and ( (dead_epoch IS NOT NULL) or (dead_epoch > 10000) );";
### find whether the call the agent is on is hung up
$stmt="SELECT count(*) from vicidial_auto_calls where callerid='$Acallerid';";
if ($DB) {echo "|$stmt|\n";}
$rslt=mysql_to_mysqli($stmt, $link);
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'03030',$user,$server_ip,$session_name,$one_mysql_log);}
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'03029',$user,$server_ip,$session_name,$one_mysql_log);}
$row=mysqli_fetch_row($rslt);
$Aagent_log_idCOUNT=$row[0];
if ($Aagent_log_idCOUNT < 1)
{
$NEWdead_epoch = date("U");
$deadNOW_TIME = date("Y-m-d H:i:s");
$stmt="UPDATE vicidial_agent_log set dead_epoch='$NEWdead_epoch' where agent_log_id='$Aagent_log_id';";
if ($format=='debug') {echo "\n<!-- $stmt -->";}
$rslt=mysql_to_mysqli($stmt, $link);
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'03031',$user,$server_ip,$session_name,$one_mysql_log);}
$AcalleridCOUNT=$row[0];
$stmt="UPDATE vicidial_live_agents set last_state_change='$deadNOW_TIME' where agent_log_id='$Aagent_log_id';";
if ( ($AcalleridCOUNT > 0) and (preg_match("/INCALL/i",$Astatus)) )
{
$updateNOW_TIME = date("Y-m-d H:i:s");
$stmt="UPDATE vicidial_auto_calls set last_update_time='$updateNOW_TIME' where callerid='$Acallerid';";
if ($format=='debug') {echo "\n<!-- $stmt -->";}
$rslt=mysql_to_mysqli($stmt, $link);
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'03032',$user,$server_ip,$session_name,$one_mysql_log);}
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'03037',$user,$server_ip,$session_name,$one_mysql_log);}
}
if ( ($AcalleridCOUNT < 1) and (preg_match("/INCALL/i",$Astatus)) and (strlen($Aagent_log_id) > 0) )
{
$DEADcustomer++;
### find whether the agent log record has already logged DEAD
$stmt="SELECT count(*) from vicidial_agent_log where agent_log_id='$Aagent_log_id' and ( (dead_epoch IS NOT NULL) or (dead_epoch > 10000) );";
if ($DB) {echo "|$stmt|\n";}
$rslt=mysql_to_mysqli($stmt, $link);
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'03030',$user,$server_ip,$session_name,$one_mysql_log);}
$row=mysqli_fetch_row($rslt);
$Aagent_log_idCOUNT=$row[0];
if ($Aagent_log_idCOUNT < 1)
{
$NEWdead_epoch = date("U");
$deadNOW_TIME = date("Y-m-d H:i:s");
$stmt="UPDATE vicidial_agent_log set dead_epoch='$NEWdead_epoch' where agent_log_id='$Aagent_log_id';";
if ($format=='debug') {echo "\n<!-- $stmt -->";}
$rslt=mysql_to_mysqli($stmt, $link);
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'03031',$user,$server_ip,$session_name,$one_mysql_log);}
$stmt="UPDATE vicidial_live_agents set last_state_change='$deadNOW_TIME' where agent_log_id='$Aagent_log_id';";
if ($format=='debug') {echo "\n<!-- $stmt -->";}
$rslt=mysql_to_mysqli($stmt, $link);
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'03032',$user,$server_ip,$session_name,$one_mysql_log);}
}
}
}
##### END DEAD logging section #####
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

+29 -6
View File
@@ -514,10 +514,11 @@
# 151229-2331 - Added campaign setting for manual_dial_timeout, Issue #903
# 151230-0911 - Fixed transfer of parked call logging issue #901
# 160101-1131 - Added code to handle routing initiated recordings
# 160104-1237 - Added images for live chat and email, and dead chat
#
$version = '2.12-483c';
$build = '160101-1131';
$version = '2.12-484c';
$build = '160104-1237';
$mel=1; # Mysql Error Log enabled = 1
$mysql_log_count=85;
$one_mysql_log=0;
@@ -4360,6 +4361,12 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
image_livecall_ON.src="./images/<?php echo _QXZ("agc_live_call_ON.gif") ?>";
var image_livecall_DEAD = new Image();
image_livecall_DEAD.src="./images/<?php echo _QXZ("agc_live_call_DEAD.gif") ?>";
var image_livechat_ON = new Image();
image_livechat_ON.src="./images/<?php echo _QXZ("agc_live_chat_ON.gif") ?>";
var image_livechat_DEAD = new Image();
image_livechat_DEAD.src="./images/<?php echo _QXZ("agc_live_chat_DEAD.gif") ?>";
var image_liveemail_ON = new Image();
image_liveemail_ON.src="./images/<?php echo _QXZ("agc_live_email_ON.gif") ?>";
var image_LB_dialnextnumber = new Image();
image_LB_dialnextnumber.src="./images/<?php echo _QXZ("vdc_LB_dialnextnumber.gif") ?>";
var image_LB_hangupcustomer = new Image();
@@ -5154,7 +5161,7 @@ function set_length(SLnumber,SLlength_goal,SLdirection)
}
if (xmlhttprequestcheckconf)
{
checkconf_query = "server_ip=" + server_ip + "&session_name=" + session_name + "&user=" + user + "&pass=" + pass + "&client=vdc&conf_exten=" + taskconfnum + "&auto_dial_level=" + auto_dial_level + "&campagentstdisp=" + campagentstdisp + "&clicks=" + button_click_log;
checkconf_query = "server_ip=" + server_ip + "&session_name=" + session_name + "&user=" + user + "&pass=" + pass + "&client=vdc&conf_exten=" + taskconfnum + "&auto_dial_level=" + auto_dial_level + "&campagentstdisp=" + campagentstdisp + "&customer_chat_id=" + document.vicidial_form.customer_chat_id.value + "&live_call_seconds=" + VD_live_call_secondS +"&clicks=" + button_click_log;
button_click_log='';
xmlhttprequestcheckconf.open('POST', 'conf_exten_check.php');
xmlhttprequestcheckconf.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
@@ -5270,7 +5277,7 @@ function set_length(SLnumber,SLlength_goal,SLdirection)
var APIManualDialQueue_array = check_time_array[24].split("APIManualDialQueue: ");
APIManualDialQueue = APIManualDialQueue_array[1];
var CheckDEADcall_array = check_time_array[10].split("DEADcall: ");
var CheckDEADcall = CheckDEADcall_array[1];
CheckDEADcall = CheckDEADcall_array[1];
var InGroupChange_array = check_time_array[11].split("InGroupChange: ");
var InGroupChange = InGroupChange_array[1];
var InGroupChangeBlend = check_time_array[12];
@@ -5591,7 +5598,7 @@ function set_length(SLnumber,SLlength_goal,SLdirection)
}
}
if ( (CheckDEADcall > 0) && (VD_live_customer_call==1) )
if ( (CheckDEADcall > 0) && (VD_live_customer_call==1) && (currently_in_email_or_chat < 1) )
{
if (CheckDEADcallON < 1)
{
@@ -5612,6 +5619,17 @@ function set_length(SLnumber,SLlength_goal,SLdirection)
}
}
}
if ( (CheckDEADcall > 0) && (VD_live_customer_call==1) && (VD_live_call_secondS > 5) && ((CalL_AutO_LauncH == 'CHAT')) && (currently_in_email_or_chat > 0) )
{
if (CheckDEADcallON < 1)
{
if( document.images )
{ document.images['livecall'].src = image_livechat_DEAD.src;}
CheckDEADcallON=1;
CheckDEADcallCOUNT++;
customer_sec = VD_live_call_secondS;
}
}
if (InGroupChange > 0)
{
var external_blended = InGroupChangeBlend;
@@ -10403,10 +10421,12 @@ function set_length(SLnumber,SLlength_goal,SLdirection)
VDIC_web_form_address_two = VICIDiaL_web_form_address_two;
VDIC_web_form_address_three = VICIDiaL_web_form_address_three;
CalL_AutO_LauncH = VDIC_data_VDAC[3];
if( document.images ) { document.images['livecall'].src = image_livecall_ON.src;}
if (CalL_AutO_LauncH=='EMAIL')
{
document.vicidial_form.email_row_id.value= VDIC_data_VDAC[4];
document.getElementById("EmailAudioAlertFile").play();
if( document.images ) { document.images['livecall'].src = image_liveemail_ON.src;}
}
else if (CalL_AutO_LauncH=='CHAT')
{
@@ -10415,6 +10435,8 @@ function set_length(SLnumber,SLlength_goal,SLdirection)
document.images['CustomerChatImg'].src=image_customer_chat_ON.src;
document.getElementById("ChatAudioAlertFile").play();
document.vicidial_form.chat_id.value= VDIC_data_VDAC[4];
document.vicidial_form.customer_chat_id.value= VDIC_data_VDAC[4];
if( document.images ) { document.images['livecall'].src = image_livechat_ON.src;}
}
}
var VDIC_fronter='';
@@ -10514,7 +10536,6 @@ function set_length(SLnumber,SLlength_goal,SLdirection)
lastcustchannel = VDIC_data_VDAC[3];
document.vicidial_form.callserverip.value = VDIC_data_VDAC[4];
lastcustserverip = VDIC_data_VDAC[4];
if( document.images ) { document.images['livecall'].src = image_livecall_ON.src;}
document.vicidial_form.SecondS.value = 0;
document.getElementById("SecondSDISP").innerHTML = '0';
@@ -12399,6 +12420,7 @@ function set_length(SLnumber,SLlength_goal,SLdirection)
document.vicidial_form.call_notes_dispo.value ='';
document.vicidial_form.email_row_id.value ='';
document.vicidial_form.chat_id.value ='';
document.vicidial_form.customer_chat_id.value ='';
document.vicidial_form.dispo_comments.value ='';
document.vicidial_form.cbcomment_comments.value ='';
VDCL_group_id = '';
@@ -17250,6 +17272,7 @@ $zi=2;
<input type="hidden" name="SecondS" id="SecondS" value="" />
<input type="hidden" name="email_row_id" id="email_row_id" value="" />
<input type="hidden" name="chat_id" id="chat_id" value="" />
<input type="hidden" name="customer_chat_id" id="customer_chat_id" value="" />
<span class="text_input" id="MainPanelCustInfo">
<table><tr>
<td align="right"></td>
@@ -1,7 +1,7 @@
<?php
# AST_timeonVDADall.php
#
# Copyright (C) 2015 Matt Florell <vicidial@gmail.com> LICENSE: AGPLv2
# Copyright (C) 2016 Matt Florell <vicidial@gmail.com> LICENSE: AGPLv2
#
# live real-time stats for the VICIDIAL Auto-Dialer all servers
#
@@ -95,10 +95,11 @@
# 150804-0956 - Added WHISPER option agent monitoring
# 150919-0238 - Added display for chats in queue
# 150925-2223 - Added User option to hide users from real-time report
# 160104-1059 - Added detection of dead chat sessions
#
$version = '2.12-83';
$build = '150925-2223';
$version = '2.12-84';
$build = '160104-1059';
header ("Content-type: text/html; charset=utf-8");
@@ -2683,6 +2684,7 @@ $talking_to_print = mysqli_num_rows($rslt);
if (preg_match("/INCALL/i",$Lstatus))
{
$stmtP="SELECT count(*) from parked_channels where channel_group='$Acallerid[$i]';";
if ($DB) {echo "$stmtP\n";}
$rsltP=mysql_to_mysqli($stmtP,$link);
$rowP=mysqli_fetch_row($rsltP);
$parked_channel = $rowP[0];
@@ -2703,6 +2705,33 @@ $talking_to_print = mysqli_num_rows($rslt);
$Lstatus = 'DEAD';
$status = ' DEAD ';
}
if (preg_match("/CHAT/i",$comments))
{
$stmtCT="SELECT chat_id from vicidial_live_chats where chat_creator='$Auser[$i]' and lead_id='$Alead_id[$i]' order by chat_start_time desc limit 1;";
if ($DB) {echo "$stmtCT\n";}
$rsltCT=mysql_to_mysqli($stmtCT,$link);
$chatting_to_print = mysqli_num_rows($rslt);
if ($chatting_to_print > 0)
{
$rowCT=mysqli_fetch_row($rsltCT);
$Achat_id = $rowCT[0];
$stmtCL="SELECT count(*) from vicidial_chat_log where chat_id='$Achat_id' and message LIKE \"%has left chat\";";
if ($DB) {echo "$stmtCL\n";}
$rsltCL=mysql_to_mysqli($stmtCL,$link);
$rowCL=mysqli_fetch_row($rsltCL);
$left_chat = $rowCL[0];
if ($left_chat > 0)
{
$Acall_time[$i]=$Astate_change[$i];
$Astatus[$i] = 'DEAD';
$Lstatus = 'DEAD';
$status = 'DEAD C';
}
}
}
}
if ( (preg_match("/AUTO/i",$comments)) or (strlen($comments)<1) )
+106 -19
View File
@@ -1,7 +1,7 @@
<?php
# non_agent_api.php
#
# Copyright (C) 2015 Matt Florell <vicidial@gmail.com> LICENSE: AGPLv2
# Copyright (C) 2016 Matt Florell <vicidial@gmail.com> LICENSE: AGPLv2
#
# This script is designed as an API(Application Programming Interface) to allow
# other programs to interact with all non-agent-screen VICIDIAL functions
@@ -104,10 +104,11 @@
# 150804-0948 - Added WHISPER option for blind_monitor function
# 150808-1438 - Added compatibility for custom fields data option
# 151226-0954 - Added session_id(conf_exten) field to output of agent_status, and added logged_in_agents function
# 160104-1229 - Added detection of dead chats to a few functions
#
$version = '2.12-80';
$build = '151226-0954';
$version = '2.12-81';
$build = '160104-1229';
$api_url_log = 0;
$startMS = microtime();
@@ -4984,8 +4985,36 @@ if ($function == 'user_group_status')
{$row[1] = 'PARK';}
else
{
if (!preg_match("/$row[5]\|/",$callerids))
{$row[1] = 'DEAD';}
if (preg_match("/CHAT/i",$row[4]))
{
$stmtCT="SELECT chat_id from vicidial_live_chats where chat_creator='$row[0]' and lead_id='$row[6]' order by chat_start_time desc limit 1;";
if ($DB) {echo "$stmtCT\n";}
$rsltCT=mysql_to_mysqli($stmtCT,$link);
$chatting_to_print = mysqli_num_rows($rslt);
if ($chatting_to_print > 0)
{
$rowCT=mysqli_fetch_row($rsltCT);
$Achat_id = $rowCT[0];
$stmtCL="SELECT count(*) from vicidial_chat_log where chat_id='$Achat_id' and message LIKE \"%has left chat\";";
if ($DB) {echo "$stmtCL\n";}
$rsltCL=mysql_to_mysqli($stmtCL,$link);
$rowCL=mysqli_fetch_row($rsltCL);
$left_chat = $rowCL[0];
if ($left_chat > 0)
{
$row[1] = 'DEAD';
}
}
}
elseif (preg_match("/EMAIL/i",$row[4]))
{$do_nothing=1;}
else
{
if (!preg_match("/$row[5]\|/",$callerids))
{$row[1] = 'DEAD';}
}
}
}
@@ -5347,7 +5376,7 @@ if ($function == 'agent_status')
$user_group = $row[1];
$user_level = $row[2];
$stmt="SELECT status,callerid,lead_id,campaign_id,calls_today,agent_log_id,on_hook_agent,ring_callerid,preview_lead_id,conf_exten from vicidial_live_agents $agent_search_SQL;";
$stmt="SELECT status,callerid,lead_id,campaign_id,calls_today,agent_log_id,on_hook_agent,ring_callerid,preview_lead_id,conf_exten,comments from vicidial_live_agents $agent_search_SQL;";
$rslt=mysql_to_mysqli($stmt, $link);
if ($DB) {echo "$stmt\n";}
$agent_to_list = mysqli_num_rows($rslt);
@@ -5364,6 +5393,7 @@ if ($function == 'agent_status')
$ring_callerid = $row[7];
$preview_lead_id = $row[8];
$conf_exten = $row[9];
$comments = $row[10];
$pause_code = '';
$rtr_status = '';
@@ -5407,12 +5437,40 @@ if ($function == 'agent_status')
{$rtr_status = 'PARK';}
else
{
$stmt="SELECT count(*) from vicidial_auto_calls where callerid='$callerid';";
$rslt=mysql_to_mysqli($stmt,$link);
$row=mysqli_fetch_row($rslt);
$live_channel = $row[0];
if ($live_channel < 1)
{$rtr_status = 'DEAD';}
if (preg_match("/CHAT/i",$comments))
{
$stmtCT="SELECT chat_id from vicidial_live_chats where chat_creator='$agent_user' and lead_id='$lead_id' order by chat_start_time desc limit 1;";
if ($DB) {echo "$stmtCT\n";}
$rsltCT=mysql_to_mysqli($stmtCT,$link);
$chatting_to_print = mysqli_num_rows($rslt);
if ($chatting_to_print > 0)
{
$rowCT=mysqli_fetch_row($rsltCT);
$Achat_id = $rowCT[0];
$stmtCL="SELECT count(*) from vicidial_chat_log where chat_id='$Achat_id' and message LIKE \"%has left chat\";";
if ($DB) {echo "$stmtCL\n";}
$rsltCL=mysql_to_mysqli($stmtCL,$link);
$rowCL=mysqli_fetch_row($rsltCL);
$left_chat = $rowCL[0];
if ($left_chat > 0)
{
$rtr_status = 'DEAD';
}
}
}
elseif (preg_match("/EMAIL/i",$comments))
{$do_nothing=1;}
else
{
$stmt="SELECT count(*) from vicidial_auto_calls where callerid='$callerid';";
$rslt=mysql_to_mysqli($stmt,$link);
$row=mysqli_fetch_row($rslt);
$live_channel = $row[0];
if ($live_channel < 1)
{$rtr_status = 'DEAD';}
}
}
}
@@ -7854,7 +7912,7 @@ if ($function == 'logged_in_agents')
$output .= 'user' . $DL . 'campaign_id' . $DL . 'session_id' . $DL . 'status' . $DL . 'lead_id' . $DL . 'callerid' . $DL . 'calls_today' . $DL . 'full_name' . $DL . 'user_group' . $DL . 'user_level' . $header_sub_status . "\n";
}
$stmt="SELECT status,callerid,lead_id,campaign_id,calls_today,agent_log_id,on_hook_agent,ring_callerid,preview_lead_id,conf_exten,user from vicidial_live_agents $whereLOGallowed_campaignsSQL $search_CAMP_SQL;";
$stmt="SELECT status,callerid,lead_id,campaign_id,calls_today,agent_log_id,on_hook_agent,ring_callerid,preview_lead_id,conf_exten,user,comments from vicidial_live_agents $whereLOGallowed_campaignsSQL $search_CAMP_SQL;";
$rslt=mysql_to_mysqli($stmt, $link);
if ($DB) {echo "$stmt\n";}
$agents_to_list = mysqli_num_rows($rslt);
@@ -7873,6 +7931,7 @@ if ($function == 'logged_in_agents')
$Apreview_lead_id[$i] = $row[8];
$Aconf_exten[$i] = $row[9];
$Auser[$i] = $row[10];
$Acomments[$i] = $row[11];
$Apause_code[$i] = '';
$Artr_status[$i] = '';
$i++;
@@ -7938,12 +7997,40 @@ if ($function == 'logged_in_agents')
{$rtr_status = 'PARK';}
else
{
$stmt="SELECT count(*) from vicidial_auto_calls where callerid='$Acallerid[$i]';";
$rslt=mysql_to_mysqli($stmt,$link);
$row=mysqli_fetch_row($rslt);
$live_channel = $row[0];
if ($live_channel < 1)
{$rtr_status = 'DEAD';}
if (preg_match("/CHAT/i",$Acomments[$i]))
{
$stmtCT="SELECT chat_id from vicidial_live_chats where chat_creator='$Auser[$i]' and lead_id='$Alead_id[$i]' order by chat_start_time desc limit 1;";
if ($DB) {echo "$stmtCT\n";}
$rsltCT=mysql_to_mysqli($stmtCT,$link);
$chatting_to_print = mysqli_num_rows($rslt);
if ($chatting_to_print > 0)
{
$rowCT=mysqli_fetch_row($rsltCT);
$Achat_id = $rowCT[0];
$stmtCL="SELECT count(*) from vicidial_chat_log where chat_id='$Achat_id' and message LIKE \"%has left chat\";";
if ($DB) {echo "$stmtCL\n";}
$rsltCL=mysql_to_mysqli($stmtCL,$link);
$rowCL=mysqli_fetch_row($rsltCL);
$left_chat = $rowCL[0];
if ($left_chat > 0)
{
$rtr_status = 'DEAD';
}
}
}
elseif (preg_match("/EMAIL/i",$Acomments[$i]))
{$do_nothing=1;}
else
{
$stmt="SELECT count(*) from vicidial_auto_calls where callerid='$Acallerid[$i]';";
$rslt=mysql_to_mysqli($stmt,$link);
$row=mysqli_fetch_row($rslt);
$live_channel = $row[0];
if ($live_channel < 1)
{$rtr_status = 'DEAD';}
}
}
}
$agent_sub_status = "$DL$pause_code$DL$rtr_status";
+20 -5
View File
@@ -1,7 +1,7 @@
<?php
# user_stats.php
#
# Copyright (C) 2015 Matt Florell <vicidial@gmail.com> LICENSE: AGPLv2
# Copyright (C) 2016 Matt Florell <vicidial@gmail.com> LICENSE: AGPLv2
#
# CHANGES
#
@@ -48,6 +48,7 @@
# 141229-1836 - Added code for on-the-fly language translations display
# 150804-0749 - Added call status as option, Issue #883
# 151227-1839 - Added option to search archived data
# 160104-1226 - Added call type field to the agent activity table
#
$startMS = microtime();
@@ -1142,11 +1143,11 @@ else
$MAIN.="<B>"._QXZ("AGENT ACTIVITY FOR THIS TIME PERIOD: (10000 record limit)")."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='$download_link&file_download=7'>["._QXZ("DOWNLOAD")."]</a></B>\n";
$MAIN.="<TABLE width=750 cellspacing=0 cellpadding=1>\n";
$MAIN.="<tr><td colspan=2><font size=1> &nbsp; </td><td colspan=6 align=center bgcolor=white><font size=1>"._QXZ("these fields are in seconds")." </td><td colspan=4><font size=1> &nbsp; </td></tr>\n";
$MAIN.="<tr><td><font size=1># </td><td><font size=2>"._QXZ("DATE/TIME")." </td><td align=left><font size=2>"._QXZ("PAUSE")."</td><td align=left><font size=2> "._QXZ("WAIT")."</td><td align=left><font size=2> "._QXZ("TALK")."</td><td align=right><font size=2> "._QXZ("DISPO")."</td><td align=right><font size=2> "._QXZ("DEAD")."</td><td align=right><font size=2> "._QXZ("CUSTOMER")."</td><td align=right><font size=2> "._QXZ("STATUS")."</td><td align=right><font size=2> "._QXZ("LEAD")."</td><td align=right><font size=2> "._QXZ("CAMPAIGN")."</td><td align=right><font size=2> "._QXZ("PAUSE CODE")."</td></tr>\n";
$MAIN.="<tr><td><font size=1># </td><td><font size=2>"._QXZ("DATE/TIME")." </td><td align=left><font size=2>"._QXZ("PAUSE")."</td><td align=left><font size=2> "._QXZ("WAIT")."</td><td align=left><font size=2> "._QXZ("TALK")."</td><td align=right><font size=2> "._QXZ("DISPO")."</td><td align=right><font size=2> "._QXZ("DEAD")."</td><td align=right><font size=2> "._QXZ("CUSTOMER")."</td><td align=right><font size=2> "._QXZ("STATUS")."</td><td align=right><font size=2> "._QXZ("LEAD")."</td><td align=right><font size=2> "._QXZ("TYPE")."</td><td align=right><font size=2> "._QXZ("CAMPAIGN")."</td><td align=right><font size=2> "._QXZ("PAUSE CODE")."</td></tr>\n";
$CSV_text7.="\""._QXZ("AGENT ACTIVITY FOR THIS TIME PERIOD: (10000 record limit)")."\"\n";
$CSV_text7.="\"\",\"#\",\""._QXZ("DATE/TIME")."\",\""._QXZ("PAUSE")."\",\""._QXZ("WAIT")."\",\""._QXZ("TALK")."\",\""._QXZ("DISPO")."\",\""._QXZ("DEAD")."\",\""._QXZ("CUSTOMER")."\",\""._QXZ("STATUS")."\",\""._QXZ("LEAD")."\",\""._QXZ("CAMPAIGN")."\",\""._QXZ("PAUSE CODE")."\"\n";
$CSV_text7.="\"\",\"#\",\""._QXZ("DATE/TIME")."\",\""._QXZ("PAUSE")."\",\""._QXZ("WAIT")."\",\""._QXZ("TALK")."\",\""._QXZ("DISPO")."\",\""._QXZ("DEAD")."\",\""._QXZ("CUSTOMER")."\",\""._QXZ("STATUS")."\",\""._QXZ("LEAD")."\",\""._QXZ("TYPE")."\",\""._QXZ("CAMPAIGN")."\",\""._QXZ("PAUSE CODE")."\"\n";
$stmt="SELECT event_time,lead_id,campaign_id,pause_sec,wait_sec,talk_sec,dispo_sec,dead_sec,status,sub_status,user_group from ".$vicidial_agent_log_table." where user='" . mysqli_real_escape_string($link, $user) . "' and event_time >= '" . mysqli_real_escape_string($link, $begin_date) . " 0:00:01' and event_time <= '" . mysqli_real_escape_string($link, $end_date) . " 23:59:59' and ( (pause_sec > 0) or (wait_sec > 0) or (talk_sec > 0) or (dispo_sec > 0) ) $query_call_status order by event_time desc limit 10000;";
$stmt="SELECT event_time,lead_id,campaign_id,pause_sec,wait_sec,talk_sec,dispo_sec,dead_sec,status,sub_status,user_group,comments from ".$vicidial_agent_log_table." where user='" . mysqli_real_escape_string($link, $user) . "' and event_time >= '" . mysqli_real_escape_string($link, $begin_date) . " 0:00:01' and event_time <= '" . mysqli_real_escape_string($link, $end_date) . " 23:59:59' and ( (pause_sec > 0) or (wait_sec > 0) or (talk_sec > 0) or (dispo_sec > 0) ) $query_call_status order by event_time desc limit 10000;";
if ($DB) {$MAIN.="agent activity|$stmt|";}
$rslt=mysql_to_mysqli($stmt, $link);
$logs_to_print = mysqli_num_rows($rslt);
@@ -1172,6 +1173,7 @@ else
$status = $row[8];
$pause_code = $row[9];
$user_group = $row[10];
$comments = $row[11];
$customer_sec = ($talk_sec - $dead_sec);
if ($customer_sec < 0)
{$customer_sec=0;}
@@ -1209,6 +1211,7 @@ else
$MAIN.="<td align=right><font size=2> &nbsp; </td>\n";
$MAIN.="<td align=right><font size=2> &nbsp; </td>\n";
$MAIN.="<td align=right><font size=2> &nbsp; </td>\n";
$MAIN.="<td align=right><font size=2> &nbsp; </td>\n";
$MAIN.="<td align=right><font size=2> &nbsp; </td></tr>\n";
}
@@ -1224,9 +1227,21 @@ else
$MAIN.="<td align=right><font size=2> $customer_sec </td>\n";
$MAIN.="<td align=right><font size=2> $status </td>\n";
$MAIN.="<td align=right><font size=2> <A HREF=\"admin_modify_lead.php?lead_id=$lead_id\" target=\"_blank\">$lead_id</A> </td>\n";
$call_type='';
if (strlen($lead_id) > 0)
{
$call_type='A';
if ($comments == 'INBOUND') {$call_type='I';}
if ($comments == 'EMAIL') {$call_type='E';}
if ($comments == 'CHAT') {$call_type='C';}
if ($comments == 'MANUAL') {$call_type='M';}
$MAIN.="<td align=center><font size=2> $call_type </td>\n";
}
else
{$MAIN.="<td align=right><font size=2> &nbsp;</td>\n";}
$MAIN.="<td align=right><font size=2> $campaign_id </td>\n";
$MAIN.="<td align=right><font size=2> $pause_code </td></tr>\n";
$CSV_text7.="\"\",\"$u\",\"$event_time\",\"$pause_sec\",\"$wait_sec\",\"$talk_sec\",\"$dispo_sec\",\"$dead_sec\",\"$customer_sec\",\"$status\",\"$lead_id\",\"$campaign_id\",\"$pause_code \"\n";
$CSV_text7.="\"\",\"$u\",\"$event_time\",\"$pause_sec\",\"$wait_sec\",\"$talk_sec\",\"$dispo_sec\",\"$dead_sec\",\"$customer_sec\",\"$status\",\"$lead_id\",\"$call_type\",\"$campaign_id\",\"$pause_code \"\n";
}
$MAIN.="<tr bgcolor=white>";