본문 바로가기
웹개발지식쌓기

Zoom Api 사용해보기 - 3 [Webhook]

by developer_j 2022. 8. 31.
728x90
반응형

이전에 썼던 내용과 비슷하게, 테스트용으로 웹훅 앱을 사용해본다. 왜 웹훅이냐면 무료니ㄲr...☆

웹훅이란 : 역방향 api. 특정 이벤트 발생 시 내가 설정한 url로 데이터를 보내줌. 일반적으로 api사용 시 내가 api의 url을 호출해서 데이터를 당겨와서 사용하는데, 웹훅은 그 반대이다. 내가 데이터를 받을 url을 설정해두면 특정 작업이 일어날 때 알아서 그 url로 데이터가 들어온다.

 

1. App 생성

 

https://marketplace.zoom.us/

zoom marketplace 접속

 

로그인 - build app - Webhook Only 선택

 

 

대츙 테스트 컴패니를 써줍니다..

 

1

 

2

 

2번째 화면에서 맨 밑에 "Event Subscriptions" 텍스트 오른쪽의 버튼을 살포시 눌러주면 아래의 이벤트 설정 창이 뜬다.

 

 

역시나 테스트 데이터 채워주고 [+ Add Events] 버튼 클릭

 

 

그럼 이런 웹훅 이벤트 설정창이 뜨는데, 본인이 필요한 이벤트를 체크 해주면 된다.

참고로 나는 목적이 다른 url 마다 하나씩만 설정했다. 아래 사진처럼 특정 앱마다 하나씩만 하는 게 아니라, 여러개를 설정할 수 있다.

 

웹훅 이벤트 url을 2개 설정한 모습

 

+) 웹훅 이벤트목록에 대한 정보는 아래 가이드 문서에서 확인!

https://marketplace.zoom.us/docs/api-reference/zoom-api/events/#overview

 

2. 데이터 확인

 

나는 일단 줌 회의에 들어와있던 사람이 나갔을 때 발생하는 데이터를 확인하고 싶었다.

해당 데이터는 JSON 으로 내가 설정한 url로 오기 때문에 controller에 소스 추가가 필요하다. 자바 소스에 json 데이터를 받는 부분을 추가해준다.

 

@Controller
public class TestController extends BaseController{
    
    // 1. zoom data를 받을 url (웹훅 설정에 작성한 url)
    @RequestMapping(value = "/testApi")
    public String testApi(HttpServletRequest request, ModelMap model, ZoomWebhookVO zoomWebhookVO) throws Exception{
    
    	StringBuffer strBuffer = new StringBuffer();
        String line = null;

        try {
            BufferedReader reader = request.getReader();
            while ((line = reader.readLine()) != null) {
               strBuffer.append(line);
            }
        } catch (Exception e) {
            e.printStackTrace();
            return e.toString();
        }

        JsonParser parser = new JsonParser();
        JsonObject jsonObject = (JsonObject)parser.parse(strBuffer.toString());
        jsonObject = jsonObject.getAsJsonObject("payload").getAsJsonObject("object").getAsJsonObject("participant");
        
        String convertedDate = getConvertedDate(jsonObject.get("leave_time").toString());

        System.out.println("============ testAPI process ==============");
        System.out.println("user_name : " + jsonObject.get("user_name"));
        System.out.println("leave_time : " + jsonObject.get("leave_time"));
        System.out.println("[converted]leave_time : " + convertedDate);
        System.out.println("user_id : " + jsonObject.get("user_id"));
        System.out.println("============ testAPI process end ==============");
        
        // Webhook 수신을 성공으로 처리하기 위해 JSON String 구성 (리턴 안하면 5분마다 중복으로 데이터 수신됨)
        return "{'responseCode':'200'}";
        
    }
    
    // 2. 받은 데이터 - 날짜데이터만 포맷
    public static String getConvertedDate(String inputDate) {
        inputDate = inputDate.replaceAll("[a-zA-Z]", " ");// time 구분자 제거
        inputDate = inputDate.replace("\"", "");// 쌍따옴표 제거

        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date parseDate = null;
        String convertedDate = null;
        
        try {
            parseDate = format.parse(inputDate);// zoom 나간시간 String --> Date 로 생성
            long zoomLeftTime = parseDate.getTime(); // zoom 나간 시간의 milliseconds 구하기
            int korOffset = TimeZone.getTimeZone("Asia/Seoul").getRawOffset();  // offset

            Long times = zoomLeftTime + korOffset;// 시간 계산

            convertedDate = format.format(times);// 계산한 시간을 다시 날짜+시간 형식(String)으로 변경 
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return convertedDate;
    }

 

JSON 받는 부분의 소스는 여기를 참조했다. 아 그리고, 여기 연동 매뉴얼을 보면 웹훅에 대해 더 잘 이해할 수 있다.

https://docs.popbill.com/kakao/connect?lang=java 

 

팝빌 연동매뉴얼

팝빌 카카오톡 API는 기업 마케팅에 필수적인 카카오톡 서비스를 한 곳에서 이용할 수 있으며, 팝빌과 직접 연계된 통신사(SK, KT, LG)의 다수 전송라인을 통해 안정적으로 빠른 전송을 지원합니다.

docs.popbill.com

 

설명 잘해놓으신 듯 😮👍👍👍👍

 

 

줌 회의를 생성하고 특정 사용자 초대한 후, 나가게 해보면 데이터가 잘 들어온다. 바로 들어오지는 않더라. 최대 5초정도 걸리는 것 같다.

+) 2번 소스를 추가한 이유

특정 사용자가 줌 회의를 나간 시점의 데이터는 잘 받아와 지는데, 시간이 날짜와 시간이 이상하길래 확인해보니 세계 표준시 UTC 기준으로 보내주더라.. 위에서 2번의 소스는 그  UTC 기준 시각을 한국 버전으로 바꾸는 소스이다.

728x90
반응형