구글 캘린더 & 슬랙 연동 상태 변경

박경준·2023년 3월 13일
0

슬랙 앱 연동

목록 보기
2/2

업무를 하다보면 협업하는 분들이 휴가를 가게되는 경우가 있다. 휴가자에게 슬랙을 보내기가 싫은데 매번 Daily 채널을 확인하는것도 귀찮음. 그렇다고 휴가 상태 변경이 강제되는 회사 분위기가 아니라 이래저래 불편...
이미 회사에 세팅되어있는 구글 캘린더 api 데이터를 이용해 슬랙의 상태를 자동으로 변경해줄수 있다면 어떨까?
~에서 시작한 프로젝트

  1. 슬랙에는 bot token과 user token의 권한이 각각 있음.
    Daily 채널로 매일 아침마다 구글 캘린더 데이터를 쏴주는 슬랙 앱은 bot token용임.
    그래서 내가 사용할 user token 슬랙 앱을 새로 만듦
    이름은 calendar-status-change

  2. 이제 슬랙 앱을 통해 사용자들(해빗팩토리 팀원들)의 권한을 부여받아야함.
    identify - View information about a user’s identity
    users.profile:read - View profile details about people in a workspace
    users.profile:write - Edit a user’s profile information and status
    필요한 권한은 이렇게 세개
    (identify는 필요 없을수도?)

  3. 권한을 부여받는 링크
    https://slack.com/oauth/v2/authorize?client_id=~~~~&scope=&user_scope=identify,users.profile:write,users.profile:read
    위 링크에서 권한을 부여해준 뒤 redirect 시켜줄 url을 넣어줄수 있는데
    cloudtype에 배포된 프로젝트에서 페이지를 하나 할당해줌.
    express로 만들어진 페이지.

4-1. 위 페이지의 기능은

  • 상태 변경할때 사용할 user token을 가져옴
  • google calendar에 등록된 이름으로 휴가 정보를 가져올 user name을 가져옴
  • 이름과 토큰이 key value로 된 firebase db 생성함.

4-2. 여기서 firebase에 저장할 user token은 중요한 정보이므로 암호화를 한다.
javascript에서 해시 함수를 통한 암호화를 할 수 있도록 해주는 Node.js 패키지인 crypto-js 활용.
암호화 종류는 대칭키 암호화를 사용 (암호화, 복호화 같은 키값을 이용)
처음에는 firebase에 잘 저장된 데이터를 또 암호화한다는게 필요할까? firebase가 털리면 하늘의 뜻이 아닐까? 생각했지만...
통신 간에 생길 수 있는 유출을 방지하기 위한것이라는 정우님의 가르침

  1. 적절한 로직을 통해 슬랙 상태를 변경해준다.
  • google calendar의 데이터를 가져온다.
  • 캘린더의 이름을 가지고 firebase에서 user token을 가져온다.
  • 휴가 종류에 따라 적절한 시간으로 세팅해준다.
  • 연차, 오전반차는 아침 / 오후반차는 점심에 실행되어야 하므로 하루 두번 CronJob을 걸어준다.

백오피스 작업을 하는걸 별로 좋아하지 않는데, 내가 원했던 기능을 내손으로 만들수 있다는 사실에 뿌듯했다. 팀원분들도 꼭 필요한 기능이었다고 고맙다고 하셔서 효용감이 더욱 높았다.

TODO.

위 스샷처럼 휴가자를 태그했을때 slackbot 연동하기
ex. 박경준님은 휴가중입니다

profile
빠굥

0개의 댓글