🐷
Googleカレンダーの予定(の一部)をSlackチャンネルに通知させる
はじめに
部署全員のGoogleカレンダーの予定をSlackに出してほしいと依頼。
GoogleカレンダーはGASでのデータ取得でも、一度部署全員を「他のカレンダー」に登録しなければならないため、各自で設定してもらうようにした。
なお、Slack側の設定は以下参照。
code
main.js
function main(){
const calendar = CalendarApp.getDefaultCalendar();
const eventList = calendar.getEventsForDay(dayjs.dayjs().toDate()).reduce((eventList, event) => {
const e = new Event(event);
if(e.isTarget()) eventList.push(e.getText());
return eventList;
}, []);
if(!eventList.length) return;
Shomin.slackChannel(
PropertiesService.getScriptProperties().getProperty('webhook'),
`予定: ${calendar.getName()}\n${eventList.join('\n')}`
);
}
function setTrigger(){
ScriptApp.newTrigger('main').timeBased().everyDays(1).atHour(8).create();
Browser.msgBox('トリガーを設定しました。');
}
class/Event.js
class Event{
constructor(event){
this.title = event.getTitle();
this.startTime = dayjs.dayjs(event.getStartTime());
this.endTime = dayjs.dayjs(event.getEndTime());
}
// あれば
isTarget(){
const targetList = [
'予: '
];
return targetList.some(target => this.title.includes(target));
}
getText(){
return `${this.title} ${this.startTime.format('HH:mm')}~${this.endTime.format('HH:mm')}`;
}
}
使用ライブラリ
運用
- 各自に犬のボタンを押してもらう。犬の画像にはスクリプト「setTrigger」が設定されており、毎朝8時〜9時のトリガーが作成される。
- トリガーの通りに処理が自動実行する。
結果
従業員体験の向上について環境を良くしたり1on1したりと施策を打っていることも多いと思うが、こういった作業クラフティングでも従業員の負の作業を解消していきたい。
Discussion