kubell Creator's Note

ビジネスチャット「Chatwork」のエンジニアのブログです。

ビジネスチャット「Chatwork」のエンジニアのブログです。

読者になる

【GASで業務効率化】ChatworkのタスクをGoogleカレンダーに登録する

※2020年9月時点の情報です。今後の仕様変更により利用できなくなる場合もございます。

こんにちは、Chatworkカスタマーサクセスチームのさかぐち(cw-sakaguchi)です。

「Google Apps Script(GAS)」を利用して、Chatworkで「業務効率化」する手順を不定期に更新していこうと思います!

よろしくお願いします!

最近、実際のお客さまよりいただいたお声の中で

GoogleカレンダーにChatworkのタスクを登録したい」というご要望を聞きました。

コンサルママとノマドパパを運営されているながつまさんの記事を参考に作っていきます!

life89.jp

目次

Google Apps Scriptとは

gsuite.google.co.jp

Googleが提供しているJavaScriptベースのスクリプト言語です。

インストール作業等は不要でGoogleのサーバーで実行されます。実行するために必要なものは以下の通りです。

  • Googleアカウント
  • ネットワーク環境
  • ブラウザ

手順

では、早速「GoogleカレンダーにChatworkのタスクを登録する」手順を紹介していきます。

タスク登録用のGoogleカレンダーを作成する

Chatworkのタスク登録用の新しいカレンダーを作成してください。

support.google.com

カレンダーIDを取得する

ChatworkのタスクをGoogleカレンダーに登録する際に、「カレンダーID」が必要になります。

Googleカレンダーの設定画面からタスク登録用カレンダーの「カレンダーID」を確認してください。

カレンダーID

確認した「カレンダーID」はメモ帳などに保存してください(後ほど使います)

Chatwork API Tokenの発行

今回は、Chatwork APIを利用してタスクを取得するため、Chatwork API Tokenを取得します。

以下の手順に沿って発行してください。

https://help.chatwork.com/hc/ja/articles/115000172402-API%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%82%92%E7%99%BA%E8%A1%8C%E3%81%99%E3%82%8B

取得できた「API Token」はメモ帳などに保存してください(後ほど使います)

Google Apps Scriptの作成

1.「ドライブ」を開き、「Google Apps Script」を新規作成

「Google Apps Script」を新規作成

2.プロジェクト名を設定

プロジェクト名を設定

3.以下のコードをコピペし、【編集対象】と書かれている部分を修正

// 【編集対象】Chatwork APIトークン
const token = 'ここにChatwork APIトークン';
//【編集対象】googleカレンダーID
var calendar_id = 'ここにgoogleカレンダーID';

// 識別キー
var SIGNATURE = "fromChatWork";

function setEventFromChatworkTask(){
  
  // 最初にすべての予定をクリアする
  clearAllEvents();
  
  // Chatworkより未完了タスクを取得
  var params = {
    headers : {"X-ChatWorkToken" : token},
    method : "get"
  };
  var url = "https://api.chatwork.com/v2/my/tasks?status=open";
  var strRespons = UrlFetchApp.fetch(url, params);

  // タスクがない場合は終了
  if(strRespons == ""){
    return false;
  }

  // タスクをJSON形式に変換
  var json = JSON.parse(strRespons.getContentText());
  
  // googleカレンダーオブジェクト作成
  var calendar = CalendarApp.getCalendarById(calendar_id);
  
  // タスク毎に予定を作成
  json.forEach(function(task) {

    // タイトルを設定
    var title = task.body;
    title = title.split(String.fromCharCode(10)).join(' '); // 改行をスペースに置換
    title = title.replace(/\[/g, "<"); // chatworkのタグを "[" → "<" に変換
    title = title.replace(/\]/g, ">"); // chatworkのタグを "]" → ">" に変換
    title = title.replace(/<("[^"]*"|'[^']*'|[^'">])*>/g, ""); // タグを削除
    title = title.substring(0,50); // タイトルは50文字で切る
    
    // 期限のないタスクの場合はログを残してスキップ
    if( task.limit_time !== 0 ){
      
      // UNIXTIMEを変換してdateにセット
      var date = new Date( task.limit_time * 1000 ); 
      
      // 説明欄を設定
      var description = task.body;
      description += String.fromCharCode(10) + "【グループチャット】";
      description += String.fromCharCode(10) + task.room.name; // ルーム名
      description += String.fromCharCode(10) + "https://www.chatwork.com/#!rid" + task.room.room_id; // ルームURL
      description += String.fromCharCode(10) + "【依頼者】" + task.assigned_by_account.name; // 依頼者
      
      var options = {description: description}; 
      
      // 終日のイベントを作成
      var event = calendar.createAllDayEvent(title, date, options);
      
      // イベントにタグ付け
      event.setTag(SIGNATURE, "true");
    }
  });
}

function clearAllEvents() {
  
    // googleカレンダーオブジェクト作成
    var calendar = CalendarApp.getCalendarById(calendar_id);
  
    // 今日の日付取得
    var date = new Date();
  
    // 今日の年、月、日を格納
    var year = date.getFullYear();
    var month = date.getMonth()+1;
    var day = date.getDate();
  
    // 前後1年間の予定を取得
    var events = calendar.getEvents(new Date(year - 1, month ,day), new Date(year + 1, month, day));

    // イベントの数だけ繰り返し処理
    for(var n=0; n<events.length; n++){

      // カレンダーの説明に指定の単語があれば予定を削除
      if ( events[n].getTag(SIGNATURE) == "true" ) {
        events[n].deleteEvent();
      }

    }
}

4.保存

トリガーの設定

今回は、毎朝5時にスクリプトを動かし、タスクをGoogleカレンダーに登録するようにします。

「どのタイミングで動かすか」を「トリガー」を使って設定していきます。

1.「編集」メニューから「現在のプロジェクトのトリガー」をクリック 現在のプロジェクトのトリガー

2.「トリガーを追加」をクリック

トリガーを追加

3.必要な項目を選択し、「保存」をクリック

タスク登録 のトリガーを追加

  • 実行する関数を選択:setEventFromChatworkTask
  • イベントのソースを選択:時間主導型
  • 時間ベースのトリガーのタイプを選択:日付ベースのタイマー
  • 時刻を選択:タスクを取得したい時間を選択

4.1行追加されたら完了!

トリガ設定画面

動作確認

GoogleカレンダーにChatworkのタスクが登録されました!

動作確認

まとめ

業務でGoogleカレンダーを利用している場合、Chatworkのタスクがカレンダーに登録しているとタスク漏れが少なくなると思います。

また、Googleカレンダー側の通知設定で予定が近づくと通知を出すこともできます!

support.google.com

最後まで読んでいただき、ありがとうございました!

みなさま、よいGAS生活を〜

※プログラムの書き方など、具体的な実装方法については「サポート対象外」となります。