|
@@ -176,7 +176,7 @@ class Events
|
|
|
break;
|
|
break;
|
|
|
// 客服关闭会话.
|
|
// 客服关闭会话.
|
|
|
case 'kfCloseUser':
|
|
case 'kfCloseUser':
|
|
|
- self::serverClose($message['data']['conversationId'], 3);
|
|
|
|
|
|
|
+ self::serverClose($message['data']['conversationId'], $message['data']['type']);
|
|
|
break;
|
|
break;
|
|
|
// 客服更改状态.
|
|
// 客服更改状态.
|
|
|
case 'kfOnline':
|
|
case 'kfOnline':
|
|
@@ -356,12 +356,6 @@ class Events
|
|
|
self::writeLogKfStatus($userId, $status);
|
|
self::writeLogKfStatus($userId, $status);
|
|
|
Gateway::sendToCurrentClient(json_encode(['message_type' => 'cgstatus', 'data' => ['new_status' => $status, 'old_status' => $oldstatus]]));
|
|
Gateway::sendToCurrentClient(json_encode(['message_type' => 'cgstatus', 'data' => ['new_status' => $status, 'old_status' => $oldstatus]]));
|
|
|
|
|
|
|
|
- $flag = self::$redis->hget(self::KFRELONINFLAG, $userId);
|
|
|
|
|
- if (!empty($flag)) {
|
|
|
|
|
- self::kfonlilneRework($client_id, $userId);
|
|
|
|
|
- self::$redis->hdel(self::KFRELONINFLAG, $userId);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -448,11 +442,25 @@ class Events
|
|
|
];
|
|
];
|
|
|
self::MySendMsg($client_id, json_encode($chat_message, 256));
|
|
self::MySendMsg($client_id, json_encode($chat_message, 256));
|
|
|
unset($chat_message);
|
|
unset($chat_message);
|
|
|
- self::writeLogKfStatus($message['uid'], 2);
|
|
|
|
|
|
|
+ self::KFStatusCg($client_id, ['data' => ['uid' => $uid, 'status' => 1]]);
|
|
|
|
|
+
|
|
|
|
|
+ self::SendKFHistoryRecord($client_id, $uid);
|
|
|
|
|
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
+ //客服掉线后 历史聊天记录
|
|
|
|
|
+ private static function SendKFHistoryRecord($client_id, $userId)
|
|
|
|
|
+ {
|
|
|
|
|
+ $flag = self::$redis->hget(self::KFRELONINFLAG, $userId);
|
|
|
|
|
+ if (!empty($flag)) {
|
|
|
|
|
+ self::kfonlilneRework($client_id, $userId);
|
|
|
|
|
+ self::$redis->hdel(self::KFRELONINFLAG, $userId);
|
|
|
|
|
+ }
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
//客服上线重新处理下旧的没完成的工单信息
|
|
//客服上线重新处理下旧的没完成的工单信息
|
|
|
private static function kfonlilneRework($clientid, $kfuid)
|
|
private static function kfonlilneRework($clientid, $kfuid)
|
|
|
{
|
|
{
|
|
@@ -898,20 +906,24 @@ class Events
|
|
|
//否则按先到后到以及客服最大服务数限制
|
|
//否则按先到后到以及客服最大服务数限制
|
|
|
|
|
|
|
|
if ($last) {
|
|
if ($last) {
|
|
|
- //self::$redis->hdel(self::USERLIST, $uid);
|
|
|
|
|
|
|
+ $userInfo = json_decode(self::$redis->hget(self::USERINFOKEY, $uid), true);
|
|
|
self::BeginOldTalk(self::getkfuid($last['kf_id']), $uid, $last['group_id'], $last['servicelog_id']);
|
|
self::BeginOldTalk(self::getkfuid($last['kf_id']), $uid, $last['group_id'], $last['servicelog_id']);
|
|
|
-
|
|
|
|
|
- // 查询工单历史会话.
|
|
|
|
|
- $serviceid = $last['servicelog_id'];
|
|
|
|
|
- $chatLog = self::$db->query("SELECT * FROM `ws_chat_log` where `servicelog_id`= '$serviceid' order by `time_line`");
|
|
|
|
|
- $toOld_message = [
|
|
|
|
|
- 'message_type' => 'toOld',
|
|
|
|
|
- 'data' => [
|
|
|
|
|
- 'chatLog' => $chatLog ?? [],
|
|
|
|
|
- 'content' => '接入至未结束的会话'
|
|
|
|
|
- ]
|
|
|
|
|
- ];
|
|
|
|
|
- Gateway::sendToCurrentClient(json_encode($toOld_message, 256));
|
|
|
|
|
|
|
+ print_r([$client_id,$userInfo['client_id']]);
|
|
|
|
|
+ if ($client_id == $userInfo['client_id']) {
|
|
|
|
|
+ // 查询工单历史会话.
|
|
|
|
|
+ $serviceid = $last['servicelog_id'];
|
|
|
|
|
+ $chatLog = self::$db->query("SELECT * FROM `ws_chat_log` where `servicelog_id`= '$serviceid' order by `time_line`");
|
|
|
|
|
+ $toOld_message = [
|
|
|
|
|
+ 'message_type' => 'toOld',
|
|
|
|
|
+ 'data' => [
|
|
|
|
|
+ 'chatLog' => $chatLog ?? [],
|
|
|
|
|
+ 'content' => '接入至未结束的会话',
|
|
|
|
|
+ 'serviceid' => $serviceid,
|
|
|
|
|
+ 'uid' => $uid
|
|
|
|
|
+ ]
|
|
|
|
|
+ ];
|
|
|
|
|
+ Gateway::sendToCurrentClient(json_encode($toOld_message, 256));
|
|
|
|
|
+ }
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -1077,6 +1089,7 @@ class Events
|
|
|
'data' => [
|
|
'data' => [
|
|
|
'user_info' => $userInfo,
|
|
'user_info' => $userInfo,
|
|
|
'conversationId' => $serviceid,
|
|
'conversationId' => $serviceid,
|
|
|
|
|
+ 'history' => [],
|
|
|
]
|
|
]
|
|
|
];
|
|
];
|
|
|
self::MySendMsg($kfinfo['client_id'], json_encode($noticeKf, 256));
|
|
self::MySendMsg($kfinfo['client_id'], json_encode($noticeKf, 256));
|
|
@@ -1095,7 +1108,7 @@ class Events
|
|
|
$serviceid = intval($serviceid);
|
|
$serviceid = intval($serviceid);
|
|
|
$userInfo = json_decode(self::$redis->hget(self::USERINFOKEY, $uid), true);
|
|
$userInfo = json_decode(self::$redis->hget(self::USERINFOKEY, $uid), true);
|
|
|
$kfinfo = json_decode(self::$redis->hget(self::KFINFOKEY, $kfuid), true);
|
|
$kfinfo = json_decode(self::$redis->hget(self::KFINFOKEY, $kfuid), true);
|
|
|
- if (empty($userInfo) || empty($kfinfo)) {
|
|
|
|
|
|
|
+ if (empty($userInfo)) {
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|
|
|
// 获取旧工单信息.
|
|
// 获取旧工单信息.
|
|
@@ -1242,12 +1255,26 @@ class Events
|
|
|
|
|
|
|
|
|
|
|
|
|
//找到用户是否有一条未关闭的会话
|
|
//找到用户是否有一条未关闭的会话
|
|
|
- private static function UserHasOldTalk($uid)
|
|
|
|
|
|
|
+ private static function UserHasOldTalk($uid, $database = 0)
|
|
|
{
|
|
{
|
|
|
- $uid = intval($uid);
|
|
|
|
|
- $start_time = time() - 86400;
|
|
|
|
|
- $ret = self::$db->select('*')->from('ws_service_log')->where("start_time>=$start_time and user_id=$uid and status!=2 ")->orderByDESC(['servicelog_id'])->row();
|
|
|
|
|
- return $ret;
|
|
|
|
|
|
|
+ if ($database) {
|
|
|
|
|
+ $uid = intval($uid);
|
|
|
|
|
+ $start_time = time() - 86400;
|
|
|
|
|
+ $ret = self::$db->select('*')->from('ws_service_log')->where("start_time>=$start_time and user_id=$uid and status!=2 ")->orderByDESC(['servicelog_id'])->row();
|
|
|
|
|
+ return $ret;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ $all = self::$redis->hgetall(self::SERVICELOG);
|
|
|
|
|
+ if (empty($all)) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ foreach ($all as $val) {
|
|
|
|
|
+ $tmp = json_decode($val, true);
|
|
|
|
|
+ if ($tmp && $tmp['user_id'] == $uid) {
|
|
|
|
|
+ return $tmp;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return false;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|