ガジェット・ツール

チャットワークで毎月の定期タスクを自動追加する方法

投稿日: 2018年1月9日      更新日:

皆さんはchatwork(チャットワーク)は使ってますか?

ビジネスでもプライベートでも、日常のタスク管理をするツールとして超便利なチャットワーク。
使っている人なら誰もがその便利さを感じていることだと思います。

私も個人事業を起ち上げてから2年強の間、ヘビーに使い倒しています。
もはやこのシステム無いと仕事や生活が成り立たなくなるほど依存しています。
スケジュールはgoogleカレンダーを使い、タスク管理や仕事のクライアント等とのコミュニケーションにはチャットワークで、という使い方をしています。

今回は、そんなチャットワークで定期的に行うタスクを自動で投稿する方法を書いていきたいと思います。

GASとの連携でチャットワークがより便利に

 

定期タスク管理が面倒

便利なチャットワークですが、どうしても不満な点がありました。
それは、「毎月(や毎週)発生する定期タスクを入れられない」という点です。

私のように個人事業を運営していると、
「月末は請求業務をやらなきゃ」
「経費の明細をダウンロードしなきゃ」

等、結構月単位でやらないといけないことが多いです。

まぁ請求業務を忘れるようなことは実際ありませんが。。(笑)

いつもは気づいた時にタスクを追加するんですが、毎月のことなのでタスクを入れるのも面倒だし、自動化出来ないかなぁなんてずっと思っていました。

じゃぁ自動化ツールを作っちゃおう

無いのならつくっちゃおう。
ということで、今回チャットワーク自動タスク投稿ツール を作ってみました。

この記事を読んで、コピペすれば誰でも使えるようになりますので共感していただいた方は是非使ってみて下さい。

システムの概要

使用するツール・webサービス

今回のツールは、

  • チャットワーク
  • googleスプレッドシート
  • GAS(Google Apps Script)

を使います。
もちろん全て無料で使えます。

chatworkAPIを使います。

チャットワークは、普通はwebの画面やスマホアプリから投稿しますよね。
今回はプログラムを使って自動でタスクを投稿しますので、APIという機能を使います。

チャットワークは無料でAPIを公開していますので、誰でも使うことができます。

APIはなんぞや という方は「いまさら聞けない!APIとは何か?〜基礎の基礎を学ぼう〜」等を参考にして下さい。
要するに「webを通じてデータを出し入れする窓口を公開している」というようなイメージで大丈夫だと思います。

コストゼロ。ゼロはいいことだ

全て無料のwebサービスを利用していますので、コストはゼロです。いい響きですねぇ。

本当に便利な世の中になったものです。

ツールを作るために必要なスキル

この記事通り作れば誰でもシステムは作れるのですが、自分で同じようなシステムを作りたい方は、

  • JavaScript
  • googleスプレッドシート

が使えれば、十分作れると思います。
私自身、日常でJavaScriptはほとんど使いません(jQueryはぼちぼち使います)が、このツールを作る位ならギリギリなんとかなりました。

システムを作ってみよう

それでは、実際にシステムを作ってみます。

まずは定期タスクを入力するスプレッドシートを作ります。

定期タスク入力画面

googleスプレッドシートを開き、定期タスクを管理するスプレッドシートを作ります。

構成は、ひとまず最小限の機能として、

  • A列:タスク投稿日(毎月◯日に投稿する)
  • B列:タスク期限(タスク投稿日から見て◯日後をタスク期限とする)
  • C列:タスクを投稿するチャットのルームID(チャットワークが管理するルームのIDです)
  • D列:タスク担当者のユーザID(チャットワークが管理するユーザIDです)
  • E列:タスクの内容

という構成にしてみます。

どのチャットルームの、誰が、いつ、何を、いつまでにやるか」という点を明確にできれば最低限はOKだと思います。

テストデータのスプレッドシート

今回のシステムのテストデータとして、2つのタスクを準備しました。

1 毎月1日に、お客様への請求書発行をその日を期限としてタスク追加
2 毎月7日から2日以内に、顧問の税理士に提出する前月の資料・書類を準備する

というタスクとします。

ボカした部分は、私固有の情報ですので隠してあります。

ルームIDの調べ方

ルームIDというのは、チャットワークの各チャットルームのIDの事です。

チャットワークユーザに対してデフォルトで設置される「マイチャット」にアクセスをすると、URLが

「https://www.chatwork.com/#!rid380408734

などになっていると思います。
これの太字部分「380408734」がルームIDです。

もちろん、「マイチャット」だけでなく、個人同士のコンタクトや、グループチャットのIDでもOKです。

ユーザIDの調べ方

ユーザIDというのは、チャットワークのユーザ固有のIDであり、通常のチャットワークのユーザー名とは異なり、数値となります。
普段は意識をして見られるものではないので、少し探すためにはテクニックが必要です。

試しに、「マイチャット」の中の自分のメッセージを「引用」してみてください。

[引用 aid=15248986 time=1494987655]

というような数字が出て来ると思いますが、その太字部分の「15248986」がユーザIDです。

シート名を変更

スプレッドシートの下にあるシート名のタブを「タスク」に変更して下さい。
(別に何でも良いですが、ここも重要な部分ですので、まずはこの通りにしてくださいね)

自動でタスクを追加するためのプログラムを組みます。

ここが本丸ですね。

GASの画面を起ち上げます。

スプレッドシートから
[ツール]-[スクリプト エディタ]を選択し、スクリプトエディタを起ち上げます。GASのスクリプトエディタが立ち上がります。

こんな画面が出ると思います。今はダミーのプロジェクトの状態ですね。

以下のプログラムを貼り付けて下さい。

次に、以下のプログラムをそのままコピーし、GASに全部貼り付けて下さい(元から入っている部分も消してもOKです)

※2018/5/14 一部、そのままコピペするとエラーが起きるとのご指摘がありました。文字化けをしていた箇所があり、修正しました。


function chatworkAutoPost(){
//*****************************************************
//初期設定
//*****************************************************

//chatworkのトークン
var tkn='99999999999999999999999999';

//タスクリストが入っているシート名の設定
var sn='タスク'

//スプレッドシートのファイルID
var ssId='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';

//タスクリストの最大の行数(あんまり多いと時間制限にひっかかるよ)
var maxRow=1000;

//*****************************************************
//メインメソッド
//*****************************************************
var ss=SpreadsheetApp.openById(ssId);
var s=ss.getSheetByName(sn);
var ld=new Date(); // タスクの期限
var todayDate=new Date(); //今日の日付
var tanto; //担当者ID
var limit=0;//タスクの期限
var shoriFlag;//処理のフラグ
var message;//タスクの内容

//今日の日付を数値で取得
var todayDay=todayDate.getDate();

for(i=3;i<=maxRow;i++){
//ルームIDを取得
var rid = s.getRange(i, 3).getValue();
if(rid==''){
break; //ルームIDが空白の行だったら、システム終了
}else{
//処理が必要な日かを判定
if(todayDay==s.getRange(i, 1).getValue()){
shoriFlag=true;
}else{
shoriFlag=false;
}

if(shoriFlag==true){

//タスクの内容を作成
message='[info]';
message+=s.getRange(i, 5).getValue();
message+='[/info]';
message+='※これは自動で投稿されたタスクです';

//タスクの期限を決定
ld.setDate(todayDay.getDate()+s.getRange(i, 2).getValue());
limit=ld.getTime()/1000;
limit = limit.toFixed();

//タスクの担当者を取得
tanto=s.getRange(i, 4).getValue();

//タスクの追加処理
res=addTask(tkn,rid,message,limit,tanto);
}
}
}

//*****************************************************
//タスク追加処理メソッド
//*****************************************************
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";
return UrlFetchApp.fetch(url, params); //チャットワークAPIにリクエスト
}}

このような画面になるかと思います。

スクリプトは、他の方が投稿されているのを一部使わせていただきました。

各自の設定に置き換える

上記プログラムの


//*****************************************************
//初期設定
//*****************************************************

//chatworkのトークン
var tkn='99999999999999999999999999';  ←①

//タスクリストが入っているシート名の設定
var sn='タスク' ←②

//スプレッドシートのファイルID
var ssId='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';  ←③

の部分を置き換えます。

チャットワークのAPI Tokenをコピペ

chatoworkの右上のアカウント名をクリックして、[API設定]をクリックします。

この画面のAPI Tokenの箇所をコピーして下さい


//chatworkのトークン
var tkn='99999999999999999999999999';  ←①

ここの99999999999999 の部分にコピーしたTokenを貼り付けて下さい。

ここでは、例として「b3eda48260b5689744f951ytitc2259b」だったとします。

この作業は、チャットワークのあなたのアカウントでAPI通信が出来るようにするためのあなただけの暗号を、GASに入力したことになります。

スプレッドシートのIDをコピペ

次に、GASからスプレッドシートの情報を読みに行くための、スプレッドシートIDをGASに入力します。

スプレッドシートのURLが

「https://docs.google.com/spreadsheets/d/1rlguKDTspDPEDVxWwQ43LUAWYGNF2fsyfmqbKdkim98/edit#gid=1254139781」

だった場合、斜体の部分の

1rlguKDTspDPEDVxWwQ43LUAWYGNF2fsyfmqbKdkim98」がスプレッドシートIDになりますので、ここをコピーして、

GASのスクリプトの③部分に貼り付けてください。


//*****************************************************
//初期設定
//*****************************************************

//chatworkのトークン
var tkn='b3eda48260b5689744f951ytitc2259b';

//タスクリストが入っているシート名の設定
var sn='タスク'

//スプレッドシートのファイルID
var ssId='1rlguKDTspDPEDVxWwQ43LUAWYGNF2fsyfmqbKdkim98';

上記のような状態になっていますよね。

これで、プログラムの準備は万端です。
保存ボタンを押して、スクリプトを保存して下さい。

最後に、毎日同時刻に自動でシステムが動く設定をします。

GASのスクリプトエディタから[編集]-[現在のプロジェクトのトリガー]をクリックし、以下のように設定をして下さい。

日タイマー の部分は、「毎日チェック」という意味です。時間毎にチェックとかも出来ますが、チャットワークは基本的に1日単位の期限しか設定できないので、ここは日タイマーにしてください。
無用にサーバに負担を掛けることはしたくないですしね。

一番右の時間は、毎日何時頃にプログラムを自動実行するかの設定です。朝起きたらすでにタスクが追加されているように「午前5時~6時」とかに設定するのが良いと思いますが、ご自身の設定で何でも良いです。

これで[保存]をクリックすれば、準備OKです。

ここで設定したとおり、毎日決まった時間にプログラムが動作し、その日がタスク追加日に該当すれば自動でタスクを投稿してくれるという仕組みです。

試しに、実行してみましょう

テストのタスクをスプレッドシートの登録

ひとまず、実行する日の日付でテストデータを作ってみます。本日が8日だとして、以下のように「タスク投稿日」を8にしておきます。

タスク期限やタスクは何でもいいです。

ルームIDやユーザIDは実際に自身のマイチャットのルームIDや自身のユーザIDにしてください。

ここまで終われば、手動でプログラムを実行すれば即時にタスクが投稿されるはずです。

手動でスクリプトを実行

GASのスクリプトエディタ内の「再生ボタン」のような右向きの三角形のボタンを押して下さい。

すると、初回は

承認が必要です

chatwork needs your permission to access your data on Google.

のようなアラートが出ると思います。
セキュリティ上の確認のメッセージですが、問題ありませんので、
「許可を確認」のボタンをクリックして下さい。

投稿を確認

結果、以下のようなタスクが追加されていると思います。

あとは、自身の定期タスクをバカスカ入れていくだけです。

注意

GASの仕様として、プログラムの連続稼働時間に制限があり、6分までしか動作しません。
ということは、べらぼうにタスクの数が多いと、処理が6分で終わらないことも考えられます。

100件程度では問題ないと思いますが、500件とかになるとやや厳しいと思います。
試しては居ませんが、そのあたり注意して下さい。

今後、拡張したい機能

ひとまず今回は、「毎月◯日にタスクを追加」という月毎の自動化システムにしましたが、実際は

  • 毎週◯曜日の定期タスク
  • 毎月月末日の定期タスク
  • ◯ヶ月毎の定期タスク
  • 毎年◯月◯日の定期タスク

等、いろんな期間が考えられますよね。
これらをシステムに組み込んで、より便利にしていきたいと思っています。

2018/5 バージョンアップしました。

上記の拡張案件の大部分を盛り込み、バージョンアップしました。
是非こちらからバージョンアップしてみて下さい。

改良版)チャットワークで毎月の定期タスクを自動追加する方法

最後に

どうでしたでしょうか。無料でここまで出来るんです。
スクリプト部分を見ても、「こんな少ないプログラムで出来るんだ」と思いませんか?

このシステムを使って、より便利にチャットワークを使い倒してみて下さい!







- ガジェット・ツール


  1. koji より:

    手順通りに進めると、
    構文エラー。(行 33、ファイル「コード」)

    実行の段階で、と出ます。対処方法教えてください。

  2. oreore より:

    kojiさん

    どうもすみません。
    ご指摘感謝です。

    一部文字化けがしており、今コードを更新しました。
    再度お願いできますでしょうか

    • koji より:

      修正ありがとうございます。できました。

      JAVAほとんど使ったことないですが、こちらの情報のおかげで、自動化できました。

      とてもたすかりました。

      • oreore より:

        こちらこそありがとうございます。

        近々、毎月以外の
        ・毎週の指定曜日
        ・毎月末
        ・月日指定
        での日時指定の記事を書こうと思ってますので、また見に来て下さい。

  3. るぱん より:

    手順どおりに進めて
    何のエラーも出なかったのですが
    chatworkには反映してくれません。
    チェックするポイントを教えていただけますでしょうか。

    自身のマイチャットのルームIDや自身のユーザIDであることは
    何度も確認しています。

  4. akam より:

    多分この方法もう動かなったりするんじゃないですかね・・・。
    記事自体一年前ですし、記事通りやってみましたが動かず。

comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

お金関係に詳しいアラフォー子持ちブロガー。

副業でせっせとお小遣い増を目論むも、副業が順調すぎて脱サラ&法人化を実現しました。

貯金額は?

Loading ... Loading ...