gasとChatWorkで出退勤の打刻を促す
2006 ワード
今の会社ではクラウド勤怠を導入しているのだが、PCやスマホから打刻するため忘れることがちょこちょこあった。
出勤時間5分前と退勤時間にChatWorkで通知するようにしてみた。
var kintaiUrl = "[hr]クラウド勤怠システムのURL";
var msgMorning = "[toall]\nもうすぐ始業時間だよ、打刻を忘れないようにしてね! \n" + kintaiUrl;
var msgEvening = "[toall]\n終業時間だよ、打刻を忘れないようにしてね! \n" + kintaiUrl ;
// トリガーを始業時間5分前にセット
function setTrigger() {
var triggerDay = new Date();
var hours = triggerDay.getHours();
// if文の条件はgasのデフォルトトリガーを7時〜8時、16時〜17時の間で設定しているため。いらない気もするが一応、、、
if (hours == 7) {
triggerDay.setHours(8);
triggerDay.setMinutes(55);
// triggerDayに設定した時間で新しいトリガーを作成
ScriptApp.newTrigger("dakokusite").timeBased().at(triggerDay).create();
} else if (hours == 16) {
triggerDay.setHours(18);
triggerDay.setMinutes(00);
ScriptApp.newTrigger("dakokusite").timeBased().at(triggerDay).create();
}
}
// その日のトリガーを削除する
function deleteTrigger() {
var triggers = ScriptApp.getProjectTriggers();
for(var i = 0; i < triggers.length; i++) {
if (triggers[i].getHandlerFunction() == "dakokusite") {
ScriptApp.deleteTrigger(triggers[i]);
}
}
}
function dakokusite() {
deleteTrigger();
var client = ChatWorkClient.factory({token: "APIトークン"});
var today = new Date();
var hours = today.getHours();
// 祝日判定用
var calendarId = "ja.japanese#[email protected]";
var calendar = CalendarApp.getCalendarById(calendarId);
var todayEvents = calendar.getEventsForDay(today);
if (hours == 8 && todayEvents.length == 0) {
client.sendMessage({
room_id: チャットワークのルームID,
body: msgMorning});
} else if (hours == 18 && todayEvents.length == 0) {
client.sendMessage({
room_id: チャットワークのルームID,
body: msgEvening});
}
}
gasのトリガーは細かい時間指定ができないが、setTrigger関数のよう実装すれば細かく指定できる。ただ、新しいトリガーを生成しているので、deleteTriggerで生成したトリガーを削除してあげないとどんどん増えていくので注意が必要。
Author And Source
この問題について(gasとChatWorkで出退勤の打刻を促す), 我々は、より多くの情報をここで見つけました https://qiita.com/goriland/items/8e026e3c14e4155b77af著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .