|
@@ -361,18 +361,114 @@ class Events
|
|
|
self::serverClose($client['0']);
|
|
self::serverClose($client['0']);
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|
|
|
|
|
+ case 'changeOtherhKeFu';
|
|
|
|
|
+ self::changeOtherhKeFu($client_id, $message);
|
|
|
|
|
+ break;
|
|
|
// default:
|
|
// default:
|
|
|
// Gateway::closeClient($client_id);
|
|
// Gateway::closeClient($client_id);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
+ //客户工单内部组转接
|
|
|
|
|
+ public static function changeOtherhKeFu($client_id, $message)
|
|
|
|
|
+ {
|
|
|
|
|
+ $groupid = isset($message['group']) ? intval($message['group']) : 0;
|
|
|
|
|
+ $toukfid = isset($message['toukfuid']) ? intval($message['toukfuid']) : 0;
|
|
|
|
|
+ $fromkfuid = isset($message['fromkfuid']) ? $message['fromkfuid'] : 0;
|
|
|
|
|
+ $uid = isset($message['uid']) ? $message['uid'] : 0;
|
|
|
|
|
+ $word = isset($message['word']) ? $message['word'] : '';
|
|
|
|
|
+ if (empty($groupid) || empty($toukfid) || empty($fromkfuid) || empty($uid) || empty($word) || ($toukfid == $fromkfuid)) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ if (!Gateway::isUidOnline($toukfid) || !Gateway::isUidOnline($uid)) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ $tokfidclientid = Gateway::getClientIdByUid($toukfid);
|
|
|
|
|
+ $tokfidclientid = $tokfidclientid['0'];
|
|
|
|
|
+ $uidclientid = Gateway::getClientIdByUid($uid);
|
|
|
|
|
+ $uidclientid = $uidclientid['0'];
|
|
|
|
|
+
|
|
|
|
|
+ $kfList = $kfList_new = self::$global->kfList;
|
|
|
|
|
+ $userToKf = $userToKf_new = self::$global->userToKf;
|
|
|
|
|
+
|
|
|
|
|
+ if (!isset($kfList[$groupid]) || !isset($kfList[$groupid][$toukfid]) || !isset($kfList[$groupid][$fromkfuid])) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ foreach ($kfList[$groupid] as $key => $val) {
|
|
|
|
|
+ if ($key == $fromkfuid) {
|
|
|
|
|
+ $kfList_new[$groupid][$fromkfuid]['task']--;
|
|
|
|
|
+ foreach ($kfList[$groupid][$key]['user_info'] as $skey => $sval) {
|
|
|
|
|
+ if ($sval == $uidclientid) {
|
|
|
|
|
+ unset($kfList_new[$groupid][$key]['user_info'][$skey]);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if ($key == $toukfid) {
|
|
|
|
|
+ $kfList_new[$groupid][$toukfid]['task']++;
|
|
|
|
|
+ array_push($kfList_new[$groupid][$key]['user_info'], $uidclientid);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ do {
|
|
|
|
|
+ } while (!self::$global->cas('kfList', $kfList, $kfList_new));
|
|
|
|
|
+
|
|
|
|
|
+ if (isset($userToKf[$uid])) {
|
|
|
|
|
+ $userToKf_new[$uid]['1'] = $toukfid;
|
|
|
|
|
+ }
|
|
|
|
|
+ do {
|
|
|
|
|
+ } while (!self::$global->cas('userToKf', $userToKf, $userToKf_new));
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ /////////取消原有会话,开启新会话
|
|
|
|
|
+ $histarttimelimit = time() - 3600*24 ;
|
|
|
|
|
+ $bindval = ['user_id'=>$uid,'kf_id'=>intval(trim($toukfid,'KF')),'histime'=>$histarttimelimit] ;
|
|
|
|
|
+ $oldlog = self::$db->select('*')->from('ws_service_log')->where('user_id= :user_id and client_id=:client_id and kf_id=:kf_id and status=2 and start_time>=:histime ' )->bindValues($bindval)->row();
|
|
|
|
|
+ if (!$oldlog){ return false; }
|
|
|
|
|
+ self::$db->update('ws_service_log')->cols(['status'=>2,'endtime'=>time()])->where('servicelog_id='.$oldlog['servicelog_id'])->query();
|
|
|
|
|
+ unset($oldlog['servicelog_id']);
|
|
|
|
|
+ $oldlog = array_merge($oldlog,['kf_id'=>intval(trim($toukfid,'KF')),'start_time'=>time(),'end_time'=>0,'status'=>1,'evaluate_id'=>0]);
|
|
|
|
|
+ $new_id = self::$db->insert('ws_service_log')->cols($oldlog)->query();
|
|
|
|
|
+ if (!$new_id){
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ ///通知消息发送--------------
|
|
|
|
|
+ // 通知会员发送信息绑定客服的id
|
|
|
|
|
+ $noticeUser = [
|
|
|
|
|
+ 'message_type' => 'connect',
|
|
|
|
|
+ 'data' => [
|
|
|
|
|
+ 'kf_id' => $toukfid,
|
|
|
|
|
+ 'kf_name' => Gateway::getSession($toukfid)['name'],
|
|
|
|
|
+ ]
|
|
|
|
|
+ ];
|
|
|
|
|
+ Gateway::sendToClient($uidclientid, json_encode($noticeUser, 256));
|
|
|
|
|
+ unset($noticeUser);
|
|
|
|
|
+
|
|
|
|
|
+ // 通知客服端绑定会员的信息
|
|
|
|
|
+ $noticeKf = [
|
|
|
|
|
+ 'message_type' => 'connect',
|
|
|
|
|
+ 'data' => [
|
|
|
|
|
+ 'user_info' => $uidclientid
|
|
|
|
|
+ ]
|
|
|
|
|
+ ];
|
|
|
|
|
+ Gateway::sendToClient($tokfidclientid, json_encode($noticeKf, 256));
|
|
|
|
|
+ unset($noticeKf);
|
|
|
|
|
+ //回转接人,转接成功
|
|
|
|
|
+ Gateway::sendToCurrentClient(json_encode(['message_type'=>'trunconnect','data'=>['status'=>1],256]));
|
|
|
|
|
+
|
|
|
|
|
+ return ;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
//客服接入sock,及初始化
|
|
//客服接入sock,及初始化
|
|
|
- public static function Kfinit($client_id, $message){
|
|
|
|
|
|
|
+ public static function Kfinit($client_id, $message)
|
|
|
|
|
+ {
|
|
|
$kfList = self::$global->kfList;
|
|
$kfList = self::$global->kfList;
|
|
|
|
|
|
|
|
//客服登陆验证 不符合的直接断掉
|
|
//客服登陆验证 不符合的直接断掉
|
|
|
- $logcheck = true ; //开发时使用
|
|
|
|
|
|
|
+ $logcheck = true; //开发时使用
|
|
|
//$logcheck = self::KfloginChedk($client_id, $message);
|
|
//$logcheck = self::KfloginChedk($client_id, $message);
|
|
|
if (!$logcheck) {
|
|
if (!$logcheck) {
|
|
|
Gateway::closeCurrentClient();
|
|
Gateway::closeCurrentClient();
|
|
@@ -408,6 +504,7 @@ class Events
|
|
|
$_SESSION['group'] = $message['group'];
|
|
$_SESSION['group'] = $message['group'];
|
|
|
$_SESSION['iskefu'] = 1;
|
|
$_SESSION['iskefu'] = 1;
|
|
|
$_SESSION['uid'] = $message['uid'];
|
|
$_SESSION['uid'] = $message['uid'];
|
|
|
|
|
+ $_SESSION['name'] = $message['name'];
|
|
|
|
|
|
|
|
// TODO 尝试拉取用户来服务 [二期规划]
|
|
// TODO 尝试拉取用户来服务 [二期规划]
|
|
|
|
|
|
|
@@ -426,7 +523,7 @@ class Events
|
|
|
$kfid = intval(substr($uid, 2));
|
|
$kfid = intval(substr($uid, 2));
|
|
|
$ret = self::$db->select('*')->from('ws_users')->where('id= :id and token=:token and expire_time>=:expire_time')->bindValues(array('id' => $kfid, 'token' => $token, 'expire_time' => $expire_time_vali))->row();
|
|
$ret = self::$db->select('*')->from('ws_users')->where('id= :id and token=:token and expire_time>=:expire_time')->bindValues(array('id' => $kfid, 'token' => $token, 'expire_time' => $expire_time_vali))->row();
|
|
|
if ($ret) {
|
|
if ($ret) {
|
|
|
- self::$db->update('ws_users')->cols(array('online_status'=>1,'online_connectid'=>$client))->where('id='.$kfid)->query();
|
|
|
|
|
|
|
+ self::$db->update('ws_users')->cols(array('online_status' => 1, 'online_connectid' => $client))->where('id=' . $kfid)->query();
|
|
|
return $ret;
|
|
return $ret;
|
|
|
}
|
|
}
|
|
|
return false;
|
|
return false;
|
|
@@ -546,8 +643,8 @@ class Events
|
|
|
}
|
|
}
|
|
|
unset($kefuinfo_old_new[$group][$uid]);
|
|
unset($kefuinfo_old_new[$group][$uid]);
|
|
|
|
|
|
|
|
- $kfid = intval(substr($uid,2));
|
|
|
|
|
- self::$db->update('ws_users')->cols(array('online_status'=>0,'online_connectid'=>''))->where('id='.$kfid)->query();
|
|
|
|
|
|
|
+ $kfid = intval(substr($uid, 2));
|
|
|
|
|
+ self::$db->update('ws_users')->cols(array('online_status' => 0, 'online_connectid' => ''))->where('id=' . $kfid)->query();
|
|
|
|
|
|
|
|
do {
|
|
do {
|
|
|
} while (!self::$global->cas('kfList', $kefuinfo_old, $kefuinfo_old_new));
|
|
} while (!self::$global->cas('kfList', $kefuinfo_old, $kefuinfo_old_new));
|