Skip to content

Latest commit

 

History

History
162 lines (114 loc) · 6.7 KB

File metadata and controls

162 lines (114 loc) · 6.7 KB

Google Apps Script와 Slack API를 활용하여 Google Sheets에서 특정 칼럼이 체크되면 자동으로 Slack으로 배송 관련 메시지를 전송하는 시스템을 구축하는 방법을 안내해드리겠습니다. 또한, 추가 실습을 통해 배송 완료 시 다른 스프레드시트에 자동으로 업데이트하거나, 주문 금액이 10만 원 이상인 경우에만 메시지를 전송하는 기능도 구현해보겠습니다.


실습 2: 스프레드시트에서 배송 메시지 보내기

1. Google Sheets 설정

  1. 스프레드시트 생성:

    • Google Sheets에 접속하여 새로운 스프레드시트를 만듭니다.
    • 예시: "배송 관리 시트"
  2. 시트 구성:

    • 첫 번째 행에 헤더를 추가합니다: 주문번호, 고객명, 상품명, 배송상태, 주문금액
    • 배송상태 열은 체크박스 형식으로 설정합니다:
      • 해당 열을 선택한 후, 상단 메뉴에서 삽입 > 체크박스를 클릭합니다.

2. Slack Webhook 설정

  1. Slack에서 Incoming Webhook 활성화:

    • Slack 워크스페이스에서 Incoming Webhooks를 찾아 추가합니다.
    • Webhook을 보낼 채널을 선택하고 Add Incoming Webhooks integration을 클릭합니다.
  2. Webhook URL 복사:

    • 생성된 Webhook URL을 복사하여 나중에 사용할 수 있도록 저장해둡니다.

3. Google Apps Script 작성

  1. Apps Script 편집기 열기:

    • 스프레드시트에서 상단 메뉴의 확장 프로그램 > Apps Script를 클릭합니다.
  2. 스크립트 작성:

    • 아래의 코드를 입력합니다:

      // 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만 원 이상인 경우에만 메시지를 전송하도록 조건을 추가하였습니다.

  3. 트리거 설정:

    • Apps Script 편집기에서 왼쪽의 시계 아이콘(트리거)을 클릭합니다.

    • 트리거 추가 버튼을 눌러 새로운 트리거를 생성합니다.

    • 다음과 같이 설정합니다:

      • 함수: onEdit
      • 이벤트 소스: 스프레드시트
      • 이벤트 유형: 수정 시
    • 저장하면 스프레드시트에서 배송상태 열이 변경될 때마다 onEdit 함수가 자동으로 실행됩니다.

4. 테스트

  1. 테스트 데이터 입력:

    • 스프레드시트에 테스트용 데이터를 입력합니다.
    • 예시:
      • 주문번호: 001
      • 고객명: 홍길동
      • 상품명: 노트북
      • 주문금액: 150,000
  2. 배송상태 체크:

    • 해당 행의 배송상태 열에 체크를 하면, Slack의 지정된 채널로 메시지가 전송되는지 확인합니다.

추가 실습 1: 배송 완료 시 다른 스프레드시트에 자동으로 업데이트하기

  1. 완료된 주문 스프레드시트 생성:

    • Google Sheets에서 새로운 스프레드시트를 생성합니다.
    • 예시: "완료된 주문"
    • 첫 번째 행에 헤더를 추가합니다: 주문번호, 고객명, 상품명, 배송완료일
  2. 스크립트 수정:

    • 기존의 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);
      }
  3. 테스트 실행:

    • 배송상태를 체크하면 "완료된 주문" 스프레드시트에 해당 주문 정보가 자동으로 추가되는지 확인합니다.

추가 실습 2: 주문 금액이 10만 원 이상인 경우에만 메시지 전송하기

  1. 기존 스크립트 수정:

    • onEdit 함수 내부에서 주문 금액이 100,000원 이상인지 확인하는 조건을 추가합니다.
      if (isChecked && orderAmount >= 100000) {
        sendSlackMessage(`📦 주문번호: ${orderNumber}\n👤 고객명: ${customerName}\n🛍️ 상품명: ${productName}\n💰 주문금액: ${orderAmount}원\n\n배송이 시작되었습니다.`);
      }
  2. 테스트 실행:

    • 주문 금액이 100,000원 이상인 데이터를 입력한 후, 배송 상태를 체크하여 Slack 메시지가 전송되는지 확인합니다.
    • 주문 금액이 100,000원 미만인 경우 메시지가 전송되지 않는지 확인합니다.