株式会社まめぞうデザイン

タナカアキノリ

タナカアキノリ

脳みそがお爺ちゃんなら
ChatWorkへ通知しよう!

2017.06.21

ChatWork

先日、Google Apps Scriptを利用してメール通知を送るという記事を書きました。
忘れん坊でも安心!Google Apps Scriptで通知メールを送ろう!

もう完全に記憶力が初老ではなく、おじいちゃんです。。。
僕の記憶力も問題ですけど、メール通知だと対象者がいつタスクを完了したかっていうのも周知できないなーっと。

ってことでメール通知ではなく、チャットワーク通知に変更しようと思います!!
チャットワークならタスクの設定や完了もできますもんねー!

情報管理やトリガーはGoogle Apps Scriptを利用して通知先をチャットワークにするように実装していきまーす!!

どうやってチャットワークへ通知するの?

外部のプログラムからチャットワークへ通知する場合はチャットワークAPIを利用します。

チャットワークAPIでは特定のURLにアクセスすることで、チャットワークに様々な動作をしたり情報を取得したりすることができるようになります。

そしてGoogle Apps ScriptとチャットワークAPIを併用すれば、以下のようなことができちゃいます!

  • Googleアナリティクスの記事ランキングをチャットワークに送信する。
  • Googleカレンダーの予定をチャットワークに通知する
  • Googleスプレットシートに記載したタスクをチャットワークにタスクとして追加する

チャットワークがメインの連絡ツールになっている方にとっては、すげーありがたいっすね!!

チャットワーク通知機能を作ろう!

1.チャットワークAPIの申込

チャットワークAPIを利用するためにはチャットワークに申込をする必要があります。

API申請ページにアクセスして申請対象のメールアドレスを申請しましょう!

僕の場合は申請してから2日ぐらいで承認メールが届きました!

2.APIトークンの確認

承認メールが届いたら、チャットワークにログインし「動作設定」から「API発行」タブを選択し、開発用のAPIトークンを取得します。このAPIトークンを利用して Google Apps Scriptからメールを送信します。

3.スプレットシートに情報を入力

スプレットシートに「名前」「アカウントID」「ブログ当番の順番」の情報を入力します。

アカウントIDはチャットワークでメッセージを送る際にToボタンを押した際に表示される番号です。

例)[To:1234567] の場合は1234567がアカウントIDとなります。

別シートにメールの送信内容を入力します。{NAME1}の部分はプログラム側でブログ当番と人の名前に置き換えます。

2.Google Apps Scriptの実装

スクリプトを書いていきまっす!

メール通知のときに作ったのものを流用しています!

流れとしては、、、

1.Token、ルームID、タスク期限などのチャットワークAPIへの情報を定義
2.宛先シートから送信先、ブログの当番を抜出す
3.送信内容にブログ当番の名前を挿入して、送信メッセージの内容を作成
4.ブログ当番の順番を更新する
5.チャットワークへメッセージを送信する
6.チャットワークへタスクを追加する

って感じでっす!この流れをスクリプトで書くと下の感じになりました!
後は以前と同様にトリガー設定をすれば通知メールが送信されちゃいまーす!

// chatworkにブログ当番関連の情報を送信する
function sendChatwork(){
 var obj = new Object();
 // 必要な情報をセットする
 obj = setInfos(obj);
 // chatworkへメッセージを送信
 sendMessage(obj);
 // chatworkへタスクを追加
 addTask(obj);
}

// 必要な情報をセットする
function setInfos(obj){
 // APIトークン
 obj.token = '1234567890abcdef123456789';
 // ルームID
 obj.roomId = '1234567890';
 // タスク内容
 obj.task = '注目を集めるブログを書く!!';
 // 期限
 var date = new Date();
 date = new Date(date.setDate(date.getDate()+4));
 obj.limit = date.getTime()/1000;

// スプレットシートから情報を取得
 // 宛先のシート情報を取得
 var mySheet=SpreadsheetApp.openById("1234567890abcdef");
 // シートの開始行番号、開始列番号を取得
 var startRow = 2;
 var startCol = 1;
 // シートの最終行番号、最終列番号を取得
 var endRow = mySheet.getLastRow() - 1; // 最初の行は不要なためマイナス1とする
 var endCol = mySheet.getLastColumn();

 // シートの範囲を指定して情報を取得
 var sheetdata = mySheet.getSheetValues(startRow, startCol, endRow, endCol);
 var dataCount = sheetdata.length;
 //Logger.log('sheetdata:'+sheetdata);

 // 送信内容のシート情報を取得
 var subSheet = mySheet.getSheetByName("送信内容");
 var submitContent = subSheet.getRange(2, 1).getValue();

 // ブログ担当者を変数に抜出し
 var strName = '';
 for(var i = 0; i < dataCount; i++){
  if(sheetdata[i][2] == 1.0){
   strName = '"'+ sheetdata[i][0] + '"';
  }
 }
 for(var i = 0; i < dataCount; i++){
  // To
  if(sheetdata[i][2] == 1.0){
   obj.toIds = sheetdata[i][1];
  }
  // ブログ当番の順番を更新する
  var y = i + 2;
  if(sheetdata[i][2] == 1.0){
   mySheet.getRange("C"+ y).setValue(dataCount);
  } else {
   var setNumber = sheetdata[i][2] - 1.0;
   mySheet.getRange("C"+ y).setValue(setNumber);
  }
 }

 // ブログ当番の名前を置換して挿入
 var member = getMember(obj);
   obj.body = "[To:" + obj.toIds.toFixed() + "]"+ member + "さん\n";
   obj.body += submitContent.replace(/{NAME1}/,strName);
  return obj;
 }

 // chatworkのルームからブログ当番の名前を取得
 function getMember(obj){
  var params = {
   headers : {"X-ChatWorkToken" : obj.token},
   method : "get",
  };
  var url = "https://api.chatwork.com/v2/rooms/" + obj.roomId + "/members"
  var response = UrlFetchApp.fetch(url, params);
  // jsonをテキスト形式に変換
  var json=JSON.parse(response.getContentText());
  for(var i = 0; i < json.length; i++){
   if(json[i]['account_id'].toFixed() == obj.toIds.toFixed()){
    obj.name = json[i]['name'];
   }
  }
  return obj.name;
 }

// chatworkへブログの当番のメッセージを通知する
function sendMessage(obj){
 var params = {
  headers : {"X-ChatWorkToken" : obj.token},
  method : "post",
  payload : {
   body : obj.body
  }
 };
 var url = "https://api.chatwork.com/v2/rooms/" + obj.roomId + "/messages";
 UrlFetchApp.fetch(url, params);
}

// chatworkへブログの当番のタスクを追加する
function addTask(obj){
 var params = {
  headers : {"X-ChatWorkToken" : obj.token},
  method : 'post',
  payload : {
   body : obj.task,
   limit : obj.limit.toFixed(),
   to_ids : obj.toIds.toFixed()
  }
 };
 var url = "https://api.chatwork.com/v2/rooms/" + obj.roomId + "/tasks";
 UrlFetchApp.fetch(url, params);
}

まとめ

チャットワークへメッセージやタスクを通知をすることで、業務の見える化が図れるようになったと思います!

もっとやるとすれば、期限までにタスクが完了していなかったら再通知することもできると思いまーす!

簡単に実装できたんで、システムのエラー通知でも今後は使っていこと思います!

RELATED