Chatworkからgoogleカレンダーへ、タスクを自動連携する方法

Chatworkのタスク機能と、Googleカレンダーの両方を利用している方は多いかと思います。
今日は、Chatworkで期限が設定された未完了のタスクを
Googleカレンダーへ予定として自動で登録する機能をご紹介します。

ChatworkのAPIと、Google Apps Scriptを用いて設定します。
Googleカレンダーの通知機能を使えばアラートも可能ですので、
把握するタスクが多い方はぜひ使ってみてください。

Chatworkからgoogleカレンダーへ、タスクを自動連携する方法

ChatworkのAPIトークンを取得する

ChatworkにAPIの利用を申請し、APIトークンを取得しましょう。

フリープラン、パーソナルプランの場合は、Chatworkの画面右上にあるアイコンから設定が可能です。
それ以外のプラン等を利用している場合は、組織管理者への申請が必要になります。

  1. 画面右上のアイコンをクリックしてメニューを表示し、「API設定」を選んでください。

  2. 左メニューの「API」から「API Token」を選びます。パスワードを入力し「表示」をクリックしてください。

  3. ChatworkのAPIトークンが表示されます。

 

新しいGoogleカレンダーを作成

次に、Googleカレンダーで、新しく専用のカレンダーを作成します。

これは、後述するスクリプトで、更新時に一度カレンダー内のすべての予定を削除し、
新しく予定(タスク)を登録し直す処理を行うためです。

現在使用中のカレンダーIDを、今回のChatworkからのタスク連携に流用すると、
他の予定が消えてしまいます。
トラブル回避のためにも、必ず新規にカレンダーを作成してください。

  1. Googleカレンダーを開いてください。左メニューの「カレンダーを追加」から、「新しいカレンダーの作成」をクリックしてください。

  2. カレンダーに名前をつけ、「カレンダーを作成」ボタンをクリックしてください。

 

カレンダーIDを確認

  1. 先程作成したGoogleカレンダーの「カレンダーの設定」を開きます。

  2. 右カラムにある「カレンダーのアドレス」項目にカレンダーIDが表示されます。
    このIDは後ほど使用しますので、コピペでメモを残しておくか、このページを開いたままにしておきましょう。

 

Googleドライブで、GoogleAppsScriptを作成

  1. Googleドライブを開いてください。

    左メニューの「新規」ボタンをクリックしてください。

  2. メニューが表示されます。「その他」から「Google Apps Script」をクリックしてください。

  3. もし「Google Apps Script」が表示されない場合は、
    「その他」から「アプリを追加」を選んでください。

  4. 「Google Apps Script」を検索して、接続をクリックしてください。

    「Google Apps Script」がGoogleドライブに接続されます。

  5. 「無題のプロジェクト」が開きます。コード内に記述されている、「function myFunction() …」は全て削除してください。

 

紹介するコードをコピペする

下のコードをすべてコピーしてください。

作成したプロジェクトのコード入力欄にペースト(貼り付け)します。

/*—- 初期設定ここから—-*/

// ChatworkのAPIトークンを設定
var ChatWorkToken = ‘xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx’;

// googleカレンダーIDを設定
var CALENDAR_ID = ‘xxxxxxxxxxxxxxxxxxxxxxxxxx@group.calendar.google.com’;

/*—- 初期設定ここまで —-*/

// 識別キー
var SIGNATURE = “fromChatWork”;

/*—- メインFunction —-*/

function myFunction(){

// すべての予定をクリア
clearAllEvents();

// ChatWork APIに投げるパラメータの設定
var params = {
headers : {“X-ChatWorkToken” : ChatWorkToken},
method : “get”
};

//未完了タスクを取得するURL
var url = “https://api.chatwork.com/v2/my/tasks?status=open”;

//ChatWork API エンドポイントからレスポンスを取得
var strRespons = UrlFetchApp.fetch(url, params);

//レスポンスがない場合は終了
if(strRespons == “”) return false;

//レスポンス文字列をJSON形式として解析、JSONオブジェクトとして返す
var json = JSON.parse(strRespons.getContentText());

Logger.log( “未完了タスク数: ” + json.length );

// googleカレンダーオブジェクト作成
var calendar = CalendarApp.getCalendarById(CALENDAR_ID);

// タスク毎に予定を作成
for each(var obj in json){

// タイトルを設定
var title = obj.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( obj.limit_time == 0 ){
Logger.log( “期限なし: ” + title );
continue;
}
// UNIXTIMEを変換してdateにセット
var date = new Date( obj.limit_time * 1000 );

// 説明欄を設定
var description = obj.body;
description += String.fromCharCode(10) + “——————————“;
description += String.fromCharCode(10) + obj.room.name; // ルーム名
description += String.fromCharCode(10) + “https://www.chatwork.com/#!rid” + obj.room.room_id; // ルームURL
description += String.fromCharCode(10) + “依頼者: ” + obj.assigned_by_account.name; // 依頼者

var options = {description: description};

// 終日のイベントを作成
var event = calendar.createAllDayEvent(title, date, options);

// イベントにタグ付け
event.setTag(SIGNATURE, “true”);
}

}

/*—- 前後1年間の予定をクリアするFunction —-*/

function clearAllEvents() {

// googleカレンダーオブジェクト作成
var calendar = CalendarApp.getCalendarById(CALENDAR_ID);

// 今日の日付取得
var date = new Date();

// 今日の年、月、日を格納
var year = date.getYear();
var month = date.getMonth();
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();
}

}
}

 

 

 

 

 

 

コード上部にあるChatworkトークンとカレンダーIDの書き換え

  1. コード上部に、ChatworkのAPIトークンと、GoogleカレンダーのカレンダーIDを入力します。
    最初に調べた自分のトークンと、新しく作成したカレンダーIDに書き換えてください。具体的には以下になります。

    /*—- 初期設定ここから—-*/

    // チャットワークAPIトークンを設定
    var ChatWorkToken = ‘■■■■■■■■■■■■■■■’;

    // googleカレンダーIDを設定 ※専用のカレンダーを作成することをオススメします
    var CALENDAR_ID = ‘■■■■■■■■■■■■■■■@group.calendar.google.com’;

    /*—- 初期設定ここまで —-*/

  1. 上部メニューにある、保存ボタンをクリックしてください。
  2. 適当なプロジェクト名をつけ、「OK」ボタンをクリックしてください。保存します。

動作確認

  1. プルダウンメニューで「myFunction」を選択します。
    実行ボタン(三角のボタン)をクリックしてください。

  2. 初回のみ、別ウインドウが開いて実行の承認と許可を求められます。

    「許可」ボタンをクリックしてください。

Googleカレンダーに、タスクが追加されました。

自動的に最新のタスクをカレンダーに反映する~トリガーの設定

トリガーを設定しておくと、自動で最新のタスクをカレンダーに反映できます。
便利ですので、ぜひ設定をおすすめします。

  1. トリガーボタンをクリックしてください。

  2. 画面右下の「トリガーを追加」をクリックしてください。

  3. ・実行する関数を選択:「myFunction」
    ・実行するデプロイを選択:そのまま
    ・イベントのソースを選択:「時間主導型」
    ・時間ベースのトリガーのタイプを選択:「時間ベースのタイマー」
    ・時間の関数を選択(時間):「1時間ごおき」
    ・エラー通知設定:そのまま

    を選択し、右下の「保存」をクリックしてください。

これで、1時間に1度、自動的にカレンダーを更新する設定が完了しました。

まとめ

いかがでしたか?

Chatworkで設定した未完了タスクを、Googleカレンダーに自動で反映させる方法をご紹介しました。

カレンダーの設定を変更すれば、「X日前のX時に通知する」などの設定も可能です。
ご自分の都合に合わせて、適宜変更してください。

このスクリプトでは、更新時に一度カレンダー内のすべての予定を削除し、
新しく予定(タスク)を登録し直す処理を行っています。
(この理由で、「Chatworkのタスク専用にカレンダーを新しく作成」しています)。

YouTube 副業無料講座 お金や時間、場所にとらわれない、 新しいライフスタイルを実現