Slack または Hipchat と Google スプレッドシート を連携する

はじめに

サーバーを立てるまでもなくちょっとした通知を実装したいと思った時に作ったやつです. データの受け取りがなく、送信のみであればとりあえず以下の実装で OK . データを貯めたい場合もいろいろやり方はあるみたいなので探せばでてきます .

Slack と Hipchat

トークンを発行する.

Google Spread Sheet ( Google スプレッドシート )

シート

f:id:tanjoin:20150903172438p:plain

スクリプト

// 列を入れ替えることで担当を変更する.
function staff_manager() {
  var spreadSheet = SpreadsheetApp.openByUrl('{Google スプレッドシートの URL}');
  
  var sheet = spreadSheet.getSheets()[0];
  
  sheet.insertRowAfter(sheet.getMaxRows());
  
  var firstRow = sheet.getRange(2, 1, 1, 8);
  
  var values = firstRow.getValues();
  
  sheet.getRange(sheet.getMaxRows(), 1, 1, 8).setValues(values);
  
  sheet.deleteRow(2);
  
}
// 通知のメインメソッド
function notification() {
  
  var spreadSheet = SpreadsheetApp.openByUrl('{Google スプレッドシートの URL}');
  
  var sheet = spreadSheet.getSheets()[0];
  
  var now = new Date();

  var w = [8, 2, 3, 4, 5, 6, 7]; // 日, 月, 火, 水, 木, 金, 土 (シートのセルの位置にひもづける)
  
  var day = w[now.getDay()];
  
  var staff = sheet.getRange(2, day).getValue();
  
  var text = 'ここにメッセージ'
  
  slack(staff + ' ' + text);
  // hipchat(staff + ' ' + text);
}

// Hipchat に通知(v1 の API は古いので注意)
function hipchat(message) {
 
  var url = 'https://api.hipchat.com/v1/rooms/message';
  
  var payload =
      {
        'room_id'        : '{ルームID}',
        'from'           : '日直',
        'auth_token'     : '{Hipchat のトークン}',
        'color'          : 'purple',
        'notify'         : 1,
        'message'        : message,
        'message_format' : 'text'
      };
  var params =
      {
        'method'      : 'post',
        'contentType' : 'application/x-www-form-urlencoded',
        'payload'     : payload
      };
  
  var response = UrlFetchApp.fetch(url, params);
  
}

// Slack に通知
function slack(message) {
 
  // chat.postMessage | Slack 
  // https://api.slack.com/methods/chat.postMessage
  
  var url = 'https://slack.com/api/chat.postMessage';
  
  var token = '{Slack のトークン}';
  var channel = 'hoge';
  var text = message;
  var username = '日直';
  var parse = 'full';
  var icon_emoji = ':scroll:';
  var method = 'post';
  
  var payload = 
      {
        'token'      : token,
        'channel'    : channel,
        'text'       : text,
        'username'   : username,
        'parse'      : parse,
        'icon_emoji' : icon_emoji
      };
  var params =
      {
        'method' : method,
        'payload' : payload
      };
  
  var response = UrlFetchApp.fetch(url, params);
}

タイマー

f:id:tanjoin:20150903172512p:plain f:id:tanjoin:20150903172522p:plain

おわりに

Google スプレッドシートがあれば大抵のことができます. サーバーいらずで楽ちんですね.

Google Apps Script を WebHook の レシーバとして動作させる(ただしGETに限る) | Dozens Members' Blog

擬似 Hubot みたいなのが作れそうな気がしたので、こういうことも挑戦したいみたいなぁ.

Qiita に書いた記事