VPN에 연결된 상태에서 Zoom에 연결된 사람에게 슬랙을 건너뜁니다.

4722 단어 apiSlackLaravelzoom
사내에 VPN을 연결한 상태에서 줌을 하는 사람이 많으면 대역폭이 압박돼 힘들다.
따라서 슬랙을 통해 VPN에 연결된 상태에서 줌에 연결된 사람에게 알림을 보내는 장치를 만들자.
또한 코드 샘플은 Laavel을 사용하여 구현됩니다.
전제 조건
  • VPN으로 고정된 GlobalIP
  • 슬랙과 줌의 로그인 메일 주소가 일치
  • 줌이 비즈니스 플랜 이상
  • 방법
    VPN의 액세스 사용자와 Zoom의 연결 사용자를 일치시킬 수도 있지만 이번에는 Zoom의 API를 사용하여 GIP의 연결 유형을 봅니다.
  • 줌을 이용한 Participant/Host joined meetingWebHook 알림
  • 줌의Get Meeting Detail API를 이용하여 미팅의 참가자 리스트를 획득
  • 참가자 목록에서 참가한 사용자의 인터넷 정보를 얻기
  • 슬랙API의users.lookupByEmail를 이용하여 사용자의 슬랙UserID
  • 를 취득
  • 슬랙APIchat.postMessage를 사용하여 사용자에게 메시지 보내기
  • 만들다
    Slack의 App줌의 앱.는 사전에 제작하여 APIDocs를 참조한 후 적당한 권한을 주십시오.
    1. 줌으로부터 웹훅 알림 받기
    Participant/Host joined meeting를 사용하면 줌에 참가할 때 웹훅에서 알림을 받을 수 있다.
    사용자의 계정 정보를 얻으려면 이것을 사용하십시오.
    이 자체가 간단한 이벤트웹훅이므로 POST에서 받을 수 있는 URL을 적절히 준비하세요.
    이번에 사용한 것은 meeting.participant_joined의 이벤트이기 때문에 데이터를 적당히 추출한다.
    if($request->event == 'meeting.participant_joined'){
        $payload = $request->payload;
        $meeting_id = $payload['object']['id'];
        $joined_user_id = $payload['object']['participant']['participant_user_id'];
    }
    
    2. 줌 회의 참가자 명단 얻기
    Zoom의 매니저 대시보드 또는 Get Meeting Participants API를 사용하면 회의에 참석한 모든 사용자의 GIP 및 네트워크 연결 카테고리를 얻을 수 있습니다.
    EventWebHook에서 입수한 데이터에는 이런 정보가 존재하지 않기 때문에 두 번의 시간이 소요됩니다. 방금 입수한 미팅 ID를 이용해 회의 참석자 명단을 얻으세요.
    $headers = [
        'Content-Type'  => 'application/json',
        'Authorization' => 'Bearer ' . config('zoom.token'),
    ];
    
    $params = [
        'page_size' => 300,
    ];
    
    $response = Http::withHeaders($headers)
        ->get("https://api.zoom.us/v2//metrics/meetings/$meeting_id/participants", $params);    
    
    $participants = json_decode($response->body(), 1);
    
    3. 대상 사용자의 네트워크 정보 얻기
    2. 회의 목록에서 이 대상의 사용자 ID를 검색합니다.
    이번에는 라벨을 사용했기 때문에 데이터를 컬렉션에 넣고 검색했다.
    $users = collect($participants['participants']);
    
    $check = $users->where('id', '=', $joined_user_id)
        ->where('ip_address', '=', '127.0.0.1') // 対象となるGIPを入れる
        ->where('network_type', '=', 'PPP') // IPSecの場合はPPP, SSL-VPNの場合は...確認していない
        ->where('status', '=', 'in_meeting')
        ->first();
    
    
    4. 대상 Slack의 UserId 가져오기
    3. 회의에 Join 사용자가 있을 때 메일 주소에서 슬랙의 UserId를 받습니다.
    이때 줌의 이메일을 받을 수 없고 슬랙에 맞는 사용자가 없을 때 오류 처리를 준비하는 것을 추천합니다.
    5. 슬랙으로 대상에게 메시지 보내기
    4. 에서 가져온 UserID에 적절한 정보를 보냅니다.
    if(!is_null($check)){
        // SlackのUserIDを取得
        $email = $payload['object']['participant']['email'];
    
        $headers = [
            'Authorization' => 'Bearer ' . config('slack.token'),
            'Content-Type' => 'application/x-www-form-urlencoded',
        ];
    
        $response = Http::withHeaders($headers)
            ->asForm()
            ->get('https://slack.com/api/users.lookupByEmail', ['email' => $email]);
    
        $slack_user_data = json_decode($response->body(), 1);
    
        // メッセージを送信
        $params = [
            'channel' => $slack_user_data['id'],
            'text' => "VPNに接続した状態でZoomを行っている可能性があります。\nVPN負荷軽減のため、可能な場合VPNから切断を行ってください。",
        ];
    
        $response = Http::withHeaders($headers)
            ->asForm()
            ->post('https://slack.com/api/chat.postMessage', $params);
    
        $response = json_decode($response->body(), 1);
    }
    

    다 됐습니다.
    줌 연결과 유튜브를 시청할 때도 VPN을 빼주세요.

    좋은 웹페이지 즐겨찾기