以前、チャットワークで定期タスクを投稿する仕組みを説明しました。
意外にも沢山の閲覧を頂いており、その改良版(以下「新バージョン」)を作成しましたのでご紹介したいと思います。
基本的に、前回のプログラム(以下「旧バージョン」)の一部修正版となりますので、まずは↑の記事で内容を把握していることを前提で進めていきます。
目次
何を改良したか
新バージョンでの改良点は以下のとおりです。
変更点 | 旧バージョン | 新バージョン |
タスク追加日 | 毎月◯日にタスク追加 のみ可能 | ・毎週◯曜日 ・毎月末日(自動で末日を判定) ・平日のみ毎日 といったタスクのスパンを追加 |
タスク内容 | タスク内容はそのままテキストとして追加される | タイトルと本文に分けて見やすくタスク化してくれる |
自動投稿タスクを判別 | 手動追加タスクと判別不能 | 自動で追加された旨をメモ付け |
一番上の変更点「タスク追加日」がフレキシブルに指定が出来るようになった点が格段に改良されていると自負しています。
結構毎週月曜日にやる仕事 とかありますからね。
なにげに「毎月末日」を指定できるのも、月ごとに末日が違う点を吸収してくれるので便利ではないでしょうか。
まぁぶっちゃけ、それ意外の変更点は大した変更ではありません。
ちょっと見やすく、わかりやすくなったかな?程度の変更点です。
変更手順の概要
旧バージョンからの変更方法は、以下のとおりです。
旧バージョンですでに運用をしている方は、恐らく10-20分程度で新バージョンに移行出来るかと思います。
- 新しいスプレッドシートをコピーします
- スクリプトエディタを立ち上げます。
- 新バージョンのgoogle App Scriptをこの記事からコピーして 、スクリプトエディタにコピペします。
- スクリプトエディタで独自の環境に合わせた微修正をする
- スクリプトエディタの定期実行設定をする
- 定期タスクをガンガン入力する(旧バージョンから移植になるかと思います)
旧バージョンは、新バージョンに入れ替え後削除することをおすすめします。
じゃないと、新旧システムから重複してタスクが追加されてしまいますので(^_^;)
具体的な変更手順
1 新しいスプレッドシートをコピーします
こちらから、テンプレートとなるスプレッドシートをコピーします。
[ファイル]-[コピーを作成]をすると、コピーされた新しいスプレッドシートが開くので、適当な名前を付けておいてください。
2 スクリプトエディタを立ち上げます
[ツール]-[スクリプト エディタ] をクリックし、スクリプトエディタを起ち上げます。
画面のようなGASエディタが立ち上がります。
こちらも適当な名前を付けておくと良いでしょう。
3 新バージョンのgoogle App Scriptをこの記事からコピーして 、スクリプトエディタにコピペします。
以下のスクリプトをスクリプトエディタにコピペして下さい。
元から入っている部分もまるごと上書きしてOKです。
function chatworkAutoPost(){ //***************************************************** //初期設定 //***************************************************** //chatworkのトークン var tkn='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; //定期リストが入っているシート名の設定 var sn='定期作業' //スプレッドシートのファイルID var ssId='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; //タスクリストの最大の行数(あんまり多いと時間制限にひっかかるよ) var maxRow=1000; //***************************************************** //メインメソッド //***************************************************** var ss=SpreadsheetApp.openById(ssId); var s=ss.getSheetByName(sn); var ld=new Date(); //今日の日付オブジェクト var dt=new Date(); //今日の日付オブジェクト var tanto; var limit=0; var message; for(i=3;i<=maxRow;i++){ var rid = s.getRange(i, 1).getValue(); var flg=getShoriFlg(s.getRange(i, 3).getValue(),dt); if(rid==''){ break; }else{ if(flg==true){ //実際のAPI処理 //タスクの本文を作成 message='[info][title]'; message+=s.getRange(i, 5).getValue(); message+='[/title]'; message+=s.getRange(i, 6).getValue(); message+='[/info]'; message+='※これは自動に投稿されたタスクです'; //タスクの期限を決定 ld=new Date; ld.setDate(dt.getDate()+s.getRange(i, 4).getValue()); limit=ld.getTime()/1000; limit = limit.toFixed(); //タスクの担当者を取得 tanto=s.getRange(i, 2).getValue(); //タスクの追加処理 addTask(tkn,rid,message,limit,tanto); } } }//next } //***************************************************** //タスク追加処理メソッド //***************************************************** 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 } }; Logger.log(params); //タスク投稿実処理 var url = "https://api.chatwork.com/v2/rooms/" + room_id + "/tasks"; return UrlFetchApp.fetch(url, params); //チャットワークAPIにリクエスト } //***************************************************** //処理すべき日かの判定 //***************************************************** function getShoriFlg(postdate,dt){ var flg=false; var span=postdate.substr(0,4); if(span=="[毎日]"){ flg=true; }else if(span=="[毎週]"){ var d2; switch(postdate.substr(4,1)){ case '月': d2=1; break; case '火': d2=2; break; case '水': d2=3; break; case '木': d2=4; break; case '金': d2=5; break; case '土': d2=6; break; case '日': d2=0; break; } if(dt.getDay()==d2){ flg=true; } }else if(span=="[平日]"){ if((dt.getDay()>=1)&(dt.getDay()<=5)){ flg=true; }else{ flg=false; } }else if(span=="[毎月]"){ if(dt.getDate()==postdate.substr(4,2)){ flg=true; } }else if(span=="[月末]"){ if(new Date(dt.getFullYear(), dt.getMonth() + 1, 0).getDate()==dt.getDate()){ flg=true; } }else if(span=="[毎年]"){ if((dt.getMonth()+1==1)&(dt.getDate()==1)){ flg=true; } } return flg; }4 スクリプトエディタで独自の環境に合わせた微修正をする
コピペした新バージョンのスクリプトの7行目と13行目に、それぞれ
チャットワークAPIのトークンと、手順1でコピーしたスプレッドシートのIDを入力して下さい。
これらの確認方法は、旧バージョンの記事を参考にして下さいね。5 スクリプトエディタの定期実行設定をする
こちらも、毎日同じくらいの時刻に定期実行して、タスクを自動投稿させるための必須設定です。
この辺りも旧バージョンの記事を参考にしてください。6 定期タスクをガンガン入力する(旧バージョンから移植になるかと思います)
スプレッドシートの「定期作業」に、どんどん定期に自動投稿するタスクを入力していって下さい。
こんな感じでタスクが追加されます
このように、タイトルと本文でわかりやすくタスクの内容を表示出来ます。
また、※これは自動に投稿されたタスクです というようなテキストも追加されますので、自分で投稿したタスクかどうかの判別も付きます。最後に
実は旧バージョンをリリースしてすぐにこの新バージョンが完成していたのですが、ブログに公開するのが遅くなってしまいました。
もう今ではこの仕組なしでは、毎月のタスク管理が面倒で仕方ないレベルです。旧バージョンをご利用の方も、是非今回の新バージョンへのバージョンアップをして頂ければまたタスク管理の達人に近づけると思います♪
これ、ひじょうにありがたいです!!!
感謝感激!!!
また、投稿おねがいします==!!
コメント&使用ありがとうございます!
なにか「こうしてほしい こんなんほしい」とかあればまたリクエストください^^
初めまして。
ずっとチャットワークで定期タスクの自動化ができないか悩んでいましたので、とてもありがたいです!!
ありがとうございます!!
ただ、トリガーを設定しようとすると「サーバーエラーが発生しました。」というエラー表示がされてしまいます。。。
解決方法がお分かりでしたら教えていただけますと幸いです。
よろしくお願いしますm(_ _)m
コメントありがとうございます!
サーバーエラーですか、、、
すみません、ちょっと心当たりがないですね。
一時的なサーバートラブルではないでしょうか。
手順でおかしいところは無いと思うので。。
お力になれずごめんなさいm(__)m
返信ありがとうございます。
ちなみにですが、3のコードをコピーして貼り付けた際に、29行目の構文がエラーですという通知が出てきます。29行目は以下になります。
for(i=3;i<=maxRow;i++){
エラーになったので、最初から入っていたコードをそのまま利用した次第であります。
もし何かお分かりになりましたら教えいていただきたいです。
よろしくお願いしますm(_ _)m
すみません!
何故かWordPressの仕様かわかりませんが、タグが一部置き換えられてしまうようです。
再度プログラムコードを更新しましたので、今のコードでお試しいただけますでしょうか。
ありがとうございます!
コードのエラーはなくなりましたが、やはりサーバーのエラーは引き続き起きています…
その問題はこっちの環境面だと思うので、頑張って自分で解決します。
初めまして。
81行目の以下の部分でエラーが出ました。
return UrlFetchApp.fetch(url, params); //チャットワークAPIにリクエスト
}
——
https://api.chatwork.com/v2/rooms/21203408/tasks のリクエストに失敗しました(エラー: 400)。サーバー応答の一部: {“errors”:[“Parameter ‘limit’ is not integer”]}(応答の全文を見るには muteHttpExceptions オプションを使用してください)(行 81、ファイル「コード」)
——-
メッセージの詳細には上記のように記載があるのですが、この場合何に問題があるのでしょうか?
何かお分かりでしたら、お手隙の際に教えて頂けますと幸いです。
どうぞよろしくお願い致しますm(__)m
エラーメッセージを見る限り、スプレッドシートの期限の箇所を空白だったり、全角の数字だったり、文字が入ったりしてないでしょうか。
こんにちは。
84行目でエラーが出ました。
return UrlFetchApp.fetch(url, params); //チャットワークAPIにリクエスト
詳細
https://api.chatwork.com/v2/rooms/36409841/tasks のリクエストに失敗しました(エラー: 403)。サーバー応答の一部: {“errors”:[“Parameter ‘to_ids’ is invalid”]}(応答の全文を見るには muteHttpExceptions オプションを使用してください)(行 84、ファイル「コード」)
上記の方とは異なるエラーかと思われますので、ご教授頂ければと思います。
スプレッドシートのB列 の 担当者のIDは正しいでしょうか。
その指定するルームに属している担当者(ユーザ)のIDをしっかり指定されていなかったり、
ユーザIDに余分なスペースが入っていたり全角で入力されていたり しないかをご確認ください。
やってみます!
実行ボタンが押せません。
何か理由はありますか?
こんにちは。
昨年の自動化タスクに大変お世話になりましたm(_ _)m
プログラミング素人でもわかりやすく記事を書いてくださりありがとうございます。
ですが、2019年に切り替わってからタスクが投稿されなくなってしまいました…
情報が少なすぎて申し訳ございません。
素人なものでチェックすべきところがわからないため、何か必要な情報がありましたらおっしゃっていただきたいです。
よろしくお願いします。
ご返信遅くなりすみません。
2019年からうまくできなくなったという報告は今の所ありませんし、私の方も問題なくそのまま使えております。
正直、この情報だけでは解決策も検討がつかず、、、
申し訳ありません。
便利な方法を共有いただきありがとうございます!
同様のスキームで、チャット内のTOALLでタスクの自動付与ができればとても助かるのですがTOALLには固有のIDがついていないので設定ができません。なにか方法ないでしょうか?
今回は、あくまでタスク追加の自動化でしたので、メッセージの自動化ではないです。
ご意見を参考にして、メッセージの自動化なども考えてみたいと思います。
質問させて下さい。
担当者が何人もいる場合の対処方法はありますでしょうか。
同じタスクを何人もコピーして使う というのはとりあえず有効だと思います。
ご返信ありがとうございます。
同じタスクを何人もコピーして使う、という方法も考えたのですが
それをするとChatWork上では、タスクを追加したという通知が何人分も出てしまうので
できればChatWorkで直にタスクを追加する時と同じように
1つのタスクに担当者を何人も指定して、通知を1つに抑えたかったという次第です。
ただ、スプレッドシートの1つのセルから
担当者のIDをいくつも取得するのは無理なのかなーとも思うので
また別の方法を探してみます!
ありがとうございましたm(_ _)m
こんにちは、こちらのタスク活用が出来たら業務がとても楽になります。
公開していただきありがとうございます!
さて
88行目 var span=postdate.substr(0,4);
TypeError: undefined のメソッド「substr」を呼び出せません。(行 89、ファイル「コード」)
となるのですが、なぜでしょう、、
こんにちは。
素晴らしい方法を公開していただきありがとうございます。
実務でも使ってみようと試しているのですが、[毎年]の条件だと反応してくれません。
例えば今日であれば、 [毎年]11月9日 や [毎年]11月09日 などでスクリプトを実行するのですがタスク投稿がされません。[毎月]や[毎週]はうまく投稿されております。
もし原因など分かりましたらご教示いただければ幸いです。
こんにちは。すみません、自己解決しました。
[毎年]は1月1日かどうかを判定されているのですね。
[毎月]の判定方法を参考にさせていただき、対応できました。
改めて有用なシステムを公開いただき感謝申し上げます。
初めまして、
とてもいい内容ありがとうございます。早速導入して有効活用させていただいてます
いくつかご相談がございます
①私の会社が月曜日から土曜日までの営業なのですが。
スパンマスタに営業日 月-土を追加し、運用する方法ご教示いただきたいです
②非常に細かいですが、ゴミ出しがらみで毎月の第一第三木曜日に指定したいタスクがあります
こうした場合はどうしたらよいのでしょうか?
どうぞよろしくお願いいたします。
ご活用頂いているとのこと、嬉しいです。
さて、
①私の会社が月曜日から土曜日までの営業なのですが。
スパンマスタに営業日 月-土を追加し、運用する方法ご教示いただきたいです
→ 現状、そのような指定はできないので、 月・火・水・・・土 の各日に同じ設定をコピーするしか無いですね。
②②非常に細かいですが、ゴミ出しがらみで毎月の第一第三木曜日に指定したいタスクがあります
こうした場合はどうしたらよいのでしょうか?
→ こちらも、ちょうどよい設定はありません。
木曜日すべてに設定をしておき、不要な週はタスクを完了かゴミ箱に捨てる
という運用で代用ください。
とても分かりやすい便利なものを公開して頂いて
ありがとうございます!!!!
私のように知識のない者にとっては、本当に有難いです。
厚かましいお願いなのですが…、このスクリプトを活用して
「定期メッセージを送る」のを公開していただけませんでしょうか?
スクリプトエディタに直接書き込むのは、ネットにいくつか公開されているのですが
知識がない者にとっては、このスプレッドシートに足していけるやり方が一番有難いです。
公開して下さっているスプレッドシートは、指定日設定も分かりやすく
(スパンマスタも作って頂いて、ありがとうございます!)使いやすいので、
こちらを使って、メッセージを定期自動投稿できたらとても助かります。
部屋とToの指定をして、毎月末日や、毎日16:00といった決まった時に
「明日の当番の人は、〇〇を交換して下さい」といったメッセ―ジ送るようにしたいです。
厚かましいお願いで恐縮に存じますが、もし可能でしたらよろしくお願い申し上げます。
探していると丁度求めているものを発見!!
早速手順通り、進めて行くと、エラーが・・・。
TypeError: todayDay.getDate is not a function(行 55、ファイル「コード」)
ご教授下さい
とてもわかりやすかったです。ありがとうございました。
はじめまして、津田と申します。
ずっと使わせていただいていたのですが、3月ぐらいにから急に定期タスクが飛んでこなくなってしまいました。
何か仕様変更とか発生したのでしょうか。
修正で対応できるようでしたら、ご教示下さい。
こちら、プログラムはあまり詳しくない方です。
宜しくお願いします。
エラー
Exception: Request failed for https://api.chatwork.com returned code 403. Truncated server response: {“errors”:[“Parameter ‘to_ids’ is invalid”]} (use muteHttpExceptions option to examine full response)
addTask @ コード.gs:81
chatworkAutoPost @ コード.gs:57
どこをなおせばいいのかわかりません。ご教授いただけませんか?