LoginSignup
1
0

More than 5 years have passed since last update.

gasとChatWorkで出退勤の打刻を促す

Last updated at Posted at 2019-01-03

今の会社ではクラウド勤怠を導入しているのだが、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#holiday@group.v.calendar.google.com";
  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で生成したトリガーを削除してあげないとどんどん増えていくので注意が必要。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0