Event socket bug fix and more docs (#6823)

* Add documentation to methods. Use is_resource for added type detection

* Allow connect to specify timeout in microseconds with default 30,000

* Update calling mechanism for event sockets

* Update project for new singleton event sockets

* remove unused variable

* catch errors on closing the socket
This commit is contained in:
frytimo
2023-12-02 17:16:18 -07:00
committed by GitHub
parent 44567f7a05
commit 3a4c2f72e2
74 changed files with 1620 additions and 1533 deletions
+18 -18
View File
@@ -238,37 +238,37 @@
//add the agent
//setup the event socket connection
$fp = event_socket_create();
$esl = event_socket::create();
//add the agent using event socket
if ($fp) {
if ($esl->connected()) {
//add the agent
$cmd = "api callcenter_config agent add ".$call_center_agent_uuid." ".$agent_type;
$response = event_socket_request($fp, $cmd);
$cmd = "callcenter_config agent add ".$call_center_agent_uuid." '".$agent_type."'";
$response = event_socket::api($cmd);
usleep(200);
//agent set contact
$cmd = "api callcenter_config agent set contact ".$call_center_agent_uuid." ".$agent_contact;
$response = event_socket_request($fp, $cmd);
$cmd = "callcenter_config agent set contact ".$call_center_agent_uuid." '".$agent_contact."'";
$response = event_socket::api($cmd);
usleep(200);
//agent set status
$cmd = "api callcenter_config agent set status ".$call_center_agent_uuid." '".$agent_status."'";
$response = event_socket_request($fp, $cmd);
$cmd = "callcenter_config agent set status ".$call_center_agent_uuid." '".$agent_status."'";
$response = event_socket::api($cmd);
usleep(200);
//agent set reject_delay_time
$cmd = "api callcenter_config agent set reject_delay_time ".$call_center_agent_uuid." ".$agent_reject_delay_time;
$response = event_socket_request($fp, $cmd);
$cmd = 'callcenter_config agent set reject_delay_time '.$call_center_agent_uuid.' '. $agent_reject_delay_time;
$response = event_socket::api($cmd);
usleep(200);
//agent set busy_delay_time
$cmd = "api callcenter_config agent set busy_delay_time ".$call_center_agent_uuid." ".$agent_busy_delay_time;
$response = event_socket_request($fp, $cmd);
$cmd = 'callcenter_config agent set busy_delay_time '.$call_center_agent_uuid.' '.$agent_busy_delay_time;
$response = event_socket::api($cmd);
//agent set no_answer_delay_time
$cmd = "api callcenter_config agent set no_answer_delay_time ".$call_center_agent_uuid." ".$agent_no_answer_delay_time;
$response = event_socket_request($fp, $cmd);
$cmd = 'callcenter_config agent set no_answer_delay_time '.$call_center_agent_uuid.' '.$agent_no_answer_delay_time;
$response = event_socket::api($cmd);
//agent set max_no_answer
$cmd = "api callcenter_config agent set max_no_answer ".$call_center_agent_uuid." ".$agent_max_no_answer;
$response = event_socket_request($fp, $cmd);
$cmd = 'callcenter_config agent set max_no_answer '.$call_center_agent_uuid.' '.$agent_max_no_answer;
$response = event_socket::api($cmd);
//agent set wrap_up_time
$cmd = "api callcenter_config agent set wrap_up_time ".$call_center_agent_uuid." ".$agent_wrap_up_time;
$response = event_socket_request($fp, $cmd);
$cmd = 'callcenter_config agent set wrap_up_time '.$call_center_agent_uuid.' '.$agent_wrap_up_time;
$response = event_socket::api($cmd);
}
//redirect the user
+16 -17
View File
@@ -57,7 +57,7 @@
unset($sql, $parameters);
//setup the event socket connection
$fp = event_socket_create();
$esl = event_socket::create();
//get the agents from the database
$sql = "select * from v_call_center_agents ";
@@ -70,12 +70,12 @@
//get the agent list from event socket
$switch_cmd = 'callcenter_config agent list';
$event_socket_str = trim(event_socket_request($fp, 'api '.$switch_cmd));
$event_socket_str = trim(event_socket::api($switch_cmd));
$agent_list = csv_to_named_array($event_socket_str, '|');
//get the agent list from event socket
$switch_cmd = 'callcenter_config tier list';
$event_socket_str = trim(event_socket_request($fp, 'api '.$switch_cmd));
$event_socket_str = trim(event_socket::api($switch_cmd));
$call_center_tiers = csv_to_named_array($event_socket_str, '|');
//get the call center queues from the database
@@ -100,7 +100,7 @@
//get the queue list from event socket
$switch_cmd = "callcenter_config queue list agents ".$queue_id;
$event_socket_str = trim(event_socket_request($fp, 'api '.$switch_cmd));
$event_socket_str = trim(event_socket::api($switch_cmd));
$queue_list = csv_to_named_array($event_socket_str, '|');
$call_center_queues[$x]['queue_list'] = $queue_list;
$x++;
@@ -165,7 +165,7 @@
foreach($_POST['agents'] as $row) {
if (!empty($row['agent_status'])) {
//agent set status
if ($fp) {
if ($esl->is_connected()) {
//set the user_status
if (!isset($row['queue_name'])) {
$array['users'][0]['user_uuid'] = $row['user_uuid'] ?? null;
@@ -211,20 +211,20 @@
//set the call center status to Logged Out
if (is_uuid($row['agent_uuid'])) {
$command = "api callcenter_config agent set status ".$row['agent_uuid']." 'Logged Out' ";
$response = event_socket_request($fp, $command);
$command = "callcenter_config agent set status ".$row['agent_uuid']." 'Logged Out' ";
$response = event_socket::api($command);
}
}
else {
if (is_uuid($row['agent_uuid'])) {
//set the agent status
$command = "api callcenter_config agent set status ".$row['agent_uuid']." '".$agent_status."'";
$response = event_socket_request($fp, $command);
$command = "callcenter_config agent set status ".$row['agent_uuid']." '".$agent_status."'";
$response = event_socket::api($command);
//set the agent state
if ($agent_status == 'Available' || $agent_status == 'Logged Out') {
$command = "api callcenter_config agent set state ".$row['agent_uuid']." 'Waiting'";
$response = event_socket_request($fp, $command);
$command = "callcenter_config agent set state ".$row['agent_uuid']." 'Waiting'";
$response = event_socket::api($command);
}
}
}
@@ -247,22 +247,21 @@
if (isset($row['queue_uuid']) && $row['agent_status'] == 'Available') {
//set the call center status
//$command = "api callcenter_config agent set status ".$row['agent_name']."@".$_SESSION['domain_name']." '".$row['agent_status']."'";
//$response = event_socket_request($fp, $command);
//$response = event_socket::command($command);
//assign the agent to the queue
if (is_uuid($row['queue_uuid']) && is_uuid($row['agent_uuid'])) {
$command = "api callcenter_config tier add ".$queue_id." ".$row['agent_uuid']." 1 1";
//echo $command."<br />\n";
$response = event_socket_request($fp, $command);
$command = "callcenter_config tier add ".$queue_id." ".$row['agent_uuid']." 1 1";
$response = event_socket::api($command);
}
}
//un-assign the agent from the queue
if (isset($row['queue_uuid']) && $row['agent_status'] == 'Logged Out') {
if (is_uuid($row['queue_uuid']) && is_uuid($row['agent_uuid'])) {
$command = "api callcenter_config tier del ".$queue_id." ".$row['agent_uuid'];
$command = "callcenter_config tier del ".$queue_id." ".$row['agent_uuid'];
//echo $command."<br />\n";
$response = event_socket_request($fp, $command);
$response = event_socket::api($command);
}
}
usleep(200);
+12 -12
View File
@@ -160,13 +160,13 @@
//delete the agent from freeswitch
//setup the event socket connection
$fp = event_socket_create();
$esl = event_socket::create();
//delete the agent over event socket
if ($fp) {
if ($esl->is_connected()) {
//callcenter_config tier del [queue_name] [agent_name]
if (is_numeric($queue_extension) && is_uuid($call_center_agent_uuid)) {
$cmd = "api callcenter_config tier del ".$queue_extension."@".$_SESSION['domain_name']." ".$call_center_agent_uuid;
$response = event_socket_request($fp, $cmd);
$cmd = "callcenter_config tier del ".$queue_extension."@".$_SESSION['domain_name']." ".$call_center_agent_uuid;
$response = event_socket::api($cmd);
}
}
@@ -468,9 +468,9 @@
if (!empty($agent_name)) {
//setup the event socket connection
$fp = event_socket_create();
$esl = event_socket::create();
//add the agent using event socket
if ($fp) {
if ($esl->is_connected()) {
/* syntax:
callcenter_config tier add [queue_name] [agent_name] [level] [position]
callcenter_config tier set state [queue_name] [agent_name] [state]
@@ -479,20 +479,20 @@
*/
//add the agent
if (is_numeric($queue_extension) && is_uuid($call_center_agent_uuid) && is_numeric($tier_level) && is_numeric($tier_position)) {
$cmd = "api callcenter_config tier add ".$queue_extension."@".$_SESSION["domain_name"]." ".$call_center_agent_uuid." ".$tier_level." ".$tier_position;
$response = event_socket_request($fp, $cmd);
$cmd = "callcenter_config tier add ".$queue_extension."@".$_SESSION["domain_name"]." ".$call_center_agent_uuid." ".$tier_level." ".$tier_position;
$response = event_socket::api($cmd);
}
usleep(200);
//agent set level
if (is_numeric($queue_extension) && is_numeric($tier_level)) {
$cmd = "api callcenter_config tier set level ".$queue_extension."@".$_SESSION["domain_name"]." ".$call_center_agent_uuid." ".$tier_level;
$response = event_socket_request($fp, $cmd);
$cmd = "callcenter_config tier set level ".$queue_extension."@".$_SESSION["domain_name"]." ".$call_center_agent_uuid." ".$tier_level;
$response = event_socket::api($cmd);
}
usleep(200);
//agent set position
if (is_numeric($queue_extension) && is_numeric($tier_position)) {
$cmd = "api callcenter_config tier set position ".$queue_extension."@".$_SESSION["domain_name"]." ".$tier_position;
$response = event_socket_request($fp, $cmd);
$cmd = "callcenter_config tier set position ".$queue_extension."@".$_SESSION["domain_name"]." ".$tier_position;
$response = event_socket::api($cmd);
}
usleep(200);
}
+5 -6
View File
@@ -70,11 +70,10 @@
//connect to event socket
if (isset($queue_extension) && isset($cmd)) {
$fp = event_socket_create();
if ($fp) {
$response = event_socket_request($fp, 'api reloadxml');
$response = event_socket_request($fp, 'api callcenter_config queue '.$cmd. ' '.$queue_extension."@".$_SESSION["domain_name"]);
fclose($fp);
$esl = event_socket::create();
if ($esl->is_connected()) {
$response = event_socket::api('reloadxml');
$response = event_socket::api('callcenter_config queue '.$cmd.' '.$queue_extension.'@'.$_SESSION['domain_name']);
}
else {
$response = '';
@@ -85,4 +84,4 @@
$_SESSION["message"] = $response;
header("Location: call_center_queues.php?savemsg=".urlencode($response));
?>
?>
@@ -338,13 +338,13 @@
if (is_array($array) && @sizeof($array) != 0) {
//setup the event socket connection
$fp = event_socket_create();
$esl = event_socket::create();
//delete the queue in the switch
if ($fp) {
if ($esl->is_connected()) {
foreach ($uuids as $uuid) {
$cmd = "api callcenter_config queue unload ".$call_center_queues[$uuid]['queue_extension']."@".$_SESSION["domain_name"];
$response = event_socket_request($fp, $cmd);
$cmd = "callcenter_config queue unload ".$call_center_queues[$uuid]['queue_extension']."@".$_SESSION['domain_name'];
$response = event_socket::api($cmd);
}
}
@@ -436,13 +436,12 @@
if (is_array($array) && @sizeof($array) != 0) {
//setup the event socket connection
$fp = event_socket_create();
$esl = event_socket::create();
//delete the agent in the switch
if ($fp) {
if ($esl->is_connected()) {
foreach ($uuids as $uuid) {
$cmd = "api callcenter_config agent del ".$uuid;
$response = event_socket_request($fp, $cmd);
event_socket::async("callcenter_config agent del $uuid");
}
}
@@ -627,4 +626,4 @@ $c->queue_cc_exit_keys = "";
$c->dialplan();
*/
?>
?>
@@ -51,7 +51,7 @@
}
//setup the event socket connection
$fp = event_socket_create();
$esl = event_socket::create();
//get the http post values and set them as php variables
if (!empty($_POST['agents'])) {
@@ -91,8 +91,8 @@
$result = $database->save($array);
//send the agent status status to mod_call_center
$cmd = "api callcenter_config agent set status ".$agent_uuid." '".$agent_status."'";
$response = event_socket_request($fp, $cmd);
$cmd = "callcenter_config agent set status ".$agent_uuid." '".$agent_status."'";
$response = event_socket::api($cmd);
//add or delete agents from the queue assigned by the tier
foreach ($_POST['agents'] as $row) {
@@ -103,21 +103,21 @@
//set the agent status to available and assign the agent to the queue with the tier
if ($row['agent_status'] == 'Available') {
//assign the agent to the queue
$cmd = "api callcenter_config tier add ".$row['queue_extension']."@".$_SESSION['domain_name']." ".$row['id']." 1 1";
$response = event_socket_request($fp, $cmd);
$cmd = "callcenter_config tier add ".$row['queue_extension']."@".$_SESSION['domain_name']." ".$row['id']." 1 1";
$response = event_socket::api($cmd);
}
//set the agent status to available and assign the agent to the queue with the tier
if ($row['agent_status'] == 'On Break') {
//assign the agent to the queue
$cmd = "api callcenter_config tier add ".$row['queue_extension']."@".$_SESSION['domain_name']." ".$row['id']." 1 1";
$response = event_socket_request($fp, $cmd);
$cmd = "callcenter_config tier add ".$row['queue_extension']."@".$_SESSION['domain_name']." ".$row['id']." 1 1";
$response = event_socket::api($cmd);
}
//un-assign the agent from the queue
if ($row['agent_status'] == 'Logged Out') {
$cmd = "api callcenter_config tier del ".$row['queue_extension']."@".$_SESSION['domain_name']." ".$row['id'];
$response = event_socket_request($fp, $cmd);
$cmd = "callcenter_config tier del ".$row['queue_extension']."@".$_SESSION['domain_name']." ".$row['id'];
$response = event_socket::api($cmd);
}
//small sleep
@@ -132,7 +132,7 @@
//get the agent list from event socket
$switch_cmd = 'callcenter_config tier list';
$event_socket_str = trim(event_socket_request($fp, 'api '.$switch_cmd));
$event_socket_str = trim(event_socket::api($switch_cmd));
$call_center_tiers = csv_to_named_array($event_socket_str, '|');
//get the agents from the database
@@ -31,11 +31,11 @@
}
//connect to event socket
$fp = event_socket_create();
$esl = event_socket::create();
//get the agent list from event socket
$switch_cmd = 'callcenter_config agent list';
$event_socket_str = trim(event_socket_request($fp, 'api '.$switch_cmd));
$event_socket_str = trim(event_socket::api($switch_cmd));
$agent_list = csv_to_named_array($event_socket_str, '|');
//get the agents from the database
@@ -69,7 +69,7 @@
}
//build the event
if ($fp) {
if ($esl->is_connected()) {
$event = "sendevent PRESENCE_IN\n";
$event .= "proto: agent\n";
$event .= "from: ".$row['agent_name']."@".$row['domain_name']."\n";
@@ -104,16 +104,13 @@
}
//send the event
$result = event_socket_request($fp, $event);
$result = event_socket::command($event);
if (isset($debug)) {
print_r($result, false);
}
}
//close event socket connection
fclose($fp);
/*
* * * * * cd /var/www/fusionpbx && php /var/www/fusionpbx/app/call_centers/resources/jobs/call_center_agents.php
*/