こんにちは、入社二年目の米本です。
気づけばもう年の瀬。みなさんいかがお過ごしでしょうか。
さて、社内ワーキンググループとして発足したGAS検証ですが、早くも3回目のstory投稿となりました。
第1回:はじめに編はこちら
第2回:webスクレイピング編はこちら
今回は掲題のとおり、外部ツール連携としてchatworkとの連携を実装してみたいと思います。
今やどの組織でも必要不可欠なチャットツールですが、弊社ではchatworkを採用しています。
https://go.chatwork.com/ja/
PC版、スマホ版ともに動作が非常に軽くとても扱いやすい印象です。
API群も公開されていますので、その中から今回はchatwork連携としてスプレッドシートの予定を
chatworkにタスク追加する仕組みを作ってみました!
◯事前準備
・chatworkAPIトークンの発行
アカウント情報からAPIトークンを取得します。(公式リンク)
・通知を行うルームIDの取得
タスク追加を行うグループチャットを作成し、ルームIDを取得します。(公式リンク)
今回は新規に「GAS通知部屋」なるルームを作成しました。
・アカウントIDの確認
一旦、今回の対象は自分のみですので、自分のアカウントIDを確認します。(公式リンク)
・連携するタスク一覧スプレッドシート作成
今回は年末にむけて日々の予定を立ててみました。
手前味噌ですが我ながら良く練られた計画だな、と思います。 勝てる・・・勝てるんだ😏!
◯実装
完全無欠の計画を遂行するため、コーディングしていきましょう。
以下がAPIにリクエストを送る関数です。
単体では3行目のtoken変数が未設定なため実行不可、実行時はその下のadd_chatwork_tasks関数を用います。
function add_task(token,body,room_id,to_ids,limit,limit_type){
var params = {
headers : {"X-ChatWorkToken" : token}, //APIトークン
method : "post",
payload : {
body : body, //タスク内容
to_ids : to_ids, //アカウントID
limit : limit, //タスク期限
limit_type : limit_type //タスクタイプ
}
};
var url = "https://api.chatwork.com/v2/rooms/" + room_id + "/tasks";
UrlFetchApp.fetch(url, params); //チャットワークAPIにリクエスト
}
実行用のadd_chatwork_tasksはこちら。
※APIトークン等はマスクしています
function add_chatwork_tasks() {
var mySheet=SpreadsheetApp.getActiveSheet(); //スプレッドシートを取得
var maxRow=mySheet.getDataRange().getLastRow(); //行数を取得
var myVars=mySheet.getDataRange().getValues(); //二次元配列にて値を取得
var token = 'XXXXXXXXXXXXXXXXXXX'; //チャットワークAPIトークン
Logger.log(mySheet);
Logger.log(maxRow);
Logger.log(myVars);
// 取得した値を変数化してadd_task関数に渡す
for(var i=2;i<=maxRow;i++){
var body = myVars[i-1][2]; //タスク内容
var room_id = myVars[i-1][3]; //ルームID
var to_ids = myVars[i-1][4]; //アカウントID(担当者)
var limit_base = myVars[i-1][5]; //期限
Logger.log(body);
Logger.log(room_id);
Logger.log(to_ids);
// 期限がなしの場合は「limit」を0に「limit_type」をnoneに
if(limit_base == "なし"){
var limit = Date.parse(0)/1000;
limit = limit.toFixed();
var limit_type = 'none';
Logger.log(limit);
Logger.log(limit_type);
}else{
var limit = Date.parse(limit_base)/1000;
limit = limit.toFixed();
var limit_type = 'time';
Logger.log(limit);
Logger.log(limit_type);
}
add_task(token,body,room_id,to_ids,limit,limit_type);
}
}
上記を実行すると・・・
はい、「GAS通知部屋」に自動でタスク追加することができました。
ちなみに自分のchatworkアイコンは松屋です。松屋が好きなのです。それだけです。
と、今回はこれまでのGAS検証と、日常的に利用するchatworkとの連携を実施してみました。
例えば複数名でのプロジェクトでタスクをそれぞれにアサインする場合に都度設定ではなく
一括設定することでヌケモレも防げますし、実用的な検証となったのではないかと思います。
次回の検証は現在検討中ですが、更に一歩踏み込んだ、実用的な検証に出来たらと思っていますので、
ぜひまた見ていただければと思います。
え?追加したタスクの実行結果ですか?そういう機能は未実装なんですよね・・・😢