表題の通り、GoogleAppsScriptを使ってGoogleカレンダーの自分の予定を取得し、チャットワークに通知するやり方を書きます。
##なぜやるか
弊社は毎朝みんなチャットワークに自分の作業予定を書いていくのですが、毎朝毎朝Googleカレンダー見て手打ちしていくのがめんどくさい・・・となったのでやってみることにしました!
##やらないといけないこと
大きく4つあります
①ChatworkのAPIキー取得
②GoogleScriptを作成する
③GoogleScriptにchatworkライブラリ追加
④GASで実装
⑤タイマー設定
順を追って見ていきましょう
##①ChatworkのAPIキー取得
外部サービスからチャットワークに何かをする場合には、必ずAPIキーを取得する必要があります。
チャットワークにログインしてから右上の自分のアイコン>API設定を開いてください
ここで
●APIの利用申請という画面が出て「組織管理者様からの承認が必要です。」と言われた方
→申請ボタンを押して、管理者の方に問い合わせましょう
●上記が出なかった方
→そのままAPIキーを取得しましょう
※APIキーは非常に重要なものなので、誰かに教えたりしないようにしましょう
取得したAPIキーは後ほど使用しますので、控えておいてください
##②GoogleScriptを作成する
まずGASを開きましょう
今回はスプレッドシートなどは使わないのでGoogleのトップページ(検索画面ですね)>右上の点が9個あるアイコンをクリック>ドライブを開きます。
マイドライブが出てくると思いますので
新規>GoogleAppsScriptを選択します
※使ったことない方は「その他」の中、あるいは「アプリを追加」から追加しないといけないかもしれません
ドライブにアプリを追加画面から「GoogleAppsScript」を追加すると選べるようになります
##③GoogleScriptにchatworkライブラリ追加
GASのライブラリにChatworkライブラリを追加することで、連携が簡単に出来るようになります。
GASを開いたらリソース>ライブラリを開きます。
ライブラリを開いたら
https://github.com/cw-shibuya/chatwork-client-gas
こちらのGitHubのReadmeに書かれているプロジェクトキーをコピーし、ライブラリの検索を行います
タイトル:ChatWorkClient(自動入力)
バージョン:最新を選択
識別子:ChatWorkClient
デベロッパーモード:無効
で保存しましょう
##④GASで実装
そうしましたらいよいよ実装です。
今回は前提条件として
・終日予定は送信しない
・チャットワークの3つの部屋に送信
・土日と祝日は送信しない
をしています。
/* 指定のカレンダーの本日の予定をチャットワークに送る */
function sendSchedule() {
if(!isHoliday()){ // 土日と祝日は送信しない
var myCals=CalendarApp.getCalendarById('qiitaXXXXXX@gmail.com'); //特定のIDのカレンダーを取得(カレンダーのIDはカレンダーを作成したgmailのアドレスです)
var myEvents=myCals.getEventsForDay(new Date()); //カレンダーの本日のイベントを取得
/* チャットワークに送る文字列のヘッダー */
var strBody = "[info][title]【名前】本日の予定:" + Utilities.formatDate(new Date(), 'JST', 'yyyy/MM/dd') + "[/title]"
/* イベントの数だけ繰り返し */
for(var i=0;i<myEvents.length;i++){
if(!myEvents[i].isAllDayEvent()){ // 終日イベントはスキップする
var strTitle=myEvents[i].getTitle(); //イベントのタイトル
var strStart=_HHmm(myEvents[i].getStartTime()); //イベントの開始時刻
var strEnd=_HHmm(myEvents[i].getEndTime()); //イベントの終了時刻
strBody=strBody + strStart + ' - ' + strEnd + ' ' + strTitle + '\n'; //チャットワークに送る文字列にイベント内容を追加
}
}
strBody = strBody + '[/info]';
/* チャットワークにメッセージを送る */
var apiKey = '先程取得したAPIkeyを入れてください';
var cwClient = ChatWorkClient.factory({token:apiKey}); //チャットワークAPI
var roomid = [123456, 789012, 345678]; // 送りたい部屋のURLのridより後ろの数字を入 れます
for(var i=0;i<roomid.length;i++){
cwClient.sendMessage({
room_id:roomid[i], //ルームID
body: strBody
});
};
};
}
/* 時刻の表記をHH:mmに変更 */
function _HHmm(str){
return Utilities.formatDate(str, 'JST', 'HH:mm');
}
/* 休みの日を判定*/
function isHoliday(){
var today = new Date();
//土日か判定
var weekInt = today.getDay();
if(weekInt <= 0 || 6 <= weekInt){
return true;
}
//祝日か判定
var calendarId = "ja.japanese#holiday@group.v.calendar.google.com";
var calendar = CalendarApp.getCalendarById(calendarId);
var todayEvents = calendar.getEventsForDay(today);
if(todayEvents.length > 0){
return true;
}
return false;
}
出来上がったら実行をして、正しく送れることを確認しましょう
##⑤タイマー設定
実装が終わったらタイマーを設定します
編集>現在のプロジェクトのトリガーを選択します
保存したスクリプトのトリガーを設定する画面が開きますので、新規をクリックしてトリガーを設定します
特定の日なのか、日付なのか時間なのか分なのか、細かく設定できますので用途にあわせて設定しましょう
以上です!
こちらを参考にさせて頂きました
https://tonari-it.com/gas-chatwork-send-message-mychat/