Google Apps Script를 활용한 슬랙봇 만들기

개발 방법

  1. https://api.slack.com/apps 에서 Create an app 버튼을 누릅니다.

image

  1. From scratch를 누르고 원하는 App name, workspace를 적어줍니다.

image

image

  1. 좌측 메뉴에서 Incoming webhook을 누르고, Activate해줍니다. 관리자 권한이 필요한 슬랙이라면 관리자의 승인을 받아주세요.

image

image

  1. Incoming Webhooks 페이지에서 [Add new webhook to Workspace] 버튼을 누릅니다

image

  1. 메세지 전송을 원하는 채널을 선택합니다.

image

  1. 웹훅 URL이 나왔어요. 이 URL을 이따 사용할거예요.

image

  1. 푸시를 원하는 메세지 디비를 구글닥스로 만들어줍니다. 그리고 메뉴에서 확장 프로그램 > Apps Scripts를 눌러줍니다.

image

  1. 스프레드시트를 읽어 원하는 슬랙 채널에 메세지를 보내는 코드를 작성합니다. url에는 아까 만든 웹훅 URL을 적어주고, 원하는 채널명도 바꿔서 적어줍니다. 아래 코드를 참고해주세요.

image

멋진 코드를 작성해주신 토스증권의 나소인 님 감사해요!

function sendtoslack() {
  var today = new Date();
  
  Logger.log(today);

  var url = "https://hooks.slack.com/services/T03FE7QJV/당신의웹훅URL"; 

  var sheet = SpreadsheetApp.getActive().getSheetByName('list');
  var dataRange = sheet.getDataRange();
  var values = dataRange.getValues();
  
  var searchValue = "0";
  var updateValue = "1";
  var updateColumn = 1; // the column number to update
  
  var updateRow = -1; // initialize to -1 to indicate value not found

  var totalCount = values.length;
  var currentCount = 0;
  
  for (var i = 0; i < values.length; i++) {
    currentCount++;
    if (values[i][0] == searchValue) {
      updateRow = i + 1; // add 1 to convert from 0-indexed to 1-indexed
      break;
    }
  }
  
  if (updateRow != -1) {
    var rangeToUpdate = sheet.getRange(updateRow, updateColumn, 1, 1);
    rangeToUpdate.setValue(updateValue);
  }

  var values = sheet.getRange(updateRow, updateColumn, 1, 5).getValues();
  var value = values[0];

  var payload = {
    "channel": "#원하는채널명",
    "blocks": [
      {
        "type": "section",
        "text": {
          "type": "mrkdwn",
          "text": "> _점심을 꽤나 둔둔하게 드신 모양이로군._\n> _후식으로 간단한 타입챌린지 하나 풀고가시게._\n"
        }
      },
      {
        "type": "divider"
      },
      {
        "type": "section",
        "text": {
          "type": "mrkdwn",
          "text": `:ts-boom: *[${value[1]}] ${value[2]}* (${currentCount - 2}/${totalCount - 2}) <${value[4]}|🔗>`
        },
        "accessory": {
          "type": "button",
          "style": "primary",
          "text": {
            "type": "plain_text",
            "text": "문제풀러가기🧩",
            "emoji": true
          },
          "url": `https://tsch.js.org/${value[3]}/play/ko`,
        }
      },
      {
        "type": "divider"
      }
    ]
  };

  Logger.log(payload);

  var options = {
    "method": "post",
    "contentType": "application/json",
    "payload": JSON.stringify(payload)
  };
  
  return UrlFetchApp.fetch(url,options);
  }
  1. [실행]을 누르면 테스트해보실 수 있어요.

image

  1. 시계 모양 아이콘을 눌러 트리거 페이지에 들어가고, [트리거 추가]버튼을 눌러 원하는 트리거 기준을 설정해줍니다.

image

  1. 완료! 고생하셨어요.

image

참고


Profile picture

진유림 a.k.a 테니스치다 손목 삔, 풋살하다 인대 나간 개발자 twitter

With love, Yurim Jin