Google Apps Scriptでチャットワークに期限付きのタスクを追加する


time-limit

photo credit: Chinese Laundry via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

引き続きGoogle Apps Scriptでチャットワークに自動でタスクを追加するプログラムについて研究しております。

前回はこちらの記事。

Google Apps Scriptでチャットワークにタスクを追加する最も簡単なプログラム
チャットワークの大きな特徴であるタスク機能がもAPIを使って操作することができます。今回はGoogle Apps Scriptでチャットワークにタスクを追加する最も簡単なプログラムを紹介します。

チャットワークにタスクを追加する最も簡単なパターンについてお伝えしました。

ですが前回追加されたタスク…

GASでチャットワークにタスクを追加した

ちょっと寂しいですね。

そう、タスク期限がついていませんね。

期限がないといつまで経ってもやらなくなっちゃうこともありますから、ちゃんと期限を設定できるようにしておきたいものです。

ということで、今回はGoogle Apps Scriptでチャットワークに期限付きのタスクを追加する方法についてお伝えします。

スポンサーリンク

前回のおさらい

前回は特定のアカウントIDに対して「ミルクを買う」というタスクを追加するスクリプトを作成しました。

作成したスクリプトはこちら。

function addTestTask() {

  var token = 'APIトークン'; //チャットワークAPIトークン
  var room_id = XXXXXXXX; //ルームID

  var params = {
    headers : {"X-ChatWorkToken" : token}, //APIトークン
    method : "post",
    payload : {
      body : "ミルクを買う", //タスクの内容
      to_ids : XXXXXX //アカウントID
    }
  };
  var url = "https://api.chatwork.com/v2/rooms/" + room_id + "/tasks";
  UrlFetchApp.fetch(url, params); //チャットワークAPIにリクエスト

}

HTTPメソッドは「post」で、パラメータpayload内の連想配列として、タスクの内容body、アカウントIDのto_idsを渡す形です。

リクエストURLは

https://api.chatwork.com/v2/rooms/{room_id}/tasks

でした。

チャットワークAPIに期限付きのタスクを追加するためのリクエスト

今回はタスクに期限をつけていきたいと思います。

タスク追加に関するリクエストについて、チャットワークAPIのドキュメントを再度確認してみましょう。

POST /rooms/{room_id}/tasks
チャットに新しいタスクを追加

body(必須):タスクの内容
limit:タスクの期限(※Unix timeで入力してください)
to_ids(必須):担当者のアカウントID(※担当者のアカウントIDをカンマ区切りで)

タスクの期限はlimitというキーでpayload内に渡せばよいですね。

なお、limitのパラメータの型はIntegerになります。

ただ“Unix timeで入力してください”とありますが、どういう意味でしょうか?

UNIX時間とは何か?

UNIX時間とは

UNIX時間(ユニックスじかん)またはUNIX時刻(ユニックスじこく、UNIX time(ユニックスタイム)、POSIX time(ポジックスタイム))とはコンピューターシステム上での時刻表現の一種。UNIXエポック、すなわち協定世界時 (UTC) での1970年1月1日真夜中(午前0時0分0秒)の時刻からの形式的な経過秒数(すなわち、実質的な経過秒数から、その間に挿入された閏秒を引き、削除された閏秒を加えたもの)として表される。
引用:Wikipedia

ということです。んー、わかるようなわからないような…。

つまり、日時の表記の仕方の一つで、1970年からの蓄積された秒数ですから、とっても大きい数字になりそうですね。

getTimeメソッドでUNIX時間を取得する

Google Apps Script(というかJava Script)では、getTimeメソッドで簡単にUNIX時間を取得することができます。

書き方は

Dateオブジェクト.getTime()

となります。

ただしgetTimeメソッドではミリ秒で取得するため、1000倍にして単位を秒に変換する必要があります。

以上を踏まえて作成したスクリプトがこちらです。

function addTestTask() {

  var token = 'APIトークン'; //チャットワークAPIトークン
  var room_id = XXXXXXXX; //ルームID

  var date = new Date(); //今日の日付
  var limit = date.getTime()/1000; //秒単位のUNIX時間を取得 

  var params = {
    headers : {"X-ChatWorkToken" : token}, //APIトークン
    method : "post",
    payload : {
      body : "ミルクを買う", //タスクの内容
      limit : limit, //タスクの期限
      to_ids : XXXXXX //アカウントID
    }
  };
  var url = "https://api.chatwork.com/v2/rooms/" + room_id + "/tasks";
  UrlFetchApp.fetch(url, params); //チャットワークAPIにリクエスト

}

しかしこれを実行すると

チャットワークAPIへのHTTPリクエスト時のエラーメッセージ

このようにエラーとなってしまいます。

どうやらlimtの値がintegerではないと言われているようですね…。

toFixedメソッドで指数表記を固定小数点表記に変換

前述のスクリプトでいうところの18行目、paramsへのパラメータ格納が終わったところにブレークポイントを設置してデバッグをしてみましょう。

ブレークポイントの設置は行数の箇所をクリックします。デバッグは虫マークのアイコンです。

Google Apps Scriptでブレークポイントを設置してデバッグ

するとpayload内のlimitの値が指数表記になっていますね。これが原因でエラーが出ていたというわけです。

数値を固定小数点表記に変換する場合はtoFixedメソッドを使います。

書き方はこちらです。

数値オブジェクト.toFixed(桁数)

桁数には小数点以下の桁数を指定します。0または省略で小数点以下0桁、つまり整数表記になります。

7行目の後に以下の一行を追加します。

limit = limit.toFixed();

実行結果

そのうえでスクリプトを実行しますと

チャットワークAPIで期限付きのタスクを追加した

無事に期限付きのタスクが追加されました。

これをイベントトリガーで毎朝8時などに追加すれば、「牛乳を買う」というタスクがその日の期限で毎日追加されることになります。

まとめ

Google Apps Scriptでチャットワークに期限付きのタスクを追加する方法についてお伝えしました。

  • UNIX時間の概要とgetTimeメソッドによる取得の方法
  • toFixedメソッドによる数値の固定小数点表記への変更

などのテクニックを使いました。

次回はスプレッドシートにタスク内容とタイミングを指定おくことで、それぞれのタイミングでタスク追加する方法についてお伝えしたいと思います。

【GAS】スプレッドシートに記載したタスクを毎日チャットワークに自動で追加する
Google Apps Scriptを使ってスプレッドシートの定期タスクをチャットワークのタスクとして自動で追加するシステムを作ります。今回はスプレッドシートの毎日のタスクについてしぼって実現します。

どうぞお楽しみに!

連載目次:GASでチャットワークに自動でタスク追加をする

タスク管理は重要なのですが、タスクを立てること自体を忘れてしまったりませんか?このシリーズではスプレッドシートとチャットワークを使って定期的なタスクを自動で追加する方法についてお伝えしています。
  1. Google Apps Scriptでチャットワークにタスクを追加する最も簡単なプログラム
  2. Google Apps Scriptでチャットワークに期限付きのタスクを追加する
  3. 【GAS】スプレッドシートに記載したタスクを毎日チャットワークに自動で追加する
  4. GoogleスプレッドシートとExcelで使える日付関連の関数まとめ
  5. 【GAS】定期的に発生するタスクをチャットワークに自動でタスク追加(完全版)

タイトルとURLをコピーしました