Help us understand the problem. What is going on with this article?

GASでGoogleカレンダーの予定をチャットワークに通知する

表題の通り、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/

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした