Google Apps Script로 노가다 자동화
단순하지만 수기로 작업을 해왔던 자잘한 것들을 자동화 해보자
위 사진은 납품된 서비스 유지보수 차원에서 문의 전화를 받을 때 마다 기록을 해왔던 일지이다.
이 부분에서 약간의 불만이 있었는데
- 이런 사소한 작업들이 모이다보니 개발자가 정작 개발에 신경쓸 시간이 적어 진다.
- 문의 접수를 대부분의 경우 접수를 하려는 사람이 접수를 하는데 그걸 접수 받는 사람이 대신 해주고 있다.
그래서 해결을 한 방식이 바로 구글 설문조사를 이용하는 것
일단 완성된 모습은
전체 구조는 다음과 같다
본 솔루션을 구현하기 위해 Firebase를 사용하였는데 그 이유는 홈페이지 호스팅을 하는데 간단하고 빨랐으며 무료 가격 정책에도 준수한 성능을 갖추었기 때문이다.
문의 접수 시나리오는 다음과 같다.
- 문의 접수 홈페이지에 사용자가 접속 한다.
- 문의 접수 Google-Forms (설문조사) 에 응답한다.
- 새로운 문의 접수가 Google-Forms에 연결된 Google Sheets 에 먼저 저장이 된다
- Google Sheets 에 새 문의자 저장 되자마자 트리거가 발생되어 해당 트리거와 연결된 Google Apps Script 가 실행된다.
- Google Apps Script 에서 기존에 쓰이던 문의 접수 일지 Sheets 에 새 문의 내용을 작성해준다.
- Google Apps Script 에서 새 문의 내용을 메일, 슬랙에 전달한다.
Google Apps Script 가 어떻게 보면 제일 핵심 요소가 될 수 있지만 작업된 양은 그리 많지 않았다.
function myFunction() {
}
function onRowAppend(e) {
var sheet = SpreadsheetApp.openById('SPREAD_SHEEDT_ID').getSheetByName('2020')
var data = {
timestamp: e.namedValues['Timestamp'][0],
site: e.namedValues['Site'][0],
place: e.namedValues['Place'][0] == '' ? e.namedValues['Site'][0] : e.namedValues['Place'][0],
reason: e.namedValues['Reason'][0],
contact: e.namedValues['Contact'][0]
}
sheet.appendRow([data.timestamp, data.site, data.place, data.reason, data.contact])
MailApp.sendEmail("test@example.com",
"--- 문의 접수 - " + data.site + " / " + data.place,
"접수 날짜: " + data.timestamp + "\n사유: " + data.reason + "\n연락처: " + data.contact)
MailApp.sendEmail("test@example.com",
"--- 프로그램 문의 접수 - " + data.site + " / " + data.place,
"접수 날짜: " + data.timestamp + "\n사유: " + data.reason + "\n연락처: " + data.contact)
var slackUrl = "https://example.com";
var slackMsgForm = {
"attachments": [
{
"color": "#36a64f",
"pretext": "새로운 문의 접수 - " + data.site + " / " + data.place,
"author_name": data.contact,
"title": "문의 내용",
"text": data.reason,
}
]
}
var payload = JSON.stringify(slackMsgForm);
var headers = { "Accept":"*",
"Content-Type":"application/json",
};
var options = { "method":"POST",
"contentType" : "application/json",
"headers": headers,
"payload" : payload
};
var response = UrlFetchApp.fetch(slackUrl, options);
Logger.log("slack request result: " + JSON.stringify(response))
}
Javascript 기반으로 작동되니 코딩 난이도도 높진 않았지만 문제는 API 문서 해석이었다.
[Reference overview | Apps Script | Google Developers](https://developers.google.com/apps-script/reference) |
겁나 많다. 모든 API를 보려 하지 않았고, 필요한 내용만 구글링으로 짜집었더니 그리 어렵지 않게 완성할 수 있었다.
소스는 완성했으니 그럼 저 스크립트는 언제 어떻게 실행을 해야 할까?
일단 조건은 설문조사용 Spread Sheets 에 값이 추가되었을 경우 트리거가 일어나면 되는 것이다.
그럼 트리거로 오는 데이터는 어떤걸까?
[Event Objects | Apps Script | Google Developers](https://developers.google.com/apps-script/guides/triggers/events#form-submit) |
짜잔~
그럼 트리거는 어떻게 설정해야 할까?
해당 스크립트 편집기의 수정탭 → 현재 프로직트의 트리거
로 들어가게 되면 트리거 설정을 할 수 있는 페이지가 열리게 되는데
트리거 추가 시 소스에 작성해두었던 원하는 함수를 실행할 함수 선택
에서 골라주면 되고, 이벤트 유형은 설문 양식을 제출하였을 때 발생되기를 원하므로 양식 제출시
를 선택해주고 저장을 누르면 이후로 설문 조사가 될 때마다 자동으로 호출이 된다.
자동으로 써진 모습
슬랙으로도 알림이 발송되는 모습을 볼 수 있다.