みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
Google Apps Scriptでチャットワークに自動でタスクを追加するシステムを作成しています。
前回は、チャットワークに期限をつけてタスクを追加する方法についてお伝えしました。
これでタスク追加に関する基本的な使い方はバッチリ抑えられたかと思います。
さて、お仕事の中で毎日や毎週、毎月など定期的に発生するタスクがありますよね。
これらを自動的にチャットワークにタスク追加をしていきたいというとき、どのように実現したらよいでしょうか。
Google Apps Scriptでそれぞれのタスクについてスクリプトを組んでいっても良いですが、例えばスプレッドシートに自動追加するタスクを登録しておいて、その通りにタスクを追加してくれたら楽ちんですよね。
今回から何回かに分けて、Google Apps Scriptを使ってチャットワークに自動追加するタスクをスプレッドシートでコントロールするシステムを開発していきたいと思います。
初回はスプレッドシートにリストされているタスクについて毎日自動でチャットワークでもタスク追加する方法です。
では、行ってみましょう!
スプレッドシートで毎日のタスクリストを作成する
このようなスプレッドシートを作成しました。
毎日発生するタスクを記載しています。
今は二つしかありませんが…そのうち盛り上がりますので。
ルームIDはタスクを追加するグループチャットのルームID、アカウントIDはタスクを追加する担当者のアカウントID(複数いる場合はカンマ区切り)です。
このリストにあるタスクを毎朝(例えば7~8時など)に、指定のグループチャットにタスク追加するというスクリプトを考えていきます。
チャットワークにタスク追加をする関数
各行についてタスク追加をすることになりますので、チャットワークにタスク追加をするルーチンを関数化しておきたいと思います。
チャットワークAPIの仕様を確認すると
チャットに新しいタスクを追加
body(必須):タスクの内容
limit:タスクの期限(※Unix timeで入力してください)
to_ids(必須):担当者のアカウントID(※担当者のアカウントIDをカンマ区切りで)
となっています。
HTTPメソッドはPOSTですね。この時点で関数として渡す引数はroom_id,body,limit,to_idsとなります。
リクエストURLは
です。
またチャットワークAPI共通でHTTPヘッダに “X-ChatWorkToken”というパラメータ名でAPIトークンを渡す必要がありました。
ちょっと引数が多いですが、関数addTaskを
といった感じで作ってみます。
チャットワークにタスクを追加するaddTask関数
関数addTaskのコードはこちらです。
function addTask(token,room_id,body,limit,to_ids){ var params = { headers : {"X-ChatWorkToken" : token}, //APIトークン method : "post", payload : { body : body, //タスク内容 limit : limit, //タスク期限 to_ids : to_ids //アカウントID } }; var url = "https://api.chatwork.com/v2/rooms/" + room_id + "/tasks"; UrlFetchApp.fetch(url, params); //チャットワークAPIにリクエスト }
詳細は前回のこの記事や
チャットワークにメッセージの送受信をする関数の作り方について解説したこちらの記事をご覧ください。
スプレッドシートにリストした毎日のタスクをチャットワークに自動追加する
ではこの関数addTaskを使って、前述のスプレッドシートにリストされた毎日のタスクをチャットワーウに自動追加するスクリプトを作っていきます。
プログラムの流れとしては
- シート自体と最終行数、データの取得をする
- 本日の日付をUNIX時間で取得し、固定小数点表記に変更
- 全てのタスクについて
- D列の頻度が”毎日”であれば
- タスク内容、ルームID、アカウントID、期限を本日としてタスク追加
- D列の頻度が”毎日”であれば
という流れとなります。
スクリプトとしてはこちらになります。
function addRegularTasks() { var mySheet=SpreadsheetApp.getActiveSheet(); var maxRow=mySheet.getDataRange().getLastRow(); var myVars=mySheet.getDataRange().getValues(); var token = 'APIトークン'; //チャットワークAPIトークン var date = new Date(); var limit = date.getTime()/1000; limit = limit.toFixed(); for(var i=2;i<=maxRow;i++){ if(myVars[i-1][4-1]="毎日"){ var body = myVars[i-1][1-1]; //タスク内容 var room_id = myVars[i-1][2-1]; //ルームID var to_ids = myVars[i-1][3-1]; //アカウントID addTask(token,room_id,body,limit,to_ids); } } }
getValuesを使ってデータ範囲をまとめて配列に格納
5行目ですがgetValuesでシート上のデータ範囲を二次元配列変数myVarsに格納しています。
このスクリプト自体はイベントトリガーを使って完全自動で動作するので、実行速度はあまり気にしなくても良いのかも知れませんが、二次元配列に慣れておいたほうが良いということで、このようにしています。
詳しくはこちらの記事もご覧下さい。
本日の日付をUNIX時間で取得し固定小数点表記に
9行目~11行目はタスクの期限を求める箇所です。
今回は当日のタスクしかありませんので、本日の日付をそのまま指定しています。
UNIX時間や固定小数点表記についての詳細はこちらの記事をご覧ください。
二次元配列からaddTaskの引数を取り出す
15行目~17行目でそれぞれタスク内容、ルームID、アカウントIDを二次元配列から取り出しています。
配列番号は1からではなくて0から始まりますので、指定の際は実際の行番号や列番号をマイナス1した数字になりますので、注意してくださいね。
実行結果
このスクリプトを実行すると
このように無事にタスクが追加されます。
スクリプトエディタのメニューから「リソース」→「現在のプロジェクトのトリガー」から、イベントトリガーを「時間主導型」→「日タイマー」→「午前7時~8時」などとすれば、毎日自動でタスクが追加されます。
まとめ
スプレッドシートにリストされているタスクについて毎日自動でチャットワークでもタスク追加する方法をお伝えしました。
当然、定期のタスクは毎週だったり、毎月だったりに追加したかったりします。
次回以降、スプレッドシートに色々なパターンで自動登録用のタスクをリストできるように改良をしていきたいと思います。
まずはスプレッドシートの日付関連の関数を整理していきますよ。
どうぞお楽しみに!