Google Apps Script와 Slack API를 활용하여 Google Sheets에서 특정 칼럼이 체크되면 자동으로 Slack으로 배송 관련 메시지를 전송하는 시스템을 구축하는 방법을 안내해드리겠습니다. 또한, 추가 실습을 통해 배송 완료 시 다른 스프레드시트에 자동으로 업데이트하거나, 주문 금액이 10만 원 이상인 경우에만 메시지를 전송하는 기능도 구현해보겠습니다.
-
스프레드시트 생성:
- Google Sheets에 접속하여 새로운 스프레드시트를 만듭니다.
- 예시: "배송 관리 시트"
-
시트 구성:
- 첫 번째 행에 헤더를 추가합니다:
주문번호,고객명,상품명,배송상태,주문금액 배송상태열은 체크박스 형식으로 설정합니다:- 해당 열을 선택한 후, 상단 메뉴에서 삽입 > 체크박스를 클릭합니다.
- 첫 번째 행에 헤더를 추가합니다:
-
Slack에서 Incoming Webhook 활성화:
- Slack 워크스페이스에서 Incoming Webhooks를 찾아 추가합니다.
- Webhook을 보낼 채널을 선택하고 Add Incoming Webhooks integration을 클릭합니다.
-
Webhook URL 복사:
- 생성된 Webhook URL을 복사하여 나중에 사용할 수 있도록 저장해둡니다.
-
Apps Script 편집기 열기:
- 스프레드시트에서 상단 메뉴의 확장 프로그램 > Apps Script를 클릭합니다.
-
스크립트 작성:
-
아래의 코드를 입력합니다:
// Slack Webhook URL const SLACK_WEBHOOK_URL = 'https://hooks.slack.com/services/your/webhook/url'; // 배송 상태가 변경될 때 호출되는 함수 function onEdit(e) { const sheet = e.source.getActiveSheet(); const range = e.range; const column = range.getColumn(); const row = range.getRow(); const deliveryStatusCol = 4; // 배송상태 열 번호 // 배송상태 열에서 변경이 발생한 경우 if (column === deliveryStatusCol) { const isChecked = range.getValue(); if (isChecked) { const orderNumber = sheet.getRange(row, 1).getValue(); const customerName = sheet.getRange(row, 2).getValue(); const productName = sheet.getRange(row, 3).getValue(); const orderAmount = sheet.getRange(row, 5).getValue(); // 주문 금액이 10만 원 이상인 경우에만 메시지 전송 if (orderAmount >= 100000) { const message = `📦 주문번호: ${orderNumber}\n👤 고객명: ${customerName}\n🛍️ 상품명: ${productName}\n💰 주문금액: ${orderAmount}원\n\n배송이 시작되었습니다.`; sendSlackMessage(message); } } } } // Slack으로 메시지 보내는 함수 function sendSlackMessage(message) { const payload = JSON.stringify({ text: message }); const options = { method: 'post', contentType: 'application/json', payload: payload }; UrlFetchApp.fetch(SLACK_WEBHOOK_URL, options); }
위 코드에서는
onEdit함수를 통해배송상태열의 변경을 감지하고, 체크되었을 때 Slack으로 메시지를 전송합니다. 또한, 주문 금액이 10만 원 이상인 경우에만 메시지를 전송하도록 조건을 추가하였습니다.
-
-
트리거 설정:
-
Apps Script 편집기에서 왼쪽의 시계 아이콘(트리거)을 클릭합니다.
-
트리거 추가 버튼을 눌러 새로운 트리거를 생성합니다.
-
다음과 같이 설정합니다:
- 함수:
onEdit - 이벤트 소스: 스프레드시트
- 이벤트 유형: 수정 시
- 함수:
-
저장하면 스프레드시트에서
배송상태열이 변경될 때마다onEdit함수가 자동으로 실행됩니다.
-
-
테스트 데이터 입력:
- 스프레드시트에 테스트용 데이터를 입력합니다.
- 예시:
- 주문번호: 001
- 고객명: 홍길동
- 상품명: 노트북
- 주문금액: 150,000
-
배송상태 체크:
- 해당 행의
배송상태열에 체크를 하면, Slack의 지정된 채널로 메시지가 전송되는지 확인합니다.
- 해당 행의
-
완료된 주문 스프레드시트 생성:
- Google Sheets에서 새로운 스프레드시트를 생성합니다.
- 예시: "완료된 주문"
- 첫 번째 행에 헤더를 추가합니다:
주문번호,고객명,상품명,배송완료일
-
스크립트 수정:
-
기존의 Apps Script에 아래의 코드를 추가합니다:
// 배송 완료 시 다른 스프레드시트에 업데이트하는 함수 function updateCompletedOrders(orderNumber, customerName, productName) { const completedSheetId = 'your_completed_sheet_id'; // 완료된 주문 스프레드시트 ID const completedSheet = SpreadsheetApp.openById(completedSheetId).getActiveSheet(); const date = new Date(); completedSheet.appendRow([orderNumber, customerName, productName, date]); }
-
onEdit함수 내부에서 배송이 완료되었을 때updateCompletedOrders함수를 호출하도록 추가합니다:if (isChecked) { updateCompletedOrders(orderNumber, customerName, productName); }
-
-
테스트 실행:
- 배송상태를 체크하면 "완료된 주문" 스프레드시트에 해당 주문 정보가 자동으로 추가되는지 확인합니다.
-
기존 스크립트 수정:
onEdit함수 내부에서 주문 금액이 100,000원 이상인지 확인하는 조건을 추가합니다.if (isChecked && orderAmount >= 100000) { sendSlackMessage(`📦 주문번호: ${orderNumber}\n👤 고객명: ${customerName}\n🛍️ 상품명: ${productName}\n💰 주문금액: ${orderAmount}원\n\n배송이 시작되었습니다.`); }
-
테스트 실행:
- 주문 금액이 100,000원 이상인 데이터를 입력한 후, 배송 상태를 체크하여 Slack 메시지가 전송되는지 확인합니다.
- 주문 금액이 100,000원 미만인 경우 메시지가 전송되지 않는지 확인합니다.