들어가며
저희 동아리에서는 신입 회원이 있을 경우 구글 폼을 통해 사용자 정보를 받습니다. 그 후 구글 이메일을 통해 동아리 드라이브를 공유하며 슬랙에 초대를 합니다. 매번 새로운 신입 회원이 생길 때마다 위 과정을 반복하는 것은 여간 귀찮은 것이 아닙니다. 이번 기회에 이 과정을 자동화 해보았습니다.
Apps Script란?
간단히 스프레드 시트에서 실행할 수 있는 스크립트라고 생각할 수 있습니다. javascript를 사용하며 자체적으로 .gs 라는 확장자를 사용합니다. 다음 사이트에서 'Starting Script'를 통해 시작할 수 있습니다.
https://www.google.com/script/start/
혹은 스프레드 시트에서 바로 연결할 수 있습니다. (도구 -> 스크립트 편집기)
코드
운이 좋게도 좋은 코드를 찾았습니다! 이 코드는 구글 설문 입력시 슬랙을 자동으로 초대해주는 함수입니다. (구글 공유드라이브 보기 권한도 추가 방법은 뒤에서 설명합니다)
https://gist.github.com/vors/bd585fc6e3d027804f80#file-slackautoinvite-js-L1
함수의 동작 방식을 조금 설명하자면, 스프레드 시트에 새로운 응답이 올 때 (즉, 트리거가 발생할 때), ``onFormSubmitEx``함수를 실행합니다. 이 함수에서는 슬렉 API로 POST 요청을 보내 초대를 하게 됩니다. 이후, 실행 결과를 메일로 보내줍니다. (구글 설문지 응답을 스프레드 시트에 기록하는 법은 이 글을 참고하십시오.)
Slack API 사용하기
재밌는 점은 Slack API를 사용하는 부분입니다. 공식적인 슬랙 API는 다음 사이트에서 확인할 수 있습니다.
그런데 공식적으로 지원하지 않는 API도 있습니다. 새로운 멤버를 초대하는 API는 다음 비공식 API의 users.admin.invite.md를 사용해야 합니다.
https://github.com/ErikKalkoken/slackApiDoc
이 API를 사용하기 위해서는 슬랙 토큰이 필요합니다. 쉽게 설명하면 토큰은 인증을 위해 사용되는 개인 정보라고 볼 수 있습니다. (토큰 인증 및 다른 인증 방법의 발달과 원리가 궁금하다면 이 글을 참고하십시오). 슬랙 API를 사용하기 위한 토큰을 발급 받는 방법은 다음 사이트의 중간 부분인 Legacy information의 Create token 버튼을 클릭하면 됩니다.
https://api.slack.com/custom-integrations/legacy-tokens
이후 함수의 ``// secrets``의 ``SlackToken``에 해당 값을 넣어줍시다.
Google Apps Script API 사용하기
다음 사이트에서 API들을 확인할 수 있습니다. 특히 좌측 메뉴바의 G Suite Services를 눌러보면 사용할 수 있는 구글의 서비스들이 클래스 형태로 되어있습니다. 타 API와 비슷하게 사용하면 됩니다.
https://developers.google.com/apps-script/reference/
Google 문서의 id 값
구글 드라이브의 폴더, 혹은 파일에 들어갈 경우 URL은 다음과 같은 형식일 것입니다.
https://drive.google.com/drive/u/0/folders/1-PL6CcUE**************HU8b8ohy
이때, 뒤의 ``1-PL6CcUE**************HU8b8ohy``부분이 그 문서의 고유 id 값입니다. 스프레드시트, 구글 드라이브 등 구글 서비스를 사용하다 보면 ID값을 종종 사용하게 될테니 잘 기억해두십시오.
Google 드라이브 자동 공유
생각보다 너무 간단합니다. Script API의 DriveApp 클래스를 사용하여 다음과 같은 코드를 추가해주면 됩니다.
var folder = DriveApp.getFolderById(googleDriveID)
folder.addViewer(toAddress)
'기술' 카테고리의 다른 글
[JavaScript] Object 기초부터 Destructed Assignment까지 자세히 알아보기 (0) | 2019.09.23 |
---|---|
[NGINX] 꼭 알아야 할 configuration 기초 개념! (1) | 2019.09.19 |
[Javascript] 배열 기초 (0) | 2019.09.18 |
[Javascript] 함수 기초: 함수 선언식, 표현식, 호이스팅, 화살표 함수 (1) | 2019.09.17 |
[Javascript] 기초: 주석, 자료형, 변수선언, 문자열 포멧팅, If문, Switch문, 논리연산자 (0) | 2019.09.16 |