컴퓨터/google spreadsheet

구글스프레드시트 slack 메시지 발송-조현정의AI실험실

풍경소리^^ 2025. 5. 20. 09:06

https://www.youtube.com/watch?v=jsl9Q5da6z4

 

claude

구글설문지 가 제출되었을 때 바로 슬랙 알림을 받고 싶어.

슬랙 웹훅 url을 활용할거야.

응답 시트에 넣을 앱스스크립트 코드를 짜줘.

 

크롬브라우저 주소창에

form.new

[질문] 탭에서 질문 만들고

제목 "신청서"

설문지 [응답] 스크린샷 하고

[응답] 탭 눌러서

Sheet 연결

 

claude

스크린샷 붙여넣고

슬랙 메세지를 아래와 같은 형식으로 받고 싶어.
다시 앱스스크립트 만들어줘.

-강의신청

이름:

연락처:

이메일:

 

코드 생성해주는 동안

 

슬랙 웹훅 url이 있어야 됩니다

https://www.youtube.com/watch?v=-XEPXWAVO6U

 

slack 사이트

시작하기

Google 계정으로 로그인

계정 나오면 클릭

계속

 

워크스페이스 생성

체크박스 마지막 빼고 모두 체크

워크스페이스 생성

 

설명

-워크스페이스-회사전체

-채널-부서

 

워크스페이스이름 "miero"

다음

사진

다음

 

팀에 또 누가 있나요?

이 단계 건너뛰기

 

현재 고객임의 팀은 어떤 일을 진행하고 계시나요?

(채널설정부분)

"조현정슬랙웹훅연습"

다음

제한된 무료 버전으로 시작하기

 

팀의 첫 번째 채널인 #슬랙웹훅연습 채널을 만나보세요

확인해보세요

...더보기

자동화

검색창에 

"incoming webhooks"

아래 나타나면

추가

 

Slack에 추가

 

채널에 포스트

채널 선택...

"슬랙웹훅연습"

수신 웹후크 통합 앱 추가

 

웹후크 URL

URL 복사

이름 사용자 지정

슉슉incoming-webhook

이미지

설정저장

 

https://slack.com/intl/ko-kr/

 

AI 업무 관리 및 생산성 도구

업무가 이루어지는 새로운 세상, Slack 전 세계에서 가장 사랑받는 업무용 운영 체제에 인력, 프로젝트, 도구, AI를 한데 모아보세요

slack.com

 

miero 

SLACK 실행하기

 

===

구글스프레드시트

확장프로그램

AppsScript

코드 붙여넣기

/**
 * 구글 설문지 응답이 제출될 때 슬랙으로 알림을 보내는 앱스크립트 코드
 * 
 * Copyright (c) 2025 Hyunjung Cho
 * MIT 라이센스에 따라 배포됩니다.
 * https://opensource.org/licenses/MIT
 * 
 * 사용 방법:
 * 1. 구글 스프레드시트에서 확장 프로그램 > Apps Script로 이동
 * 2. 아래 코드를 붙여넣기
 * 3. SLACK_WEBHOOK_URL 변수에 슬랙 웹훅 URL을 입력
 * 4. 변경사항 저장 (Ctrl+S 또는 ⌘+S)
 * 5. 트리거 설정: 왼쪽 사이드바의 시계 아이콘 클릭 > 트리거 추가
 * 6. 새 트리거 추가: onFormSubmit 함수, 이벤트 소스 '스프레드시트에서', 이벤트 유형 '양식 제출 시' 선택
 */


// 슬랙 웹훅 URL을 여기에 입력하세요
const SLACK_WEBHOOK_URL = 'YOUR_SLACK_WEBHOOK_URL_HERE';

/**
 * 폼 제출 시 실행되는 함수
 * @param {Object} e 폼 제출 이벤트 객체
 */
function onFormSubmit(e) {
  try {
    // 응답 데이터 가져오기
    const response = e.namedValues;
    
    // 응답 데이터에서 필요한 정보 추출
    const name = response['이름'] ? response['이름'][0] : '정보 없음';
    const phone = response['전화번호'] ? response['전화번호'][0] : 
                 (response['연락처'] ? response['연락처'][0] : '정보 없음');
    const email = response['이메일'] ? response['이메일'][0] : '정보 없음';
    
    // 슬랙 메시지 생성
    const message = {
      "blocks": [
        {
          "type": "section",
          "text": {
            "type": "mrkdwn",
            "text": "*🔴강의 신청*"
          }
        },
        {
          "type": "section",
          "text": {
            "type": "mrkdwn",
            "text": "*이름:* " + name
          }
        },
        {
          "type": "section",
          "text": {
            "type": "mrkdwn",
            "text": "*연락처:* " + phone
          }
        },
        {
          "type": "section",
          "text": {
            "type": "mrkdwn",
            "text": "*이메일:* " + email
          }
        }
      ]
    };
    
    // 슬랙으로 메시지 전송
    sendToSlack(message);
    
    // 로그 기록
    Logger.log('슬랙 알림이 성공적으로 전송되었습니다.');
  } catch (error) {
    Logger.log('오류 발생: ' + error.toString());
  }
}

/**
 * 슬랙으로 메시지 전송 함수
 * @param {Object} message 슬랙 메시지 객체
 */
function sendToSlack(message) {
  // 메시지를 JSON 문자열로 변환
  const payload = JSON.stringify(message);
  
  // 슬랙 API로 POST 요청 보내기
  const options = {
    'method': 'post',
    'contentType': 'application/json',
    'payload': payload
  };
  
  // 요청 전송
  const response = UrlFetchApp.fetch(SLACK_WEBHOOK_URL, options);
  
  // 응답 로깅
  Logger.log(response.getContentText());
  return response;
}

/**
 * 스크립트 테스트 함수 - 직접 실행해서 설정이 제대로 되었는지 확인할 수 있습니다
 */
function testSlackNotification() {
  // 테스트 데이터 생성
  const testData = {
    '이름': ['홍길동'],
    '연락처': ['010-1234-5678'],
    '이메일': ['test@example.com']
  };
  
  // 테스트 이벤트 객체 생성
  const testEvent = {
    namedValues: testData
  };
  
  // onFormSubmit 함수 실행
  onFormSubmit(testEvent);
}

/**
 * MIT 라이센스
 * 
 * Copyright (c) 2025 Hyunjung Cho
 * 
 * 이 코드의 복제본과 관련된 문서화 파일("코드")을 획득하는 사람은 
 * 누구라도 코드를 별다른 제한 없이 무상으로 사용할 수 있는 권한을 부여 받습니다.
 * 여기에는 코드의 복제본을 무제한으로 사용, 복제, 수정, 병합, 공표, 배포, 
 * 서브라이선스 설정 및 판매할 수 있는 권리와 이상의 행위를 코드를 제공받은 
 * 다른 수취인들에게 허용할 수 있는 권리가 포함되어 있습니다.
 * 
 * 위 저작권 안내 문구와 본 허가 문구는 모든 코드의 복제본 또는 중요한 부분에 
 * 포함되어야 합니다.
 * 
 * 코드는 "있는 그대로" 제공되며, 상품성, 특정 목적에 대한 적합성 및 비침해에 
 * 대한 보증을 포함한 어떠한 형태의 보증도 명시적이나 묵시적으로 제공되지 않습니다.
 * 저작권자는 어떠한 경우에도 코드의 사용 또는 기타 취급과 관련하여 발생하는 
 * 계약 위반, 불법 행위 또는 기타 행위로 인한 손해를 포함한 어떠한 청구, 손해 또는 
 * 기타 책임에 대해 책임을 지지 않습니다.
 */

 

트리거 설정

왼쪽에 시계모양

 

실행할 함수 선택

onFormSubmit

이벤트 유형 선택

양식 제출 시

저장

 

구글로그인

고급

Go to 신청서(unsafe)

허용

 

상단 오른쪽

응답자 링크 복사

 

응답자는 링크에 등록

구글폼 주소로 "신청서" 등록