【月末になったら】顧問先にチャットワークで自動でメッセージを送信するGAS


以前、チャットワークで顧問先に対して月初に前月分の資料を請求するメッセージをGAS(Google Apps Script)で自動化する記事を書きました。



今回は顧問先に対してリマインダーの目的で【月末】に自動でメッセージを送るGAS(Google Apps Script)を考えましたので記事にしてみます。

月末は振込や給与の支払いなど忘れてはいけないことがたくさんある。


自社に経理を担当する人がいたり、自社に経理部がある場合にはあまり問題にならないと思いますが、一人で会社を運営している場合、業務が立て込んでいたりすると、月末の支払いや給料の振込などをうっかり忘れてしまうことがあります。


そこで、これを防ぐために毎月の月末になったらチャットワークで顧問先に対して自動でメッセージを送る仕組みをGAS(Google Apps Script)で作ればいいのではないかと考えました。


今回は月末に給料の振込処理をきちんと行ったかを確認する場面を想定して記事を進めていくことにします。

毎月、月末になったらチャットワークで顧問先に自動でメッセージを送信するGAS(Google Apps Script)


今回はこんな感じで毎月、月末になったらチャットワークで顧問先に自動でメッセージを送信するGAS(Google Apps Script)を作りました↓

function chatworksendmsg() {
  
  //■実行内容の説明。 月末に役員報酬の支払い状況を確認するメッセージをチャットワークでを自動で送信するGAS 
  //【var room_id】に送信したい相手のチャットワークのルームIDを入力すると記述している文章が送信される。
  //GASのトリガー機能を使用して毎日スクリプトを実行し、指定した日付(月末になったら)チャットワークでメッセージを送付することができる。
  
  //■変数の宣言

  let today = new Date(); //今日の日付を取得する

  let year = today.getFullYear(); //今日の「年」を取得する
  let nextmonth = today.getMonth()+1;//来月の「月」を取得する getmonthは0から始まる。
  let day1 = new Date(year,nextmonth,0).getDate();//今月の末日を取得する
  
  let day2 = today.getDate();  //今日が「何日か」取得する

  //■ifで判定させて今日の日付が月末ならチャットワークにメッセージを送る。

  if(day1===day2){
  
    //■チャットワークを操作するために必要な部分  
    
      let api_token   = 'ここにAPIトークンを張り付ける'; // チャットワークAPIのAPIトークンを入力する
      
      let room_id     = 123456789;     // ■送信先のチャットのidを入力する。確認方法は
      
      let cw = ChatWorkClient.factory({token: api_token});
      
      //■変数の宣言かつメール文章の作成部分 
      
      let text1=(`お世話になります。

    本日は月末になります(${year}年${nextmonth}月${day1}日)が

    役員報酬の振り込みはお済でしょうか?

    今一度ご確認をお願いいたします。`);
      
      //■実行部分
      
      cw.sendMessage({room_id: room_id, body: text1});
  }
}


23行目の箇所にチャットワークのAPIトークンと記載して、25行目の箇所にメッセージを送信したい相手のルームIDを記載して使ってください。

この辺の確認方法は以前の記事を参考にしていただければと思います↓



うまくいくと月末にこんな感じでチャットワークでメッセージが送信されます↓

月末を取得するにはnew Date(年,月,0)を指定するといい。


今回のGAS(Google Apps Script)でポイントとなるところは「月末」をどうやって取得するかということがあります。

月末は月によっては31日のときもあれば30日のときもあり、28日のときもあります。
以前の記事のように毎月1日であれば難しくないのですが、月末の場合、月によって月末の日付が変わってしまうのでそこをうまく取得しないといけません。


Google先生に聞いたところ、javascriptで月末の日付を取得するにはnew Date(年、月、0)と指定するといいことがわかりました。


そして、この場合の「月」の部分ですが、当月の月ではなくて翌月の月を設定しないといけません。
月を取得するにはgetMonth()で取得するのですが、このgetMonth()は0から始まるという特徴があるようで、表で示すとこんな感じになります。


例えば6月をgetMonth()で取得した場合には戻り値?としては「5」が返ることになります。
なので、翌月をgetMonth()で取得したい場合には+1をする必要があります。

今回はnew Date(年、月、0)の「月」には翌月を指定する必要があるのでこの考え方を使っています。

スクリプトのこの部分です↓



まず変数「today」にnew Date()を格納することでスクリプトを実行したときの日付のデータを取得します。

次に、変数「year」にgetFullYear()を使って変数「today」で取得した日付のデータから「年」のデータだけを引っこ抜きます。

次に「月」のデータを引っこ抜きたいので変数「nextmonth」にgetMonth()+1を使って変数「today」で取得した日付のデータから「月」のデータだけを引っこ抜きます。
+1をすることで翌月のデータを引っこ抜くことになります。


これで、「年」「月」のデータが準備できたので、それを変数「day1」に
new Date(year,nextmonth,0)とすることで格納しています。

例えば2021年6月20日にこのスクリプトを実行した場合は変数「day1」にはスクリプト実行時の月末が格納されるので2021年6月30日が格納されることになります。


最後にgetDate()とすることで「日」のデータだけをひっこ抜いています。
上の具体例でいうところの2021年6月30日から「30日」のデータだけを引っこ抜くイメージです。


IFでGASを実行した日が【月末かどうか】を判定させる。


上で説明した変数「day1」で今月の月末の日付を取得しておき、変数「day2」でスクリプトを実行した日の日付を取得します。



次にifを使ってday1とday2の日付が一致しているかどうかを判定させています。



判定の結果、一致したら(つまりスクリプトを実行した日が月末なら)チャットワークで自動でメッセージ送る処理にすすむようにしています。

なので一致しなければその時点でスクリプトは動作を終了します。

トリガー機能を使って毎日GAS(Google Apps Script)を実行させる。


トリガー機能を使って今回作成したGAS(Google Apps Script)を毎日実行させます。
下記の箇所からトリガー機能を設定していきます。


こんな感じでトリガー機能を設定しました↓


日付ベースのタイマーにすることで今回作成したGAS(Google Apps Script)が毎日実行されます。今回の場合には毎日午前9時~10時の間にスクリプトが実行されます。


毎日実行されますが、実際には変数day1と変数day2が一致する【月末】にならないとチャットワークで自動でメッセージは送られることはありません。


結果として月末に自動でメッセージを送ることができるようになります。


まとめ


顧問先に対してリマインダーの目的で【月末】に自動でメッセージを送るGAS(Google Apps Script)を考えました。


月末を取得する点と、ifで月末かどうかを判定させる点が以前の記事とは違い論点が増える感じでしょうか。


なお、源泉所得税の支払いがきちんとできているか、住民税の支払いがきちんとできているかなど、月末以外での確認のメッセージをチャットワークで自動で送る場合には今回の記事ではなく以前の記事を参考にしていただければ実行可能です。





【本日の近況報告】


Googleからブログのテキストサイズが小さいとメールが来たので標準の1.1倍にサイズを変更。
スマホでも割と見やすい文字サイズになりました。

あと、近所の歯科医院に久しぶりに歯科検診と歯のクリーニングに行きました。
特に虫歯もないということで安心しました。

【本日の1曲】

The Human Beinz – Nobody But Me

ノーバディ!!が連呼されるモッズ系のクラブイベントでよくかかるイメージがある一曲。

個人的には28秒くらいの「ブガルー!!」とシャウトする部分が好きです。

そういえばバンド名と曲名をちゃんと知ったのこれが初めてかもしれません。曲自体は何回もきいたことありましたが。