Google Forms + Apps Script + Slack으로 설문 응답 즉시 알림받기
제가 고객 피드백 설문을 돌릴 때마다 Forms 스프레드시트를 새로고침하며 응답을 확인하곤 했어요. 하루에 열 번씩 들어가서 보다가, 응답이 들어온 지 3시간이나 지나서야 알게 된 적도 있었죠. 이 글을 읽고 나면 설문 응답이 제출되는 순간 Slack으로 자동 알림이 오고, 집계까지 즉시 완료되는 무료 워크플로우를 직접 만들 수 있습니다.
준비물
Google 계정과 Slack 워크스페이스가 필요합니다. Slack Incoming Webhooks는 무료 플랜에서도 사용 가능하며, Apps Script 역시 추가 요금 없이 이용할 수 있어요. 설문을 만들 Google Forms와 응답이 쌓일 Google Sheets, 그리고 알림을 받을 Slack 채널만 준비하면 됩니다.
저는 개인 Gmail 계정으로 테스트했고, Slack은 무료 플랜 워크스페이스를 썼어요. 유료 기능이 전혀 필요 없었습니다.
Slack Incoming Webhook URL 발급받기
Slack 워크스페이스 관리 페이지에서 Apps 메뉴로 들어가세요. 검색창에 Incoming Webhooks를 입력하고 Add to Slack을 누르면 됩니다. 알림을 받을 채널을 선택하라는 화면이 나와요. 저는 customer-feedback 채널을 지정했습니다.
설정을 마치면 Webhook URL이 생성됩니다. 출처: Slack API 공식 문서 — Incoming Webhooks 설정 방법에 따르면, 이 URL로 HTTPS POST 요청만 보내면 토큰 없이도 메시지 전송이 가능하죠. URL을 복사해두세요. 나중에 Apps Script 코드에 붙여넣을 거예요.
처음 시도했을 때 Webhook URL을 메모장에 붙여넣다가 끝에 공백이 하나 딸려왔더라고요. 나중에 코드 실행 시 404 에러가 떴는데, 공백 하나 때문에 10분을 날렸습니다. 복사할 때 앞뒤 공백이 없는지 꼭 확인하세요.
Google Forms 만들고 Sheets 연결하기
Forms에서 새 설문을 만들고, 상단 메뉴에서 응답 탭을 클릭합니다. 녹색 스프레드시트 아이콘을 눌러 Create a new spreadsheet를 선택하면 응답이 자동으로 기록될 Sheets가 생성돼요. Forms 응답은 연결된 Sheets에 행으로 자동 추가되며, Apps Script의 SpreadsheetApp으로 즉시 접근 가능합니다(출처: Google Workspace 개발자 블로그 — Forms와 Sheets 연동 예제).
저는 만족도·개선 요청사항 두 개 질문만 넣었어요. 설문 구조가 복잡할수록 나중에 집계 코드가 길어지니, 처음엔 단순하게 시작하는 게 좋습니다.
Sheets를 열어보면 첫 번째 열이 Timestamp(타임스탬프), 두 번째 열부터 질문 제목이 헤더로 들어가 있을 겁니다. 질문 순서를 나중에 바꾸면 열 번호도 바뀌므로, 헤더 이름을 보고 기억해두세요. 저는 질문 순서를 세 번 바꿨다가 코드 열 번호를 매번 고쳐야 했어요.
Apps Script 트리거 설정하기
Sheets 메뉴에서 Extensions > Apps Script를 클릭하세요. 새 프로젝트가 열리면 아래 코드를 붙여넣습니다.
function onFormSubmit(e) {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const lastRow = sheet.getLastRow();
const timestamp = sheet.getRange(lastRow, 1).getValue();
const response1 = sheet.getRange(lastRow, 2).getValue();
const response2 = sheet.getRange(lastRow, 3).getValue();
const message = {
text: `새 설문 응답이 도착했어요!\n시간: ${timestamp}\n만족도: ${response1}\n개선요청: ${response2}`
};
const options = {
method: 'post',
contentType: 'application/json',
payload: JSON.stringify(message)
};
UrlFetchApp.fetch('YOUR_WEBHOOK_URL', options);
}
YOURWEBHOOKURL 부분을 아까 복사한 Slack Webhook URL로 바꿔주세요. 저장 후 왼쪽 메뉴에서 Triggers(시계 아이콘)를 클릭합니다. Add Trigger를 눌러 다음과 같이 설정하세요.
- Choose which function to run: onFormSubmit
- Select event source: From spreadsheet
- Select event type: On form submit
Apps Script는 onFormSubmit 트리거로 응답 제출 즉시 스크립트를 자동 실행합니다(출처: Google Apps Script 공식 문서 — Form 이벤트 트리거 가이드). 권한 승인 팝업이 뜨면 Allow를 눌러주세요.
처음 트리거를 설정할 때 From form과 From spreadsheet 중 어느 걸 선택해야 할지 헷갈렸어요. From form을 선택하면 Form 파일 자체에 트리거가 걸리고, From spreadsheet를 선택하면 Sheets 파일에 걸립니다. 저는 둘 다 시도해봤는데, From spreadsheet가 더 안정적이었어요. Form에서 직접 트리거를 걸면 나중에 Sheets를 교체했을 때 연결이 끊어지더라고요.
실제 동작 확인하기
Forms URL을 브라우저 시크릿 모드로 열어 테스트 응답을 제출해보세요. 몇 초 안에 Slack 채널로 메시지가 도착할 겁니다. 저는 첫 테스트 때 15초 만에 알림이 왔어요. 응답 내용이 정확히 표시되는지 확인하고, Sheets에도 행이 추가됐는지 체크하세요.
시크릿 모드를 쓰는 이유는 자기 계정으로 로그인한 상태에서 테스트하면 Forms 편집 화면으로 넘어가는 경우가 있기 때문입니다. 실제 응답자 관점에서 테스트하려면 로그아웃 상태나 다른 브라우저를 쓰는 게 확실해요.
집계 로직을 추가하려면 코드에서 getRange 범위를 조정하면 됩니다. 예를 들어 만족도 점수 평균을 구하고 싶다면, 전체 행을 순회하며 sum을 계산한 뒤 count로 나누는 식이죠. 저는 응답이 10개 이상 쌓이면 자동으로 평균을 계산해서 Slack에 함께 보내도록 확장했습니다.
흔한 실수와 해결법
처음 테스트했을 때 Slack에 메시지가 안 왔어요. Apps Script 실행 로그를 확인했더니 UrlFetchApp 권한이 없다는 오류였습니다. Triggers 설정 화면에서 권한 재승인을 하니 바로 해결됐죠. 권한 승인은 처음 한 번만 하면 되는데, 코드를 크게 수정하면 다시 물어보는 경우가 있어요.
두 번째 삽질은 Sheets 열 번호 하드코딩이었어요. Forms 질문 순서를 바꿨더니 응답 데이터가 엉뚱하게 표시되더라고요. getRange(lastRow, 2) 같은 고정 인덱스 대신, 헤더 행에서 컬럼명을 찾아 동적으로 가져오도록 수정했습니다. 헤더 이름으로 열을 찾는 코드는 Google Apps Script 공식 문서에 예제가 있으니 참고하세요.
세 번째는 Webhook URL을 코드에 그대로 노출한 거예요. Apps Script는 기본적으로 비공개지만, 나중에 공유하거나 GitHub에 올릴 때 URL이 유출될 수 있습니다. Script Properties에 URL을 저장하고 getProperty로 읽어오는 방식으로 바꿨어요. 설정 메뉴에서 Project Settings > Script Properties를 열고, WEBHOOK_URL이라는 이름으로 저장하면 됩니다.
다음 단계: 조건부 알림과 차트 자동 생성
기본 워크플로우가 돌아가면, 이제 조건부 알림을 추가해볼 수 있습니다. 예를 들어 만족도 점수가 3점 이하일 때만 알림을 보내거나, 특정 키워드가 포함된 응답만 필터링하는 식이죠. 저는 부정 키워드 목록을 만들어서 해당 단어가 포함되면 긴급 알림 채널로 별도 메시지를 보내도록 설정했어요.
Apps Script에서 Charts API를 호출하면 Sheets 데이터를 바탕으로 차트를 자동 생성할 수도 있습니다. 응답이 50개 이상 쌓이면 만족도 분포 차트를 만들어 주간 보고서 채널에 이미지로 전송하는 방식도 가능해요. Google Data Studio와 연결하면 실시간 대시보드까지 만들 수 있으니, 더 복잡한 집계가 필요하다면 시도해보세요.