|
|
@@ -151,6 +151,10 @@ class Events
|
|
|
$token = $message['token'];
|
|
|
self::adminInit($client_id, $token);
|
|
|
break;
|
|
|
+ //客服主动关闭
|
|
|
+ case 'kfzdclose':
|
|
|
+ self::kfzdclose($client_id, $message['data']);
|
|
|
+ break;
|
|
|
// 客服初始化
|
|
|
case 'init':
|
|
|
$data = $message['data'];
|
|
|
@@ -233,8 +237,16 @@ class Events
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
- //客服获取自己的用户列表
|
|
|
- public static function kfusersmaps($kfuid, $clientid)
|
|
|
+ //客服主动关闭
|
|
|
+ public static function kfzdclose($client_id, $datas)
|
|
|
+ {
|
|
|
+ Gateway::closeClient($client_id);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+//客服获取自己的用户列表
|
|
|
+ public
|
|
|
+ static function kfusersmaps($kfuid, $clientid)
|
|
|
{
|
|
|
$kfuid = self::getkfuid($kfuid);
|
|
|
if (empty($kfuid)) {
|
|
|
@@ -258,8 +270,9 @@ class Events
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
- //客服信息更新
|
|
|
- public static function kfupdateinfo($client_id, $message)
|
|
|
+//客服信息更新
|
|
|
+ public
|
|
|
+ static function kfupdateinfo($client_id, $message)
|
|
|
{
|
|
|
$kfid = intval(self::getkfid($message['kfuid']));
|
|
|
$kfuid = self::getkfuid($kfid);
|
|
|
@@ -286,8 +299,9 @@ class Events
|
|
|
|
|
|
}
|
|
|
|
|
|
- //将某个客服踢下线 (只能是管理员连上来的socket才可以操作)
|
|
|
- public static function tickkf($client_id, $messag)
|
|
|
+//将某个客服踢下线 (只能是管理员连上来的socket才可以操作)
|
|
|
+ public
|
|
|
+ static function tickkf($client_id, $messag)
|
|
|
{
|
|
|
|
|
|
$kfuid = self::getkfuid($messag['kfuid']);
|
|
|
@@ -308,13 +322,14 @@ class Events
|
|
|
}
|
|
|
|
|
|
|
|
|
- //看一个连接是否来自管理员的
|
|
|
- public static function isAdmin($client_id)
|
|
|
+//看一个连接是否来自管理员的
|
|
|
+ public
|
|
|
+ static function isAdmin($client_id)
|
|
|
{
|
|
|
return self::$redis->sismember(self::ADMINLIST, $client_id);
|
|
|
}
|
|
|
|
|
|
- //更新用户缓存信息
|
|
|
+//更新用户缓存信息
|
|
|
// public static function prohibitServer($serviceLogId)
|
|
|
// {
|
|
|
// $data = json_decode(self::$redis->HGET('SERVICELOG', $serviceLogId), true);
|
|
|
@@ -331,15 +346,17 @@ class Events
|
|
|
// }
|
|
|
// }
|
|
|
|
|
|
- //更新用户缓存信息
|
|
|
- public static function updateusercache($client_id, $dataArray)
|
|
|
+//更新用户缓存信息
|
|
|
+ public
|
|
|
+ static function updateusercache($client_id, $dataArray)
|
|
|
{
|
|
|
$uid = intval($dataArray['userid']);
|
|
|
self::getUserInfoCache($uid, 180, 0);
|
|
|
}
|
|
|
|
|
|
- //加入工单群组(未完)
|
|
|
- public static function joinServiceGroup($client_id, $message)
|
|
|
+//加入工单群组(未完)
|
|
|
+ public
|
|
|
+ static function joinServiceGroup($client_id, $message)
|
|
|
{
|
|
|
$uid = $message['uid'];
|
|
|
$serviceLogId = $message['conversationId'];
|
|
|
@@ -358,14 +375,16 @@ class Events
|
|
|
Gateway::joinGroup($client_id, $serviceLogId);
|
|
|
}
|
|
|
|
|
|
- //强制更新缓存信息
|
|
|
- public static function updatecache($client_id, $dataArray)
|
|
|
+//强制更新缓存信息
|
|
|
+ public
|
|
|
+ static function updatecache($client_id, $dataArray)
|
|
|
{
|
|
|
self::upsystemconfig();
|
|
|
}
|
|
|
|
|
|
- //用户取消排队
|
|
|
- public static function cancelqueue($messageArray)
|
|
|
+//用户取消排队
|
|
|
+ public
|
|
|
+ static function cancelqueue($messageArray)
|
|
|
{
|
|
|
$uid = intval($messageArray['uid']);
|
|
|
if (empty($uid)) {
|
|
|
@@ -387,8 +406,9 @@ class Events
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- // 弹出评价.
|
|
|
- public static function getEvaluate($message)
|
|
|
+// 弹出评价.
|
|
|
+ public
|
|
|
+ static function getEvaluate($message)
|
|
|
{
|
|
|
// 获取当前会话工单.
|
|
|
$data = json_decode(self::$redis->HGET('SERVICELOG', $message['conversationId']), true);
|
|
|
@@ -404,8 +424,9 @@ class Events
|
|
|
Gateway::sendToClient($data['client_id'], json_encode($chat_message, 256));
|
|
|
}
|
|
|
|
|
|
- //客服聊天
|
|
|
- public static function chatMessage($message)
|
|
|
+//客服聊天
|
|
|
+ public
|
|
|
+ static function chatMessage($message)
|
|
|
{
|
|
|
// 获取当前会话工单.
|
|
|
$data = json_decode(self::$redis->HGET('SERVICELOG', $message['conversationId']), true);
|
|
|
@@ -471,16 +492,18 @@ class Events
|
|
|
self::$db->insert('ws_chat_log')->cols($insertChatData)->query();
|
|
|
}
|
|
|
|
|
|
- //得到一个用户详细信息
|
|
|
- public static function kfgetuserinfo($clientid, $id)
|
|
|
+//得到一个用户详细信息
|
|
|
+ public
|
|
|
+ static function kfgetuserinfo($clientid, $id)
|
|
|
{
|
|
|
$ret = self::$db->select('*')->from('ws_account')->where('id=:id')->bindValues(['id' => $id])->row();
|
|
|
Gateway::sendToClient($clientid, json_encode(['message_type' => 'userdetailinfo', 'data' => $ret]));
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- //获取在线客服列表
|
|
|
- public static function getkfonlines()
|
|
|
+//获取在线客服列表
|
|
|
+ public
|
|
|
+ static function getkfonlines()
|
|
|
{
|
|
|
$return = [
|
|
|
'message_type' => 'onlinekfs',
|
|
|
@@ -514,7 +537,8 @@ class Events
|
|
|
}
|
|
|
|
|
|
|
|
|
- public static function KFStatusCg($client_id, $message)
|
|
|
+ public
|
|
|
+ static function KFStatusCg($client_id, $message)
|
|
|
{
|
|
|
if (!isset($_SESSION['iskefu']) || $_SESSION['iskefu'] != 1) {
|
|
|
return;
|
|
|
@@ -546,15 +570,17 @@ class Events
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- //获取某个用户全部信息
|
|
|
- public static function getClientIndo($id)
|
|
|
+//获取某个用户全部信息
|
|
|
+ public
|
|
|
+ static function getClientIndo($id)
|
|
|
{
|
|
|
$ret = self::$db->from('ws_accounts')->select("*")->where(['id' => $id])->row();
|
|
|
return $ret;
|
|
|
}
|
|
|
|
|
|
- //客服接入sock,及初始化
|
|
|
- public static function Kfinit($client_id, $message)
|
|
|
+//客服接入sock,及初始化
|
|
|
+ public
|
|
|
+ static function Kfinit($client_id, $message)
|
|
|
{
|
|
|
$uid = self::getPars($message, 'uid');
|
|
|
$group = intval(self::getPars($message, 'group', 0));
|
|
|
@@ -623,6 +649,7 @@ class Events
|
|
|
'task' => 0,
|
|
|
'intime' => time(),
|
|
|
'signature' => $kfinfo['signature'],
|
|
|
+ 'kf_token' => $kfinfo['token'],
|
|
|
'status' => 2, // 1为在线(接收分配、接收消息)2为隐身(不接收分配、只接收消息)3、休息
|
|
|
'user_info' => [], //在会话的用户cid key为clientid ,值为工单号 ///////弃用 改为hash数据了
|
|
|
];
|
|
|
@@ -637,6 +664,7 @@ class Events
|
|
|
$_SESSION['uid'] = $message['uid'];
|
|
|
$_SESSION['name'] = $message['name'];
|
|
|
$_SESSION['client_id'] = $client_id;
|
|
|
+ $_SESSION['kf_token'] = $kfinfo['token'];
|
|
|
|
|
|
Gateway::joinGroup($client_id, 'group_' . $message['group']);
|
|
|
|
|
|
@@ -657,8 +685,9 @@ class Events
|
|
|
}
|
|
|
|
|
|
|
|
|
- //连接信息里保存用户,以便观察
|
|
|
- private static function updateWebsockName($client_id, $uid)
|
|
|
+//连接信息里保存用户,以便观察
|
|
|
+ private
|
|
|
+ static function updateWebsockName($client_id, $uid)
|
|
|
{
|
|
|
$info = json_decode(self::$redis->hget(self::WEBSOCKALLUSER, $client_id), true);
|
|
|
if ($info) {
|
|
|
@@ -668,8 +697,9 @@ class Events
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
- //客服掉线后 历史聊天记录
|
|
|
- private static function SendKFHistoryRecord($client_id, $userId)
|
|
|
+//客服掉线后 历史聊天记录
|
|
|
+ private
|
|
|
+ static function SendKFHistoryRecord($client_id, $userId)
|
|
|
{
|
|
|
$flag = self::$redis->hget(self::KFRELONINFLAG, $userId);
|
|
|
if (!empty($flag)) {
|
|
|
@@ -679,8 +709,9 @@ class Events
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- //客服上线重新处理下旧的没完成的工单信息
|
|
|
- private static function kfonlilneRework($clientid, $kfuid)
|
|
|
+//客服上线重新处理下旧的没完成的工单信息
|
|
|
+ private
|
|
|
+ static function kfonlilneRework($clientid, $kfuid)
|
|
|
{
|
|
|
$oldService = self::$redis->hgetall(self::getKfServiceKey($kfuid));
|
|
|
|
|
|
@@ -703,7 +734,8 @@ class Events
|
|
|
* @param $client_id 服务ID
|
|
|
* @param $message 数据
|
|
|
*/
|
|
|
- public static function adminInit($client_id, $token)
|
|
|
+ public
|
|
|
+ static function adminInit($client_id, $token)
|
|
|
{
|
|
|
// 查询token是否存在.
|
|
|
$systemConfigData = self::$db->query("SELECT `id` FROM `ws_admins` where `token`= '$token'");
|
|
|
@@ -720,8 +752,9 @@ class Events
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- //客服登陆验证
|
|
|
- public static function KfloginCheck($client, $messageArray)
|
|
|
+//客服登陆验证
|
|
|
+ public
|
|
|
+ static function KfloginCheck($client, $messageArray)
|
|
|
{
|
|
|
$uid = isset($messageArray['uid']) ? $messageArray['uid'] : '';
|
|
|
$token = isset($messageArray['token']) ? $messageArray['token'] : '';
|
|
|
@@ -739,7 +772,8 @@ class Events
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- public static function getUserIPinfo($ip)
|
|
|
+ public
|
|
|
+ static function getUserIPinfo($ip)
|
|
|
{
|
|
|
$url = 'http://www.ip168.com/chxip/doGetIp.do?keyword=' . $ip;
|
|
|
$ret = file_get_contents($url);
|
|
|
@@ -764,8 +798,9 @@ class Events
|
|
|
return $defret;
|
|
|
}
|
|
|
|
|
|
- //用户发送邦定用户事件
|
|
|
- public static function userInitEnt($client_id, $message)
|
|
|
+//用户发送邦定用户事件
|
|
|
+ public
|
|
|
+ static function userInitEnt($client_id, $message)
|
|
|
{
|
|
|
$uid = intval($message['uid']);
|
|
|
$group = intval($message['group']);
|
|
|
@@ -876,7 +911,8 @@ class Events
|
|
|
* tips: 当服务端主动退出的时候,会出现 exit status 9.原因是:服务端主动断开之后,连接的客户端会走这个方法,而短时间内进程
|
|
|
* 需要处理这多的逻辑,又有cas操作,导致进程退出会超时,然后会被内核杀死,从而报出错误 9.实际对真正的业务没有任何的影响。
|
|
|
*/
|
|
|
- public static function onClose($client_id)
|
|
|
+ public
|
|
|
+ static function onClose($client_id)
|
|
|
{
|
|
|
self::$redis->hdel(self::WEBSOCKALLUSER, $client_id);
|
|
|
$isKefuoff = isset($_SESSION['iskefu']) ? $_SESSION['iskefu'] : 0;
|
|
|
@@ -901,8 +937,9 @@ class Events
|
|
|
}
|
|
|
|
|
|
|
|
|
- //客服掉线处理 第二版 系统调用,不能手动调用
|
|
|
- public static function serviceOfflineV2($client_id, $uid)
|
|
|
+//客服掉线处理 第二版 系统调用,不能手动调用
|
|
|
+ public
|
|
|
+ static function serviceOfflineV2($client_id, $uid)
|
|
|
{
|
|
|
$group = $_SESSION['group'];
|
|
|
$uinfo = self::$redis->hget(self::KFINFOKEY, $uid);
|
|
|
@@ -926,8 +963,9 @@ class Events
|
|
|
}
|
|
|
|
|
|
|
|
|
- //客服下线了 系统调用,不能手动调用
|
|
|
- public static function serviceOffline($client_id, $uid)
|
|
|
+//客服下线了 系统调用,不能手动调用
|
|
|
+ public
|
|
|
+ static function serviceOffline($client_id, $uid)
|
|
|
{
|
|
|
$group = $_SESSION['group'];
|
|
|
$uinfo = self::$redis->hget(self::KFINFOKEY, $uid);
|
|
|
@@ -965,8 +1003,9 @@ class Events
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
- //用户下线了 系统调用,不能手动调用
|
|
|
- public static function guestOffline($client_id, $uid)
|
|
|
+//用户下线了 系统调用,不能手动调用
|
|
|
+ public
|
|
|
+ static function guestOffline($client_id, $uid)
|
|
|
{
|
|
|
self::$redis->hset('loginTmp:' . $uid, 'uid', time());
|
|
|
self::$redis->expire('loginTmp:' . $uid, 3);
|
|
|
@@ -1022,7 +1061,8 @@ class Events
|
|
|
*
|
|
|
* tips: 未有$client_id的关闭
|
|
|
*/
|
|
|
- public static function closeUser($servicelog_id, $userId, $kf_id, $groupId)
|
|
|
+ public
|
|
|
+ static function closeUser($servicelog_id, $userId, $kf_id, $groupId)
|
|
|
{
|
|
|
|
|
|
}
|
|
|
@@ -1035,7 +1075,8 @@ class Events
|
|
|
* tips: 当服务端主动退出的时候,会出现 exit status 9.原因是:服务端主动断开之后,连接的客户端会走这个方法,而短时间内进程
|
|
|
* 需要处理这多的逻辑,又有cas操作,导致进程退出会超时,然后会被内核杀死,从而报出错误 9.实际对真正的业务没有任何的影响。
|
|
|
*/
|
|
|
- public static function serverClose($servicelogId, $closeBy = 0)
|
|
|
+ public
|
|
|
+ static function serverClose($servicelogId, $closeBy = 0)
|
|
|
{
|
|
|
// 获取当前工单数据.
|
|
|
$data = json_decode(self::$redis->HGET('SERVICELOG', $servicelogId), true);
|
|
|
@@ -1108,7 +1149,8 @@ class Events
|
|
|
* tips: 当服务端主动退出的时候,会出现 exit status 9.原因是:服务端主动断开之后,连接的客户端会走这个方法,而短时间内进程
|
|
|
* 需要处理这多的逻辑,又有cas操作,导致进程退出会超时,然后会被内核杀死,从而报出错误 9.实际对真正的业务没有任何的影响。
|
|
|
*/
|
|
|
- public static function insertServerLog($servicelogId, $closeBy = 0)
|
|
|
+ public
|
|
|
+ static function insertServerLog($servicelogId, $closeBy = 0)
|
|
|
{
|
|
|
// 获取当前工单数据.
|
|
|
$data = json_decode(self::$redis->HGET('SERVICELOG', $servicelogId), true);
|
|
|
@@ -1143,7 +1185,8 @@ class Events
|
|
|
* 有人退出
|
|
|
* @param $group
|
|
|
*/
|
|
|
- private static function userOfflineTask($group)
|
|
|
+ private
|
|
|
+ static function userOfflineTask($group)
|
|
|
{
|
|
|
|
|
|
}
|
|
|
@@ -1154,7 +1197,8 @@ class Events
|
|
|
* @param $group
|
|
|
* @param $uid
|
|
|
*/
|
|
|
- private static function userOnlineTask($group = 0, $uid = 0, $last = [], $client_id = '')
|
|
|
+ private
|
|
|
+ static function userOnlineTask($group = 0, $uid = 0, $last = [], $client_id = '')
|
|
|
{
|
|
|
|
|
|
if ($group && $uid) {
|
|
|
@@ -1239,8 +1283,9 @@ class Events
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- //踢掉某个组没有客服的用户
|
|
|
- private static function Kf_user_click($kfArrays, $userLIsts)
|
|
|
+//踢掉某个组没有客服的用户
|
|
|
+ private
|
|
|
+ static function Kf_user_click($kfArrays, $userLIsts)
|
|
|
{
|
|
|
foreach ($userLIsts as $group => $groupusers) {
|
|
|
$haskf = isset($kfArrays[$group]) ? 1 : 0;
|
|
|
@@ -1254,8 +1299,9 @@ class Events
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
- //开启一个会话
|
|
|
- private static function BeginTalk($kfuid, $uid, $group, $serviceid = 0, $userInfo = false, $isChangeKF = 0, $oldChatLog = [])
|
|
|
+//开启一个会话
|
|
|
+ private
|
|
|
+ static function BeginTalk($kfuid, $uid, $group, $serviceid = 0, $userInfo = false, $isChangeKF = 0, $oldChatLog = [])
|
|
|
{
|
|
|
|
|
|
$serviceid = intval($serviceid);
|
|
|
@@ -1370,8 +1416,9 @@ class Events
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- //连接至上一个会话
|
|
|
- private static function BeginOldTalk($kfuid, $uid, $group, $serviceid = 0, $userInfo = false)
|
|
|
+//连接至上一个会话
|
|
|
+ private
|
|
|
+ static function BeginOldTalk($kfuid, $uid, $group, $serviceid = 0, $userInfo = false)
|
|
|
{
|
|
|
|
|
|
$serviceid = intval($serviceid);
|
|
|
@@ -1461,8 +1508,9 @@ class Events
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- //获取工单最后20条聊天记录
|
|
|
- private static function getServerChagLog($sericeId, $limit = 20)
|
|
|
+//获取工单最后20条聊天记录
|
|
|
+ private
|
|
|
+ static function getServerChagLog($sericeId, $limit = 20)
|
|
|
{
|
|
|
$ret = self::$db->select('id,from_id,from_name,to_id,to_name,content,time_line')->from('ws_chat_log')->where('servicelog_id=:sid')->bindValues(array('sid' => $sericeId))->orderByDESC(['id'])->limit($limit)->query();
|
|
|
if ($ret) {
|
|
|
@@ -1475,8 +1523,9 @@ class Events
|
|
|
return [];
|
|
|
}
|
|
|
|
|
|
- //用户排队数据 按组
|
|
|
- private static function getUserListData()
|
|
|
+//用户排队数据 按组
|
|
|
+ private
|
|
|
+ static function getUserListData()
|
|
|
{
|
|
|
$alluser = self::$redis->hgetall(self::USERLIST);
|
|
|
if (empty($alluser)) {
|
|
|
@@ -1506,8 +1555,9 @@ class Events
|
|
|
return $allusergkarr;
|
|
|
}
|
|
|
|
|
|
- //找到可以接工单的客服 按组
|
|
|
- private static function getWorkKfData()
|
|
|
+//找到可以接工单的客服 按组
|
|
|
+ private
|
|
|
+ static function getWorkKfData()
|
|
|
{
|
|
|
$allkfs = self::$redis->hgetall(self::KFINFOKEY);
|
|
|
if (empty($allkfs)) {
|
|
|
@@ -1544,8 +1594,9 @@ class Events
|
|
|
}
|
|
|
|
|
|
|
|
|
- //找到用户是否有一条未关闭的会话
|
|
|
- private static function UserHasOldTalk($uid, $database = 0)
|
|
|
+//找到用户是否有一条未关闭的会话
|
|
|
+ private
|
|
|
+ static function UserHasOldTalk($uid, $database = 0)
|
|
|
{
|
|
|
if ($database) {
|
|
|
$uid = intval($uid);
|
|
|
@@ -1568,8 +1619,9 @@ class Events
|
|
|
}
|
|
|
|
|
|
|
|
|
- //今天排序累加
|
|
|
- private static function todayqueuelength()
|
|
|
+//今天排序累加
|
|
|
+ private
|
|
|
+ static function todayqueuelength()
|
|
|
{
|
|
|
$dtype = 'user.queue.day.length';
|
|
|
$today = date("Y-m-d");
|
|
|
@@ -1586,8 +1638,9 @@ class Events
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- //客服工单转单
|
|
|
- private static function servicetrutoother($type, $owen, $otherkfid, $serverid, $clientuid)
|
|
|
+//客服工单转单
|
|
|
+ private
|
|
|
+ static function servicetrutoother($type, $owen, $otherkfid, $serverid, $clientuid)
|
|
|
{
|
|
|
$owen = intval(substr($owen, 2));
|
|
|
$otherkfid = intval(substr($otherkfid, 2));
|
|
|
@@ -1609,7 +1662,8 @@ class Events
|
|
|
* @param $group
|
|
|
* @param $total
|
|
|
*/
|
|
|
- private static function assignmentTask($kfList, $userList, $group, $total, $uid = 0)
|
|
|
+ private
|
|
|
+ static function assignmentTask($kfList, $userList, $group, $total, $uid = 0)
|
|
|
{
|
|
|
|
|
|
}
|
|
|
@@ -1618,7 +1672,8 @@ class Events
|
|
|
* 获取最大的服务人数
|
|
|
* @return int
|
|
|
*/
|
|
|
- private static function getMaxServiceNum()
|
|
|
+ private
|
|
|
+ static function getMaxServiceNum()
|
|
|
{
|
|
|
$maxNumber = self::$db->query('select `max_service` from `ws_kf_config` where `id` = 1');
|
|
|
if (!empty($maxNumber)) {
|
|
|
@@ -1634,7 +1689,8 @@ class Events
|
|
|
* 将内存中的数据写入统计表
|
|
|
* @param int $flag
|
|
|
*/
|
|
|
- private static function writeLog($flag = 1)
|
|
|
+ private
|
|
|
+ static function writeLog($flag = 1)
|
|
|
{
|
|
|
// 上午 8点 到 22 点开始统计
|
|
|
if (date('H') < 8 || date('H') > 22) {
|
|
|
@@ -1685,7 +1741,8 @@ class Events
|
|
|
* @param $client_id 服务ID
|
|
|
* @param $message 数据
|
|
|
*/
|
|
|
- private static function toRobot($client_id, $message)
|
|
|
+ private
|
|
|
+ static function toRobot($client_id, $message)
|
|
|
{
|
|
|
$groups_id = $message['data']['groups_id'];
|
|
|
$robot_name = $message['data']['robot_name'];
|
|
|
@@ -1709,7 +1766,8 @@ class Events
|
|
|
* @param $client_id 服务ID
|
|
|
* @param $message 数据
|
|
|
*/
|
|
|
- private static function evaluate($message)
|
|
|
+ private
|
|
|
+ static function evaluate($message)
|
|
|
{
|
|
|
// 获取当前会话工单.
|
|
|
$data = json_decode(self::$redis->HGET('SERVICELOG', $message['conversationId']), true);
|
|
|
@@ -1730,8 +1788,9 @@ class Events
|
|
|
}
|
|
|
|
|
|
|
|
|
- //获取系统配置
|
|
|
- private static function upsystemconfig()
|
|
|
+//获取系统配置
|
|
|
+ private
|
|
|
+ static function upsystemconfig()
|
|
|
{
|
|
|
$allcont = [];
|
|
|
|
|
|
@@ -1791,7 +1850,8 @@ class Events
|
|
|
* @param $client_id 服务ID
|
|
|
* @param $message 数据
|
|
|
*/
|
|
|
- private static function overTime()
|
|
|
+ private
|
|
|
+ static function overTime()
|
|
|
{
|
|
|
// 查询对话时效设置.
|
|
|
$systemConfigData = self::$db->query("SELECT `systemconfig_data`,`systemconfig_enName`,`systemconfig_content` FROM `ws_systemconfig`");
|
|
|
@@ -1857,7 +1917,8 @@ class Events
|
|
|
* 系统监控
|
|
|
* @param $message 数据
|
|
|
*/
|
|
|
- private static function systemMonitoring($adminList)
|
|
|
+ private
|
|
|
+ static function systemMonitoring($adminList)
|
|
|
{
|
|
|
// 查询正进行的工单.
|
|
|
$serviceLog = self::$redis->hGetall('SERVICELOG');
|
|
|
@@ -1929,8 +1990,9 @@ class Events
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- //客户工单内部组转接
|
|
|
- public static function changeOtherhKeFu($client_id, $smessage)
|
|
|
+//客户工单内部组转接
|
|
|
+ public
|
|
|
+ static function changeOtherhKeFu($client_id, $smessage)
|
|
|
{
|
|
|
$message = $smessage['data'];
|
|
|
|
|
|
@@ -1999,8 +2061,9 @@ class Events
|
|
|
}
|
|
|
|
|
|
|
|
|
- //客服在线状态写组
|
|
|
- private static function writeLogKfStatus($kf, $status, $flag = 1)
|
|
|
+//客服在线状态写组
|
|
|
+ private
|
|
|
+ static function writeLogKfStatus($kf, $status, $flag = 1)
|
|
|
{
|
|
|
if ($flag == 1) {
|
|
|
$status = intval($status);
|
|
|
@@ -2018,7 +2081,8 @@ class Events
|
|
|
}
|
|
|
|
|
|
|
|
|
- public static function resetServiceLog($kfid = 0)
|
|
|
+ public
|
|
|
+ static function resetServiceLog($kfid = 0)
|
|
|
{
|
|
|
$t = time() - 24 * 3600 * 7;
|
|
|
$now = time();
|
|
|
@@ -2043,7 +2107,8 @@ class Events
|
|
|
|
|
|
}
|
|
|
|
|
|
- public static function onWorkerStop($businessWorker)
|
|
|
+ public
|
|
|
+ static function onWorkerStop($businessWorker)
|
|
|
{
|
|
|
if ($businessWorker->id == 1) {
|
|
|
self::resetServiceLog();
|
|
|
@@ -2051,20 +2116,23 @@ class Events
|
|
|
}
|
|
|
|
|
|
|
|
|
- //用户下线通知
|
|
|
- private static function userCloseNotice($client_id, $cuid, $group)
|
|
|
+//用户下线通知
|
|
|
+ private
|
|
|
+ static function userCloseNotice($client_id, $cuid, $group)
|
|
|
{
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
- //踢掉同一用户的旧用户
|
|
|
- private static function tickOlduser($uid)
|
|
|
+//踢掉同一用户的旧用户
|
|
|
+ private
|
|
|
+ static function tickOlduser($uid)
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
- private static function DebugOut($msg, $title = '', $type = 'info')
|
|
|
+ private
|
|
|
+ static function DebugOut($msg, $title = '', $type = 'info')
|
|
|
{
|
|
|
$config = self::$global->systemconfig;
|
|
|
if (!isset($config['isdebug']) || empty($config['isdebug']['systemconfig_data'])) {
|
|
|
@@ -2078,8 +2146,9 @@ class Events
|
|
|
}
|
|
|
|
|
|
|
|
|
- //定时器相关
|
|
|
- private static function TimerThing($worker)
|
|
|
+//定时器相关
|
|
|
+ private
|
|
|
+ static function TimerThing($worker)
|
|
|
{
|
|
|
|
|
|
// 当天的累积接入值
|
|
|
@@ -2226,19 +2295,22 @@ class Events
|
|
|
|
|
|
}
|
|
|
|
|
|
- //调试使用
|
|
|
- public static function mydebug($client_id, $message)
|
|
|
+//调试使用
|
|
|
+ public
|
|
|
+ static function mydebug($client_id, $message)
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
- public static function MySendMsg($clientId, $msg)
|
|
|
+ public
|
|
|
+ static function MySendMsg($clientId, $msg)
|
|
|
{
|
|
|
Gateway::sendToClient($clientId, $msg);
|
|
|
}
|
|
|
|
|
|
- //得到客服的UID字符值
|
|
|
- public static function getkfuid($uid)
|
|
|
+//得到客服的UID字符值
|
|
|
+ public
|
|
|
+ static function getkfuid($uid)
|
|
|
{
|
|
|
if (substr($uid, 0, 2) == 'KF') {
|
|
|
return $uid;
|
|
|
@@ -2247,8 +2319,9 @@ class Events
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- //得到客服的ID整数值
|
|
|
- public static function getkfid($id)
|
|
|
+//得到客服的ID整数值
|
|
|
+ public
|
|
|
+ static function getkfid($id)
|
|
|
{
|
|
|
if (strtolower(substr($id, 0, 2)) == 'kf') {
|
|
|
return intval(substr($id, 2));
|
|
|
@@ -2256,8 +2329,9 @@ class Events
|
|
|
return intval($id);
|
|
|
}
|
|
|
|
|
|
- //从数组中获取参数
|
|
|
- public static function getPars($array, $key, $default = '')
|
|
|
+//从数组中获取参数
|
|
|
+ public
|
|
|
+ static function getPars($array, $key, $default = '')
|
|
|
{
|
|
|
if (isset($array[$key])) {
|
|
|
return $array[$key];
|
|
|
@@ -2265,8 +2339,9 @@ class Events
|
|
|
return $default;
|
|
|
}
|
|
|
|
|
|
- //获取在线客服信息
|
|
|
- public static function getOnlineKfData($group = 0, $status = 0)
|
|
|
+//获取在线客服信息
|
|
|
+ public
|
|
|
+ static function getOnlineKfData($group = 0, $status = 0)
|
|
|
{
|
|
|
$all = self::$redis->hgetall(self::KFINFOKEY);
|
|
|
if (!$all) {
|
|
|
@@ -2290,8 +2365,9 @@ class Events
|
|
|
return $return;
|
|
|
}
|
|
|
|
|
|
- //找到在排队的用户按时间先后顺序
|
|
|
- public static function getUselistData($group)
|
|
|
+//找到在排队的用户按时间先后顺序
|
|
|
+ public
|
|
|
+ static function getUselistData($group)
|
|
|
{
|
|
|
$all = self::$redis->hgetall(self::USERLIST);
|
|
|
if (!$all) {
|
|
|
@@ -2313,8 +2389,9 @@ class Events
|
|
|
return $return;
|
|
|
}
|
|
|
|
|
|
- //对客服的用户user_info数组进行加减操作 $clientid用户连接号 opt=1添加 0删除 $serverid服务工单号
|
|
|
- public static function ArrayDataopt($array, $clientid, $opt, $serverid = 0)
|
|
|
+//对客服的用户user_info数组进行加减操作 $clientid用户连接号 opt=1添加 0删除 $serverid服务工单号
|
|
|
+ public
|
|
|
+ static function ArrayDataopt($array, $clientid, $opt, $serverid = 0)
|
|
|
{
|
|
|
if (!is_array($array)) {
|
|
|
return [];
|
|
|
@@ -2331,30 +2408,34 @@ class Events
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- //用户重要性标签
|
|
|
- private static function getUserLabAll($client_id, $message)
|
|
|
+//用户重要性标签
|
|
|
+ private
|
|
|
+ static function getUserLabAll($client_id, $message)
|
|
|
{
|
|
|
$data = self::$global->accountslabel;
|
|
|
Gateway::sendToCurrentClient(json_encode(['message_type' => 'userlabeall', 'data' => $data], 256));
|
|
|
}
|
|
|
|
|
|
- //调试使用
|
|
|
- public static function debug($dataArray)
|
|
|
+//调试使用
|
|
|
+ public
|
|
|
+ static function debug($dataArray)
|
|
|
{
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
- //客服的工单hash健名
|
|
|
- public static function getKfServiceKey($kfuid)
|
|
|
+//客服的工单hash健名
|
|
|
+ public
|
|
|
+ static function getKfServiceKey($kfuid)
|
|
|
{
|
|
|
return self::KFSERVICES . ':' . $kfuid;
|
|
|
}
|
|
|
|
|
|
|
|
|
- //获取客服所有连接信息及工单信息
|
|
|
- public static function getKfTasks($kfuid)
|
|
|
+//获取客服所有连接信息及工单信息
|
|
|
+ public
|
|
|
+ static function getKfTasks($kfuid)
|
|
|
{
|
|
|
$all = self::$redis->hgetall(self::getKfServiceKey($kfuid));
|
|
|
if (empty($all)) {
|
|
|
@@ -2363,8 +2444,9 @@ class Events
|
|
|
return $all;
|
|
|
}
|
|
|
|
|
|
- //设置或删除客服的连接 opt==0删除 1添加
|
|
|
- public static function setKfTasks($kfuid, $clientid, $opt = 0, $serviceid = 0)
|
|
|
+//设置或删除客服的连接 opt==0删除 1添加
|
|
|
+ public
|
|
|
+ static function setKfTasks($kfuid, $clientid, $opt = 0, $serviceid = 0)
|
|
|
{
|
|
|
$k = self::getKfServiceKey($kfuid);
|
|
|
if ($opt == 0) {
|
|
|
@@ -2374,8 +2456,9 @@ class Events
|
|
|
self::$redis->hset($k, $clientid, $serviceid);
|
|
|
}
|
|
|
|
|
|
- //有旧单时,更新连接ID
|
|
|
- public static function updteKfTasksByservicd($kfuid, $serciceid, $newclientid, $opt = 1)
|
|
|
+//有旧单时,更新连接ID
|
|
|
+ public
|
|
|
+ static function updteKfTasksByservicd($kfuid, $serciceid, $newclientid, $opt = 1)
|
|
|
{
|
|
|
$tkey = self::getKfServiceKey($kfuid);
|
|
|
$all = self::getKfTasks($kfuid);
|
|
|
@@ -2408,8 +2491,9 @@ class Events
|
|
|
|
|
|
}
|
|
|
|
|
|
- //客服用户映射哈希表
|
|
|
- public static function addKfUsermap($kfuid, $userid = 0, $opt = 1)
|
|
|
+//客服用户映射哈希表
|
|
|
+ public
|
|
|
+ static function addKfUsermap($kfuid, $userid = 0, $opt = 1)
|
|
|
{
|
|
|
$kfuid = self::getkfuid($kfuid);
|
|
|
$uid = intval($userid);
|
|
|
@@ -2421,14 +2505,15 @@ class Events
|
|
|
if ($userid) {
|
|
|
$ret = self::$redis->hdel($key, $uid);
|
|
|
} else {
|
|
|
- $ret = self::del($key);
|
|
|
+ $ret = self::$redis->del($key);
|
|
|
}
|
|
|
}
|
|
|
return $ret;
|
|
|
}
|
|
|
|
|
|
- //缓存获取用户信息
|
|
|
- public static function getUserInfoCache($uid, $cacheTime = 180, $fcache = 1)
|
|
|
+//缓存获取用户信息
|
|
|
+ public
|
|
|
+ static function getUserInfoCache($uid, $cacheTime = 180, $fcache = 1)
|
|
|
{
|
|
|
$uid = intval($uid);
|
|
|
$key = 'TmpUserInfo:' . $uid;
|
|
|
@@ -2446,8 +2531,9 @@ class Events
|
|
|
return $date;
|
|
|
}
|
|
|
|
|
|
- //检查一个新人是否需要排队
|
|
|
- public static function HasInqueue($group)
|
|
|
+//检查一个新人是否需要排队
|
|
|
+ public
|
|
|
+ static function HasInqueue($group)
|
|
|
{
|
|
|
$group = intval($group);
|
|
|
$allserveric = self::$redis->hgetall(self::SERVICELOG);
|
|
|
@@ -2476,5 +2562,62 @@ class Events
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+//公共请求接口
|
|
|
+ public
|
|
|
+ static function getApiData($url, $paras, $api_token, $user_token = '')
|
|
|
+ {
|
|
|
+ if (empty($user_token)) {
|
|
|
+ if (isset($_SESSION['kf_token'])) {
|
|
|
+ $user_token = $_SESSION['kf_token'];
|
|
|
+ } else {
|
|
|
+ return ['code' => 0, 'msg' => 'token empty error', 'data' => []];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $ret = self::request_post($url, $paras, $api_token, $user_token);
|
|
|
+ if ($ret) {
|
|
|
+ $ret = json_decode($ret, true);
|
|
|
+ return $ret;
|
|
|
+ } else {
|
|
|
+ return ['code' => 0, 'msg' => 'api ret error', 'data' => []];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+//api token 生成
|
|
|
+ public
|
|
|
+ static function apiTokenMake($action, $controller = 'ext', $module = 'service')
|
|
|
+ {
|
|
|
+ return md5(strtolower($action . 'Customer-Service' . $controller . $module));
|
|
|
+ }
|
|
|
+
|
|
|
+ public
|
|
|
+ static function request_post($url = '', $param = '', $apitoken = '', $usetoken = '')
|
|
|
+ {
|
|
|
+ if (empty($url)) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ $headers = array(
|
|
|
+ 'apiToken' => $apitoken,
|
|
|
+ 'userToken' => $usetoken,
|
|
|
+ );
|
|
|
+
|
|
|
+ $postUrl = $url;
|
|
|
+ $curlPost = $param;
|
|
|
+ $ch = curl_init();//初始化curl
|
|
|
+ curl_setopt($ch, CURLOPT_URL, $postUrl);//抓取指定网页
|
|
|
+ curl_setopt($ch, CURLOPT_HEADER, 0);//设置header
|
|
|
+ curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
|
|
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
|
|
|
+ curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
|
|
|
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
|
|
|
+ curl_setopt($ch, CURLOPT_TIMEOUT, 5);
|
|
|
+ $data = curl_exec($ch);//运行curl
|
|
|
+ curl_close($ch);
|
|
|
+
|
|
|
+ return $data;
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|