|
|
@@ -93,83 +93,16 @@ class Events
|
|
|
Timer::add(60 * 1, function () {
|
|
|
self::lineup();
|
|
|
});
|
|
|
+ Timer::add(60 * 1, function () {
|
|
|
+ self::lineup();
|
|
|
+ });
|
|
|
+ // 检查对话时效给出.
|
|
|
+ Timer::add(60, function () {
|
|
|
+ self::overTime();
|
|
|
+ });
|
|
|
|
|
|
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
- // 检查对话时效给出.
|
|
|
- Timer::add(60, function () {
|
|
|
- // 查询对话时效设置.
|
|
|
- $systemConfigData = self::$db->query("SELECT `systemconfig_data`,`systemconfig_enName`,`systemconfig_content` FROM `ws_systemconfig`");
|
|
|
- foreach ($systemConfigData as $k => $v) {
|
|
|
- if ($v['systemconfig_enName'] == 'overtime') {
|
|
|
- self::$global->overtime = $v;
|
|
|
- } elseif ($v['systemconfig_enName'] == 'unoperated') {
|
|
|
- self::$global->unoperated = $v;
|
|
|
- } elseif ($v['systemconfig_enName'] == 'noResponse') {
|
|
|
- self::$global->noResponse = $v;
|
|
|
- }
|
|
|
- }
|
|
|
- // 查询未断开的工单.
|
|
|
- $serviceLog = self::$db->query("SELECT `servicelog_id`,`client_id`,`start_time` FROM `ws_service_log` WHERE `status`='1' OR `status`='3'");
|
|
|
- $whereOr = '1=0';
|
|
|
- foreach ($serviceLog as $k => $v) {
|
|
|
- if ($k == 0) {
|
|
|
- $whereOr = "`servicelog_id`=" . $v['servicelog_id'];
|
|
|
- } else {
|
|
|
- $whereOr .= " OR `servicelog_id`=" . $v['servicelog_id'];
|
|
|
- }
|
|
|
- }
|
|
|
- // 查询最后一次会话.
|
|
|
- //$chatLog = self::$db->query("SELECT `servicelog_id`,MAX(`time_line`) FROM `ws_chat_log` WHERE ".$whereOr." group by `servicelog_id`");
|
|
|
- $chatLog = self::$db->query("
|
|
|
- select * from ws_chat_log as a where time_line=(
|
|
|
- select max(b.time_line) from ws_chat_log as b where a.servicelog_id = b.servicelog_id and (" . $whereOr . ") group by servicelog_id
|
|
|
- )
|
|
|
- ");
|
|
|
- $setOvertime = strtotime('-' . (self::$global->overtime['systemconfig_data'] - 60) . ' second');
|
|
|
- $overtime = strtotime('-' . (self::$global->overtime['systemconfig_data']) . ' second');
|
|
|
- $setUnoperated = strtotime('-' . (self::$global->unoperated['systemconfig_data'] - 60) . ' second');
|
|
|
- $unoperated = strtotime('-' . (self::$global->unoperated['systemconfig_data']) . ' second');
|
|
|
- $noResponse = strtotime('-' . (self::$global->noResponse['systemconfig_data']) . ' second');
|
|
|
- foreach ($serviceLog as $k => $v) {//注意该循环时间
|
|
|
- if (!strlen(array_search($v['servicelog_id'], array_column($chatLog, 'servicelog_id')))) {
|
|
|
- // 如果小于设定时间则关闭会话.
|
|
|
- if ($v['start_time'] <= $unoperated) {
|
|
|
- self::serverClose($v['client_id'], $v['servicelog_id']);
|
|
|
- // 如果小于设定时间前一分钟则给出提示.
|
|
|
- } elseif ($v['start_time'] <= $setUnoperated) {
|
|
|
- $chat_message = [
|
|
|
- 'message_type' => 'overtime',
|
|
|
- 'data' => [
|
|
|
- 'content' => htmlspecialchars(self::$global->unoperated['systemconfig_content']),
|
|
|
- ]
|
|
|
- ];
|
|
|
- Gateway::sendToClient($v['client_id'], json_encode($chat_message));
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- // 循环检测会话时效.
|
|
|
- foreach ($chatLog as $k => $v) {
|
|
|
- $toWho = substr($v['to_id'], 0, 2);
|
|
|
- // 如果对话为客服的最后一次对话且时间小于设定时间则结束工单.
|
|
|
- if ($v['time_line'] <= $overtime) {
|
|
|
- $found_key = array_search($v['servicelog_id'], array_column($serviceLog, 'servicelog_id'));
|
|
|
- self::serverClose($serviceLog[$found_key]['client_id'], $v['servicelog_id']);
|
|
|
- // 如果对话为客服的最后一次对话且时间小于设定时间前一分钟则给出提示.
|
|
|
- } elseif ($v['time_line'] <= $setOvertime) {
|
|
|
- $chat_message = [
|
|
|
- 'message_type' => 'overtime',
|
|
|
- 'data' => [
|
|
|
- 'content' => htmlspecialchars(self::$global->overtime['systemconfig_content']),
|
|
|
- ]
|
|
|
- ];
|
|
|
- $found_key = array_search($v['servicelog_id'], array_column($serviceLog, 'servicelog_id'));
|
|
|
- Gateway::sendToClient($serviceLog[$found_key]['client_id'], json_encode($chat_message, 256));
|
|
|
- }
|
|
|
- }
|
|
|
- });
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -259,8 +192,8 @@ class Events
|
|
|
echo "onMessage: " . $message . "\r\n";
|
|
|
print_r([self::$global->kfList, self::$global->userList, self::$global->uidSimpleList, self::$global->userToKf]);
|
|
|
}
|
|
|
-
|
|
|
$message = json_decode($message, true);
|
|
|
+ if (isset($message['type'])) {
|
|
|
switch ($message['type']) {
|
|
|
// 客服初始化
|
|
|
case 'init':
|
|
|
@@ -302,145 +235,157 @@ class Events
|
|
|
'time_line' => time()
|
|
|
];
|
|
|
|
|
|
- self::$db->insert('ws_chat_log')->cols($serviceLog)->query();
|
|
|
- unset($serviceLog);
|
|
|
- }
|
|
|
- break;
|
|
|
- // 转接
|
|
|
- case 'changeGroup':
|
|
|
- // 通知客户端转接中
|
|
|
- $simpleList = self::$global->uidSimpleList;
|
|
|
+ self::$db->insert('ws_chat_log')->cols($serviceLog)->query();
|
|
|
+ unset($serviceLog);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ // 转接
|
|
|
+ case 'changeGroup':
|
|
|
+ // 通知客户端转接中
|
|
|
+ $simpleList = self::$global->uidSimpleList;
|
|
|
|
|
|
- if (!isset($simpleList[$message['uid']])) { // 客户已经退出
|
|
|
- return;
|
|
|
- }
|
|
|
+ if (!isset($simpleList[$message['uid']])) { // 客户已经退出
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
- $userClient = $simpleList[$message['uid']]['0'];
|
|
|
- $userGroup = $simpleList[$message['uid']]['1']; // 会员原来的分组也是客服的分组
|
|
|
+ $userClient = $simpleList[$message['uid']]['0'];
|
|
|
+ $userGroup = $simpleList[$message['uid']]['1']; // 会员原来的分组也是客服的分组
|
|
|
|
|
|
- $reLink = [
|
|
|
- 'message_type' => 'relinkMessage'
|
|
|
- ];
|
|
|
- Gateway::sendToClient($userClient, json_encode($reLink));
|
|
|
- unset($reLink);
|
|
|
+ $reLink = [
|
|
|
+ 'message_type' => 'relinkMessage'
|
|
|
+ ];
|
|
|
+ Gateway::sendToClient($userClient, json_encode($reLink, 256));
|
|
|
+ unset($reLink);
|
|
|
+
|
|
|
+ // 记录该客服与该会员的服务结束
|
|
|
+ self::$db->query("update `ws_service_log` set `end_time` = " . time() . " , `status` = '2' where `client_id`= '" . $userClient . "'");
|
|
|
+
|
|
|
+ // 从当前客服的服务表中删除这个会员
|
|
|
+ $old = $kfList = self::$global->kfList;
|
|
|
+ if (!isset($kfList[$userGroup])) {
|
|
|
+ $waitMsg = '暂时没有相关客服上班,请稍后再咨询。';
|
|
|
+ // 逐一通知
|
|
|
+ foreach (self::$global->userList as $vo) {
|
|
|
+
|
|
|
+ $waitMessage = [
|
|
|
+ 'message_type' => 'wait',
|
|
|
+ 'data' => [
|
|
|
+ 'content' => $waitMsg,
|
|
|
+ ]
|
|
|
+ ];
|
|
|
+ Gateway::sendToClient($userClient, json_encode($waitMessage, 256));
|
|
|
+ unset($waitMessage);
|
|
|
+ }
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ $myList = $kfList[$userGroup]; // 该客服分组数组
|
|
|
+ foreach ($myList as $key => $vo) {
|
|
|
+ if (in_array($userClient, $vo['user_info'])) {
|
|
|
+
|
|
|
+ // 维护现在的该客服的服务信息
|
|
|
+ $kfList[$userGroup][$key]['task'] -= 1; // 当前服务的人数 -1
|
|
|
+ foreach ($vo['user_info'] as $k => $v) {
|
|
|
+ if ($userClient == $v) {
|
|
|
+ unset($kfList[$userGroup][$key]['user_info'][$k]);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ while (!self::$global->cas('kfList', $old, $kfList)) {
|
|
|
+ }; // 刷新内存中客服的服务列表
|
|
|
+ unset($old, $kfList, $myList);
|
|
|
+
|
|
|
+ // 将会员加入队列中
|
|
|
+ $userList = self::$global->userList;
|
|
|
+ do {
|
|
|
+ $NewUserList = $userList;
|
|
|
+ $NewUserList[$message['uid']] = [
|
|
|
+ 'id' => $message['uid'],
|
|
|
+ 'name' => $message['name'],
|
|
|
+ 'avatar' => $message['avatar'],
|
|
|
+ 'ip' => $message['ip'],
|
|
|
+ 'group' => $message['group'], // 指定要链接的分组
|
|
|
+ 'client_id' => $userClient
|
|
|
+ ];
|
|
|
|
|
|
- // 记录该客服与该会员的服务结束
|
|
|
- self::$db->query("update `ws_service_log` set `end_time` = " . time() . " , `status` = '2' where `client_id`= '" . $userClient . "'");
|
|
|
+ } while (!self::$global->cas('userList', $userList, $NewUserList));
|
|
|
+ unset($NewUserList, $userList);
|
|
|
|
|
|
- // 从当前客服的服务表中删除这个会员
|
|
|
- $old = $kfList = self::$global->kfList;
|
|
|
- if (!isset($kfList[$userGroup])) {
|
|
|
- $waitMsg = '暂时没有相关客服上班,请稍后再咨询。';
|
|
|
- // 逐一通知
|
|
|
- foreach (self::$global->userList as $vo) {
|
|
|
+ // 执行会员分配通知双方
|
|
|
+ self::userOnlineTask($userClient, $message['group']);
|
|
|
+ unset($userClient, $userGroup);
|
|
|
+
|
|
|
+ break;
|
|
|
+ case 'closeUser':
|
|
|
|
|
|
+ $userInfo = self::$global->uidSimpleList;
|
|
|
+ if (isset($userInfo[$message['uid']])) {
|
|
|
$waitMessage = [
|
|
|
'message_type' => 'wait',
|
|
|
'data' => [
|
|
|
- 'content' => $waitMsg,
|
|
|
+ 'content' => '暂时没有客服上班,请稍后再咨询。',
|
|
|
]
|
|
|
];
|
|
|
- Gateway::sendToClient($userClient, json_encode($waitMessage, 256));
|
|
|
+ Gateway::sendToClient($userInfo[$message['uid']]['0'], json_encode($waitMessage, 256));
|
|
|
unset($waitMessage);
|
|
|
}
|
|
|
- return;
|
|
|
- }
|
|
|
- $myList = $kfList[$userGroup]; // 该客服分组数组
|
|
|
- foreach ($myList as $key => $vo) {
|
|
|
- if (in_array($userClient, $vo['user_info'])) {
|
|
|
-
|
|
|
- // 维护现在的该客服的服务信息
|
|
|
- $kfList[$userGroup][$key]['task'] -= 1; // 当前服务的人数 -1
|
|
|
- foreach ($vo['user_info'] as $k => $v) {
|
|
|
- if ($userClient == $v) {
|
|
|
- unset($kfList[$userGroup][$key]['user_info'][$k]);
|
|
|
- break;
|
|
|
+ unset($userInfo);
|
|
|
+ break;
|
|
|
+ // 机器人问答.
|
|
|
+ case 'toRobot':
|
|
|
+ self::toRobot($client_id, $message);
|
|
|
+ break;
|
|
|
+ // 评价.
|
|
|
+ case 'evaluate':
|
|
|
+ self::evaluate($client_id, $message);
|
|
|
+ break;
|
|
|
+ // 客服关闭会话.
|
|
|
+ case 'kfCloseUser':
|
|
|
+ $client = Gateway::getClientIdByUid($userId);
|
|
|
+ if (!empty($client)) {
|
|
|
+ $userId = $message['data']['to_id'];
|
|
|
+ $kfId = $message['data']['kf_id'];
|
|
|
+ $groupId = $message['data']['group_id'];
|
|
|
+ $clientId = $client['0'];
|
|
|
+ $sql = "select 'servicelog_id' from `ws_service_log` where `user_id`= '$userId' and `client_id`= '$clientId' and `status`!= '2' and `group_id`!= '$groupId' and `kf_id`!= '$kfId'";
|
|
|
+ $serviceLog = self::$db->query($sql);
|
|
|
+ self::serverClose($clientId, $serviceLog[0]['servicelog_id']);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ // 客服更改状态.
|
|
|
+ case 'kfOnline':
|
|
|
+ $kfList = self::$global->kfList;
|
|
|
+ $userId = $message['data']['uid'];
|
|
|
+ $status = $message['data']['status'];
|
|
|
+ foreach ($kfList as $k => $v) {
|
|
|
+ foreach ($v as $ke => $va) {
|
|
|
+ if ($ke == $userId) {
|
|
|
+ $kfList[$k][$ke]['status'] = $status;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- break;
|
|
|
}
|
|
|
- }
|
|
|
- while (!self::$global->cas('kfList', $old, $kfList)) {
|
|
|
- }; // 刷新内存中客服的服务列表
|
|
|
- unset($old, $kfList, $myList);
|
|
|
-
|
|
|
- // 将会员加入队列中
|
|
|
- $userList = self::$global->userList;
|
|
|
- do {
|
|
|
- $NewUserList = $userList;
|
|
|
- $NewUserList[$message['uid']] = [
|
|
|
- 'id' => $message['uid'],
|
|
|
- 'name' => $message['name'],
|
|
|
- 'avatar' => $message['avatar'],
|
|
|
- 'ip' => $message['ip'],
|
|
|
- 'group' => $message['group'], // 指定要链接的分组
|
|
|
- 'client_id' => $userClient
|
|
|
- ];
|
|
|
-
|
|
|
- } while (!self::$global->cas('userList', $userList, $NewUserList));
|
|
|
- unset($NewUserList, $userList);
|
|
|
-
|
|
|
- // 执行会员分配通知双方
|
|
|
- self::userOnlineTask($userClient, $message['group']);
|
|
|
- unset($userClient, $userGroup);
|
|
|
-
|
|
|
- break;
|
|
|
- case 'closeUser':
|
|
|
-
|
|
|
- $userInfo = self::$global->uidSimpleList;
|
|
|
- if (isset($userInfo[$message['uid']])) {
|
|
|
- $waitMessage = [
|
|
|
- 'message_type' => 'wait',
|
|
|
- 'data' => [
|
|
|
- 'content' => '暂时没有客服上班,请稍后再咨询。',
|
|
|
- ]
|
|
|
- ];
|
|
|
- Gateway::sendToClient($userInfo[$message['uid']]['0'], json_encode($waitMessage, 256));
|
|
|
- unset($waitMessage);
|
|
|
- }
|
|
|
- unset($userInfo);
|
|
|
- break;
|
|
|
- // 机器人问答.
|
|
|
- case 'toRobot':
|
|
|
- self::toRobot($client_id, $message);
|
|
|
- break;
|
|
|
- // 评价.
|
|
|
- case 'evaluate':
|
|
|
- self::evaluate($client_id, $message);
|
|
|
- break;
|
|
|
- // 客服关闭会话.
|
|
|
- case 'kfCloseUser':
|
|
|
- $client = Gateway::getClientIdByUid($userId);
|
|
|
- if (!empty($client)) {
|
|
|
- $userId = $message['data']['to_id'];
|
|
|
- $kfId = $message['data']['kf_id'];
|
|
|
- $groupId = $message['data']['group_id'];
|
|
|
- $clientId = $client['0'];
|
|
|
- $sql = "select 'servicelog_id' from `ws_service_log` where `user_id`= '$userId' and `client_id`= '$clientId' and `status`!= '2' and `group_id`!= '$groupId' and `kf_id`!= '$kfId'";
|
|
|
- $serviceLog = self::$db->query($sql);
|
|
|
- self::serverClose($clientId, $serviceLog[0]['servicelog_id']);
|
|
|
- }
|
|
|
- break;
|
|
|
- // 客服更改状态.
|
|
|
- case 'kfOnline':
|
|
|
- $kfList = self::$global->kfList;
|
|
|
- $userId = $message['data']['uid'];
|
|
|
- $status = $message['data']['status'];
|
|
|
- foreach ($kfList as $k => $v) {
|
|
|
- foreach ($v as $ke => $va) {
|
|
|
- if ($ke == $userId) {
|
|
|
- $kfList[$k][$ke]['status'] = $status;
|
|
|
- }
|
|
|
+ self::$global->kfList = $kfList;
|
|
|
+ break;
|
|
|
+ case 'changeOtherhKeFu';
|
|
|
+ self::changeOtherhKeFu($client_id, $message);
|
|
|
+ break;
|
|
|
+ // 弹出评价.
|
|
|
+ case 'getEvaluate';
|
|
|
+ $client = Gateway::getClientIdByUid($message['data']['to_id']);
|
|
|
+ if (!empty($client)) {
|
|
|
+ $chat_message = [
|
|
|
+ 'message_type' => 'getEvaluate',
|
|
|
+ 'data' => [
|
|
|
+ 'content' => '欢迎你的咨询,请对我们的服务做出评价',
|
|
|
+ ]
|
|
|
+ ];
|
|
|
+ Gateway::sendToClient($client['0'], json_encode($chat_message, 256));
|
|
|
+ unset($chat_message);
|
|
|
}
|
|
|
- }
|
|
|
- self::$global->kfList = $kfList;
|
|
|
- break;
|
|
|
- case 'changeOtherhKeFu';
|
|
|
- self::changeOtherhKeFu($client_id, $message);
|
|
|
- break;
|
|
|
- // default:
|
|
|
- // Gateway::closeClient($client_id);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
}
|
|
|
@@ -713,7 +658,7 @@ class Events
|
|
|
{
|
|
|
$isKefuoff = isset($_SESSION['iskefu']) ? $_SESSION['iskefu'] : 0;
|
|
|
$uid = isset($_SESSION['uid']) ? $_SESSION['uid'] : false;
|
|
|
- echo "下线:$uid - $client_id - $isKefuoff \n";
|
|
|
+ //echo "下线:$uid - $client_id - $isKefuoff \n";
|
|
|
|
|
|
if (empty($uid)) {
|
|
|
return;
|
|
|
@@ -1420,13 +1365,15 @@ class Events
|
|
|
// 查询问题.
|
|
|
$getRobot = self::$db->query("select `robot_content` from `ws_robot` where `robot_status`= 1 and `groups_id`= '" . $groups_id . "' and `robot_name`= '" . $robot_name . "' and `robotgroups_id`= '" . $robotgroups_id . "'");
|
|
|
$chat_message = [
|
|
|
- 'message_type' => 'chatMessage',
|
|
|
+ 'message_type' => 'robotMessage',
|
|
|
+ //'message_type' => 'chatMessage',
|
|
|
'data' => [
|
|
|
'name' => '智能助手',
|
|
|
'time' => date('H:i'),
|
|
|
'content' => $getRobot ? htmlspecialchars($getRobot[0]['robot_content']) : 'error',
|
|
|
]
|
|
|
];
|
|
|
+ sleep(1);
|
|
|
Gateway::sendToClient($client_id, json_encode($chat_message, 256));
|
|
|
}
|
|
|
|
|
|
@@ -1457,7 +1404,85 @@ class Events
|
|
|
]
|
|
|
];
|
|
|
}
|
|
|
- Gateway::sendToClient($client_id, json_encode($chat_message));
|
|
|
+ Gateway::sendToClient($client_id, json_encode($chat_message, 256));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 超时
|
|
|
+ * @param $client_id 服务ID
|
|
|
+ * @param $message 数据
|
|
|
+ */
|
|
|
+ private static function overTime()
|
|
|
+ {
|
|
|
+ // 查询对话时效设置.
|
|
|
+ $systemConfigData = self::$db->query("SELECT `systemconfig_data`,`systemconfig_enName`,`systemconfig_content` FROM `ws_systemconfig`");
|
|
|
+ foreach ($systemConfigData as $k => $v) {
|
|
|
+ if ($v['systemconfig_enName'] == 'overtime') {
|
|
|
+ self::$global->overtime = $v;
|
|
|
+ } elseif ($v['systemconfig_enName'] == 'unoperated') {
|
|
|
+ self::$global->unoperated = $v;
|
|
|
+ } elseif ($v['systemconfig_enName'] == 'noResponse') {
|
|
|
+ self::$global->noResponse = $v;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 查询未断开的工单.
|
|
|
+ $serviceLog = self::$db->query("SELECT `servicelog_id`,`client_id`,`start_time` FROM `ws_service_log` WHERE `status`='1' OR `status`='3'");
|
|
|
+ $whereOr = '1=0';
|
|
|
+ foreach ($serviceLog as $k => $v) {
|
|
|
+ if ($k == 0) {
|
|
|
+ $whereOr = "`servicelog_id`=" . $v['servicelog_id'];
|
|
|
+ } else {
|
|
|
+ $whereOr .= " OR `servicelog_id`=" . $v['servicelog_id'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 查询最后一次会话.
|
|
|
+ //$chatLog = self::$db->query("SELECT `servicelog_id`,MAX(`time_line`) FROM `ws_chat_log` WHERE ".$whereOr." group by `servicelog_id`");
|
|
|
+ $chatLog = self::$db->query("
|
|
|
+ select * from ws_chat_log as a where time_line=(
|
|
|
+ select max(b.time_line) from ws_chat_log as b where a.servicelog_id = b.servicelog_id and (" . $whereOr . ") group by servicelog_id
|
|
|
+ )
|
|
|
+ ");
|
|
|
+ $setOvertime = strtotime('-' . (self::$global->overtime['systemconfig_data'] - 60) . ' second');
|
|
|
+ $overtime = strtotime('-' . (self::$global->overtime['systemconfig_data']) . ' second');
|
|
|
+ $setUnoperated = strtotime('-' . (self::$global->unoperated['systemconfig_data'] - 60) . ' second');
|
|
|
+ $unoperated = strtotime('-' . (self::$global->unoperated['systemconfig_data']) . ' second');
|
|
|
+ $noResponse = strtotime('-' . (self::$global->noResponse['systemconfig_data']) . ' second');
|
|
|
+ foreach ($serviceLog as $k => $v) {//注意该循环时间
|
|
|
+ if (!strlen(array_search($v['servicelog_id'], array_column($chatLog, 'servicelog_id')))) {
|
|
|
+ // 如果小于设定时间则关闭会话.
|
|
|
+ if ($v['start_time'] <= $unoperated) {
|
|
|
+ self::serverClose($v['client_id'], $v['servicelog_id']);
|
|
|
+ // 如果小于设定时间前一分钟则给出提示.
|
|
|
+ } elseif ($v['start_time'] <= $setUnoperated) {
|
|
|
+ $chat_message = [
|
|
|
+ 'message_type' => 'overtime',
|
|
|
+ 'data' => [
|
|
|
+ 'content' => htmlspecialchars(self::$global->unoperated['systemconfig_content']),
|
|
|
+ ]
|
|
|
+ ];
|
|
|
+ Gateway::sendToClient($v['client_id'], json_encode($chat_message, 256));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 循环检测会话时效.
|
|
|
+ foreach ($chatLog as $k => $v) {
|
|
|
+ $toWho = substr($v['to_id'], 0, 2);
|
|
|
+ // 如果对话为客服的最后一次对话且时间小于设定时间则结束工单.
|
|
|
+ if ($v['time_line'] <= $overtime) {
|
|
|
+ $found_key = array_search($v['servicelog_id'], array_column($serviceLog, 'servicelog_id'));
|
|
|
+ self::serverClose($serviceLog[$found_key]['client_id'], $v['servicelog_id']);
|
|
|
+ // 如果对话为客服的最后一次对话且时间小于设定时间前一分钟则给出提示.
|
|
|
+ } elseif ($v['time_line'] <= $setOvertime) {
|
|
|
+ $chat_message = [
|
|
|
+ 'message_type' => 'overtime',
|
|
|
+ 'data' => [
|
|
|
+ 'content' => htmlspecialchars(self::$global->overtime['systemconfig_content']),
|
|
|
+ ]
|
|
|
+ ];
|
|
|
+ $found_key = array_search($v['servicelog_id'], array_column($serviceLog, 'servicelog_id'));
|
|
|
+ Gateway::sendToClient($serviceLog[$found_key]['client_id'], json_encode($chat_message, 256));
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
|