|
|
@@ -68,7 +68,7 @@ class Events
|
|
|
|
|
|
// 检查对话时效给出.
|
|
|
Timer::add(6, function () {
|
|
|
- // self::overTime();
|
|
|
+ self::overTime();
|
|
|
});
|
|
|
}
|
|
|
|
|
|
@@ -112,7 +112,6 @@ class Events
|
|
|
Gateway::sendToClient($client_id, json_encode($hello, 256));
|
|
|
unset($hello);
|
|
|
}
|
|
|
-
|
|
|
unset($sayHello);
|
|
|
// 检测是否开启广告
|
|
|
$advertisement = self::$db->query('select * from `ws_advertisement` where `advertisement_status` = 1');
|
|
|
@@ -188,6 +187,7 @@ class Events
|
|
|
break;
|
|
|
// 客服关闭会话.
|
|
|
case 'kfCloseUser':
|
|
|
+ self::serverClose($message['data']['conversationId'],3);
|
|
|
break;
|
|
|
// 客服更改状态.
|
|
|
case 'kfOnline':
|
|
|
@@ -208,6 +208,9 @@ class Events
|
|
|
{
|
|
|
// 获取当前会话工单.
|
|
|
$data = json_decode(self::$redis->HGET('SERVICELOG', $message['conversationId']), true);
|
|
|
+ if (empty($data)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
$chat_message = [
|
|
|
'message_type' => 'chatMessage',
|
|
|
'data' => [
|
|
|
@@ -219,26 +222,27 @@ class Events
|
|
|
];
|
|
|
if (isset($message['isFirst']) && $message['isFirst']) {
|
|
|
$data['alarm_corresponding'] = time() - $data['start_time'];
|
|
|
+ $data['alarm_respond'] = 2;
|
|
|
}
|
|
|
// 发送消息.
|
|
|
if (substr($message['from_id'], 0, 2) === 'KF') {
|
|
|
$data['userLastTime'] = time();
|
|
|
- Gateway::sendToClient($data['client_id'], json_encode($chat_message));
|
|
|
+ Gateway::sendToClient($data['client_id'], json_encode($chat_message, 256));
|
|
|
} else {
|
|
|
$data['serverLastTime'] = time();
|
|
|
- Gateway::sendToClient($data['kf_client_id'], json_encode($chat_message));
|
|
|
+ Gateway::sendToClient($data['kf_client_id'], json_encode($chat_message, 256));
|
|
|
}
|
|
|
// 保存修改后的工单信息.
|
|
|
- self::$redis->HSET('SERVICELOG', $message['conversationId'], $data);
|
|
|
+ self::$redis->HSET('SERVICELOG', $message['conversationId'], json_encode($data,256));
|
|
|
|
|
|
// 聊天信息入库
|
|
|
$insertChatData = [
|
|
|
- 'from_id' => $message['data']['from_id'],
|
|
|
- 'from_name' => $message['data']['from_name'],
|
|
|
- 'to_id' => $message['data']['to_id'],
|
|
|
- 'to_name' => $message['data']['to_name'],
|
|
|
- 'content' => $message['data']['content'],
|
|
|
- 'servicelog_id' => $message['data']['conversationId'],
|
|
|
+ 'from_id' => $message['from_id'],
|
|
|
+ 'from_name' => $message['from_name'],
|
|
|
+ 'to_id' => $message['to_id'],
|
|
|
+ 'to_name' => $message['to_name'],
|
|
|
+ 'content' => $message['content'],
|
|
|
+ 'servicelog_id' => $message['conversationId'],
|
|
|
'time_line' => time()
|
|
|
];
|
|
|
self::$db->insert('ws_chat_log')->cols($insertChatData)->query();
|
|
|
@@ -647,31 +651,66 @@ class Events
|
|
|
* tips: 当服务端主动退出的时候,会出现 exit status 9.原因是:服务端主动断开之后,连接的客户端会走这个方法,而短时间内进程
|
|
|
* 需要处理这多的逻辑,又有cas操作,导致进程退出会超时,然后会被内核杀死,从而报出错误 9.实际对真正的业务没有任何的影响。
|
|
|
*/
|
|
|
- public static function serverClose($servicelogId)
|
|
|
+ public static function serverClose($servicelogId, $closeBy=0)
|
|
|
{
|
|
|
// 获取当前工单数据.
|
|
|
$data = json_decode(self::$redis->HGET('SERVICELOG', $servicelogId), true);
|
|
|
+ if (empty($data)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
// 获取当前工单数据.
|
|
|
$kfInfo = json_decode(self::$redis->HGET('KFINFO', 'KF' . $data['kf_id']), true);
|
|
|
// 删除当前工单.
|
|
|
- //self::$redis->hdel('SERVICELOG', $servicelogId);
|
|
|
+ self::$redis->hdel('SERVICELOG', $servicelogId);
|
|
|
// 当前服务客服删除当前人员.
|
|
|
$kfUserList = self::ArrayDataopt($kfInfo['user_info'], $data['client_id'], 0);
|
|
|
-
|
|
|
- return;
|
|
|
-
|
|
|
- if (isset($kfInfo)) {
|
|
|
- print_r([$kfInfo, $servicelogId]);
|
|
|
- die;
|
|
|
- }
|
|
|
+ // 删除当前人员信息.
|
|
|
+ self::$redis->hdel('USERINFO', $data['user_id']);
|
|
|
// 当前客服所接待人员.
|
|
|
$kfInfo['user_info'] = $kfUserList;
|
|
|
$kfInfo['task'] = count($kfUserList);
|
|
|
// 存入客服信息.
|
|
|
- $redis->HSET('KFINFO', 'KF' . $data['kf_id'], $kfInfo);
|
|
|
+ self::$redis->HSET('KFINFO', 'KF' . $data['kf_id'], json_encode($kfInfo, 256));
|
|
|
+ // 发送消息给用户.
|
|
|
+ $chat_message = [
|
|
|
+ 'message_type' => 'closeBysever',
|
|
|
+ 'data' => [
|
|
|
+ 'content' => '客服停止了该会话',
|
|
|
+ 'time' => date('H:i'),
|
|
|
+ ]
|
|
|
+ ];
|
|
|
+ Gateway::sendToClient($data['client_id'], json_encode($chat_message, 256));
|
|
|
+ // 关闭用户连接.
|
|
|
+ Gateway::closeClient($data['client_id']);
|
|
|
+ // 发送消息给客服.
|
|
|
+ $del_message = [
|
|
|
+ 'message_type' => 'delUser',
|
|
|
+ 'data' => [
|
|
|
+ 'id' => $data['user_id']
|
|
|
+ ]
|
|
|
+ ];
|
|
|
+ Gateway::sendToClient($data['kf_client_id'], json_encode($del_message, 256));
|
|
|
+ // 查询工单会话总数.
|
|
|
+ $chatCount = self::$db->select('count(*) as count')->from('ws_chat_log')->where("servicelog_id=$servicelogId")->row();print_r($chatCount);
|
|
|
// 将数据存入数据库.
|
|
|
-
|
|
|
-
|
|
|
+ $updateServiceLogData = [
|
|
|
+ 'status' => 2,
|
|
|
+ 'evaluate_id' => isset($data['evaluate_id'])?$data['evaluate_id']:0,
|
|
|
+ 'evaluate_content' => isset($data['evaluate_content'])?$data['evaluate_content']:'',
|
|
|
+ 'servicelog_close_type' => $closeBy,
|
|
|
+ 'end_time' => time(),
|
|
|
+ ];
|
|
|
+ $updataAlarmData = [
|
|
|
+ 'alarm_userSensitive' => $data['alarm_userSensitive'],
|
|
|
+ 'alarm_serverSensitive' => $data['alarm_serverSensitive'],
|
|
|
+ 'alarm_corresponding' => $data['alarm_corresponding'],
|
|
|
+ 'alarm_cvtOvertime' => time()-$data['start_time'],
|
|
|
+ 'alarm_respond' => $data['alarm_respond'],
|
|
|
+ 'alarm_lineTime' => $data['start_time']-$data['intime'],
|
|
|
+ 'alarm_count' => $chatCount['count'],
|
|
|
+ ];
|
|
|
+ self::$db->update('ws_service_log')->cols($updateServiceLogData)->where("servicelog_id=$servicelogId")->query();
|
|
|
+ self::$db->update('ws_alarm')->cols($updataAlarmData)->where("servicelog_id=$servicelogId")->query();
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -1150,7 +1189,7 @@ class Events
|
|
|
$data = json_decode($v, true);
|
|
|
if (!isset($data['userLastTime'])) {
|
|
|
if ($data['start_time'] <= $unoperated) {
|
|
|
- self::serverClose($k);
|
|
|
+ self::serverClose($k, 1);
|
|
|
// 如果小于设定时间前一分钟则给出提示.
|
|
|
} elseif ($data['start_time'] <= $setUnoperated) {
|
|
|
$chat_message = [
|
|
|
@@ -1163,7 +1202,7 @@ class Events
|
|
|
}
|
|
|
// 双方静默超时.
|
|
|
} elseif ($data['userLastTime'] <= $overtime && $data['serverLastTime'] <= $overtime) {
|
|
|
- self::serverClose($k);
|
|
|
+ self::serverClose($k, 2);
|
|
|
// 如果小于设定时间前一分钟则给出提示.
|
|
|
} elseif ($data['userLastTime'] <= $setOvertime && $data['serverLastTime'] <= $setOvertime) {
|
|
|
$chat_message = [
|