GAS를 사용하여 스프레드 시트를 업데이트 할 때 Slack 알림을 건너 뛰는 bot를 만들었습니다.

영업을 할 때 대행사와 CRM을 공유할 수도 없기 때문에 스프레드시트로 안건 관리를 하고 있던 곳, 시트가 갱신되었을 때에 Slack 통지가 날아오면 편리하다고 생각하고 Google Apps Script 를 사용하여 구현해 보았습니다.

이미지는 시트의 G 열이 업데이트 될 때 "기업 이름", "직원 수"및 "상태"를 Slack에 알립니다.





Github



matsukazu1112/spreadsheet_notification

거친 흐름


  • GAS 시작
  • Incoming Webhook에서 Slack과 GAS 간의 협력 설정
  • GAS 스크립트 실행 트리거 생성
  • 코드 구현

  • 1. GAS 시작



    스프레드시트 위의 막대에서 "도구"→ "스크립트 편집기"로 시작할 수 있습니다.



    2. Incoming Webhook에서 Slack과 GAS의 연동 설정



    절차는 이 기사을 참조했습니다.

    3. GAS 스크립트 실행 트리거 생성



    「편집」→「현재 프로젝트의 트리거」를 선택.


    오른쪽 하단의 "트리거 추가"를 선택.


    실행할 함수와 이벤트 소스를 설정합니다. 이 경우 스프레드시트 변경을 트리거로 저장합니다.


    4. 코드 구현



    여기에서가 프로덕션입니다.

    최초로 스프레드 시트로부터 변경의 내용을 취득해 오는 메소드를 정의.
    /**
     * スプレッドシートから必要なデータを取り出す
     *
     * @ param object e
     * @ return data
     */
    function getValue(e){  
      var notifySheet = SpreadsheetApp.getActiveSpreadsheet();
      var active_sheet = SpreadsheetApp.getActiveSheet();
      var my_cell = active_sheet.getActiveCell();
      var active_sheet_column = my_cell.getColumn();
      var rowNum = my_cell.getRow();
    
      var data =
    '企業名:'+ notifySheet.getRange('B' + rowNum).getValue()+ '\n' 
    +'従業員数:' + notifySheet.getRange('C' + rowNum).getValue() + '\n' 
    +'案件ステータス:' + notifySheet.getRange('G' + rowNum).getValue() + '\n'
    +'https://docs.google.com/spreadsheets/hogehoge';
    
      if (active_sheet_column !== status_column){
        return;
      }
    
      return data;
    }
    

    getValue라는 함수로, data 변수로 취득한 내용을, 나중에 기재하는 메인 처리에 값을 돌려주고 있습니다.

    이번에는 스프레드 시트의 G 열이 편집되었을 때만 알림을 보내고 싶으므로 if 문을 사용하여 활성 시트의 열이 status_culumn (= 7 열과 별도로 정의되어 있음)과 일치하는 경우에만 , 데이터를 반환하도록 설정했습니다.
    /**
     * スラックにPostする際の詳細の設定
     *
     * @ param object value
     * @ return void
     */
    function postMessage(value){
      var options = {
        'method': 'post',
        'headers': {'Content-type': 'application/json'},
        'payload' : JSON.stringify({
        'channel' : '#チャンネル名',
          'attachments':[
           {                                                              
            'fallback': '代理店案件アップデート通知',
            'color': '#36a64f',
            'title': '代理店が案件を更新しました',
            'title_link': 'https://docs.google.com/spreadsheets/hogehoge',
            'text': value,                                                 
           }
          ]
        })
      };
      UrlFetchApp.fetch("https://hooks.slack.com/services/hogehoge", options);  
     }
    

    여기에서는 Slack에 게시할 때 고급 설정을 정의합니다. 이 기사 를 참고했습니다.

    위에서 정의해 온 처리와 그 반환값을 아래의 메인 처리를 통해 수행하고 있습니다. e는 스프레드시트에서 얻은 값입니다. e를 getValue 메소드에 전달하고 그 결과를 value라는 변수로 정의합니다. 또한 앞서 언급했듯이 G 열 이외의 데이터를 검색하고 매번 Slack에 알림을 보내 버리면 우울하기 때문에 value 값이있을 때만 처리를 수행한다는 것을 if 문으로 정의합니다. 있습니다.
    /**
     * メイン処理
     *
     * @ param object e
     * @ return void
     */
    function postSheetChange(e){
       
      const value = getValue(e);
    
      if (value) {
        postMessage(value);
      }
    }
    

    위의 방법으로 무사히 스프레드시트의 G열을 편집했을 때 Slack에게 알림이 날아갔습니다!

    좋은 웹페이지 즐겨찾기