$customerService['id']]); // 获取当前客服正在服务的用户列表 client_id $customerServiceUserSessions = Gateway::getClientSessionsByGroup($customerServiceGroupName); return $customerServiceUserSessions ? : []; } /** * 获取当前客服正在服务的用户 (去重) * * @param array $customerService * @return array */ public static function customerServiceOnlineUsers($customerService) { // 当前客服服务的所有用户 session $customerServiceUserSessions = self::customerServiceUserSessions($customerService); // 在线用户列表 $onlines = array_column($customerServiceUserSessions, 'chat_user'); // 过滤重复 $newUsers = []; foreach ($onlines as $online) { $newUsers[$online['id']] = $online; } return array_values($newUsers); } /** * 获取当前客服正在服务的用户 client_ids * * @param array $customerService * @return array */ public static function customerServiceUserClientIds($customerService) { // 获取当前客服 group_name $customerServiceGroupName = Online::getGrouponName('customer_service_user', ['customer_service_id' => $customerService['id']]); // 获取当前客服正在服务的用户列表 client_id $userClientIds = Gateway::getClientIdListByGroup($customerServiceGroupName); return $userClientIds ? : []; } /** * 获取当前客服服务的历史用户 * * @param array $customerService * @param array $exceptSessionIds * @return array */ public static function customerServiceHistoryUsers($customerService, Array $exceptSessionIds = []) { $histories = Online::historyByCustomerServiceId($customerService, ['except' => $exceptSessionIds]); foreach ($histories as $key => &$history) { $status = Gateway::isUidOnline(Online::getUId($history['session_id'], 'user')); $history['status'] = $status; // 在线状态 $history['customer_service'] = null; // 如果在线,并且已经接入客服,当前客服信息 if ($status) { // 在线,判断用户是否正在被客服接入 $client_ids = Gateway::getClientIdByUid(Online::getUId($history['session_id'], 'user')); $client_id = current($client_ids); $historySession = Gateway::getSession($client_id); $customerService = $historySession['customer_service'] ? : null; $history['customer_service'] = $customerService; } $history['status'] = $status; } return $histories; } /** * 通过 session_id 获取连接的用户对应的 chatUser * * @param string $session_id * @return object */ public static function getChatUserBySessionId($session_id) { $chatUser = ChatUser::where('session_id', $session_id)->find(); return $chatUser; } /** * 通过 user_id 获取连接的用户对应的 chatUser * * @param string $user_id * @return object */ public static function getChatUserByUserId($user_id) { $chatUser = ChatUser::where('user_id', $user_id)->find(); return $chatUser; } }