시프트 근무 직장에서 내일 누가 출사할지 알 수 있는 Slack용 Bot를 GAS(Google AppsScript)로 구현했다
11836 단어 슬랙GoogleSpreadSheetgas
때때로 출사일을 잊는 사람이 나오게 되었기 때문에, 상사가 스프레드 시트로 만드는 시프트 데이터를 베이스로, 저녁쯤 자동적으로 다음날의 출사 멤버를 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
Reference
이 문제에 관하여(시프트 근무 직장에서 내일 누가 출사할지 알 수 있는 Slack용 Bot를 GAS(Google AppsScript)로 구현했다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/oosawa/items/3324d8a67bea3847d88b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
다음 영업일 이동용 시트 만들기
시프트 테이블이 포함된 시트와 동일한 스프레드시트에 새 시트를 작성하고 '다음 영업일 출사 예정'으로 이름을 지정하여 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
Reference
이 문제에 관하여(시프트 근무 직장에서 내일 누가 출사할지 알 수 있는 Slack용 Bot를 GAS(Google AppsScript)로 구현했다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/oosawa/items/3324d8a67bea3847d88b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(시프트 근무 직장에서 내일 누가 출사할지 알 수 있는 Slack용 Bot를 GAS(Google AppsScript)로 구현했다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/oosawa/items/3324d8a67bea3847d88b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)