시프트 근무 직장에서 내일 누가 출사할지 알 수 있는 Slack용 Bot를 GAS(Google AppsScript)로 구현했다

현재 리모트 근무가 되고 있습니다만, 풀 리모트가 아니라 시프트제입니다.
때때로 출사일을 잊는 사람이 나오게 되었기 때문에, 상사가 스프레드 시트로 만드는 시프트 데이터를 베이스로, 저녁쯤 자동적으로 다음날의 출사 멤버를 Slack에 투고하는 Bot를 만들었습니다.

원본 데이터 및 최종 출력



Slack에 게시하는 예



저녁 5시~6시 사이에 다음 영업일의 시프트가 투고됩니다


원본 데이터의 예



상사가 Excel에서 만드는 것을 GoogleSpreadSheet에 복사합니다 ( "시프트 테이블"시트)


구현 방법



다음 영업일 이동용 시트 만들기



시프트 테이블이 포함된 시트와 동일한 스프레드시트에 새 시트를 작성하고 '다음 영업일 출사 예정'으로 이름을 지정하여 A1 셀에 다음 함수를 복사합니다.=query('シフト表'!A:D,"WHERE A= date '"&TEXT(WORKDAY(TODAY(),1),"YYYY-MM-DD")&"'",-1)

다음 영업일 일정에서 텍스트를 조립하고 Slack에 게시하는 코드 작성



Spreadsheet의 스크립트 편집기를 시작하고 다음 소스를 복사하여 (1)スプレッドシートのID, (2)Slack通知用のWebhook URL 부분을 채 웁니다.
이 2개의 취득 방법에 대해서는, 참고로 해 주신 다른 기사가 상세하므로 끝에 URL을 부기하고 있습니다. 그쪽을 참조하십시오.
function doPostSlack() {
  //土日の場合は実行しない
  var today_week = new Date().getDay();
  if (today_week == 0 || today_week == 6) { return true; }

  // 平日の場合のみ実行
  postSlack();
}

function postSlack() {
  // スプレッドシートを取得
  var obj = SpreadsheetApp.openById('(1)スプレッドシートのID'); 
  // 対象のシートを取得
  var sheet = obj.getSheetByName("翌営業日の出社予定"); 

  // 予定の日付を取得し、フォーマットして曜日をつける
  var date = sheet.getRange("A2").getValue()
  var week_ary = ['', '', '', '', '', '', ''];
  var week_num = date.getDay();
  var week = '('+week_ary[week_num]+')';
  date = Utilities.formatDate(date, 'Asia/Tokyo', 'yyyy/MM/dd');
  date = date + week;

  // 出力する情報をフォーマット
  // 出力例: 2020/11/24(火)---羽川:出社 /
  var values = sheet.getRange("B1:E2").getValues()
  var output = "";
  for (var j = 0; j < values[0].length; j++) {
    if (values[1][j] !== "") {
      output = output + values[0][j] + ":" + values[1][j] + " / ";
    }
  }
  output = date + "---" + output;
  Logger.log(output);

  // payload=データ本体のこと  Slackに送信(post)する内容
  var payload  = {
    'text'      :  output,
    'username'  : '出社予定',      //botの名前
    'channel'   : 'remote',   //投稿するチャンネル名
    'icon_emoji': ':hedgehog:',   //botのアイコン 
  };

  // Slackに送信
  var options = {
    'method'      : 'post',
    'contentType' : 'application/json',
    'payload'     : JSON.stringify(payload), // jsの値をJSON文字列に変換
  };

  var url = '(2)Slack通知用のWebhook URL';
  UrlFetchApp.fetch(url, options);
}

매일 자동 게시 설정



"편집""현재 프로젝트 트리거"에서 "트리거 추가"를 눌러 매일 17시~18시 사이로 이동합니다.


완성!



그리고는 지정한 시간까지 기다려 실제로 움직이는 것을 확인해 완료입니다.

참고 및 사사



아래의 기사를 주로 참고했습니다. 좋은 기사를 게시해 주셔서 감사합니다.(1)スプレッドシートのID , (2)Slack通知用のWebhook URL 의 취득 방법 에 대해서도 이쪽이 상세합니다.

【초보자용】GAS를 사용한 스프레드 시트와 Slack의 연계(bot 제작) htps : // 이 m/우나입니다만/있어 ms/971c5f7587아7bf8d076d

좋은 웹페이지 즐겨찾기