본문 바로가기

verdantjuly/Today I Learned

TIL 20231226

728x90

이번 주 목표

지원하기 (하루 2개)

리액트 강의 듣기 (최소 하루 소강의 2개)

오늘 목표

지원하기 (하루 2개)

리액트 강의 듣기 (최소 하루 소강의 2개)

자기소개서 초안 작성하기

오늘 한 것

지원하기 : 2개

DMsender : 업무 자동화 앱 스크립트

 

1. DMsender

구글 스프레드시트 - 슬랙 연동 자동화 앱 스크립트 코드

  1. 구글 스프레드 시트 2열에 이메일을 입력한다.
  2. 해당 이메일로 워크스페이스에 가입된 슬랙 유저에게 DM이 간다.
  • 제작 목적
    스파르타 코딩클럽 커리어톤 업무 중 자동화의 필요성과 가능성을 느껴 제작

  • 참고 자료
    Chat GPT
    Google API 공식 문서들
    Slack API 공식 문서들

function onEdit(e) {
  // 편집된 시트의 정보 가져오기
  if (e) {
    var sheet = e.source.getSheetByName("sheet"); // 시트 이름을 적절히 변경
    var range = e.range;

    // 이메일이 입력된 열의 정보 가져오기 (예: 이메일이 있는 열이 2번째 열일 경우)
    var emailColumn = 2; // 이메일이 있는 열의 번호를 적절히 변경
    var email = sheet.getRange(range.getRow(), emailColumn).getValue();

    // Slack API를 사용하여 Slack ID 찾기
    var slackId = getSlackIdByEmail(email);

    if (slackId) {
      // Slack으로 보낼 메시지 생성
      var message = "슬랙 DM 메시지 내용";

      // Slack으로 DM 보내기
      sendSlackDM(slackId, message);
    } else {
      Logger.log("Slack ID를 찾을 수 없습니다.");
    }
  } else {
    Logger.log("이벤트 정보가 없습니다.");
  }
}

// Slack API를 사용하여 이메일로 Slack ID를 찾는 함수
function getSlackIdByEmail(email) {
  // Slack API 호출을 위한 Slack App의 OAuth Access Token
  var slackAccessToken =
    PropertiesService.getScriptProperties().getProperty("slackAccessToken");

  // Slack API 호출 URL
  var apiUrl = "https://slack.com/api/users.lookupByEmail";

  // Slack API 호출 옵션 설정
  var options = {
    method: "post",
    contentType: "application/x-www-form-urlencoded",
    headers: {
      Authorization: "Bearer " + slackAccessToken,
    },
    payload: "email=" + encodeURIComponent(email),
    muteHttpExceptions: true,
  };

  // Slack API 호출 및 응답 처리
  var response = UrlFetchApp.fetch(apiUrl, options);
  var responseData = JSON.parse(response.getContentText());

  // Slack API 응답에서 Slack ID 추출
  if (responseData.ok) {
    return responseData.user.id;
  } else {
    Logger.log("Slack API 오류: " + responseData.error);
    return null;
  }
}

// Slack으로 DM을 보내는 함수
function sendSlackDM(slackId, message) {
  // Slack API 호출을 위한 Slack App의 OAuth Access Token
  var slackAccessToken =
    PropertiesService.getScriptProperties().getProperty("slackAccessToken");

  // Slack API 호출 URL
  var apiUrl = "https://slack.com/api/chat.postMessage";

  // Slack API 호출 옵션 설정
  var options = {
    method: "post",
    contentType: "application/json",
    headers: {
      Authorization: "Bearer " + slackAccessToken,
    },
    payload: JSON.stringify({
      channel: slackId, // Slack ID를 사용하여 DM을 보낼 대상 지정
      text: message,
    }),
    muteHttpExceptions: true,
  };

  // Slack API 호출 및 응답 처리
  var response = UrlFetchApp.fetch(apiUrl, options);
  var responseData = JSON.parse(response.getContentText());

  // Slack API 응답 확인
  if (responseData.ok) {
    Logger.log("Slack DM이 성공적으로 전송되었습니다.");
  } else {
    Logger.log("Slack API 오류: " + responseData.error);
  }
}

 

사용을 위해서 해야 할 일

1. 슬랙 access token 발급

2. 구글 앱 스크립트 oauth 권한 부여

3. 앱 스크립트 property 설정


KPT

Keep

열심히 하는 것

Problem

목표를 잊는 것

Try

목표를 꼭 맞추지 않아도 되니 가치와 가능성이 있는 일이라면 시간 투자하기

소감

자동화에 성공했다.

앱 스크립트이고 GPT를 많이 이용해 내가 뭘 했다 하기엔 뭐하지만

개발에 있어서 중요한 포인트를 넘어선 것 같아 기쁘다. 

 

 

 

 

 

 

'verdantjuly > Today I Learned' 카테고리의 다른 글

TIL 20240103  (0) 2024.01.03
TIL 20240102  (4) 2024.01.02
TIL 20231224  (0) 2023.12.24
TIL 20231222  (0) 2023.12.22
TIL 20231221  (2) 2023.12.22