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

# はじめに

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

# Slack と Hipchat

トークンを発行する.

- [Slack Web API | Slack](https://api.slack.com/web)
- [HipChat - API - Authentication](https://www.hipchat.com/docs/api/auth)

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

## シート

![f7b634d3ade8efbedd71c6cab1bbc39bp.png](https://qiita-image-store.s3.amazonaws.com/0/30241/0a9227fa-7dc8-9719-fa9d-81c51ae55647.png)

## スクリプト

```js:staff_manager.gs
// 列を入れ替えることで担当を変更する.
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);
  
}

```

```js:notification.gs
// 通知のメインメソッド
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);
}

```

## タイマー

![2656cc0e979dfd3470f407a2e005fa87.png](https://qiita-image-store.s3.amazonaws.com/0/30241/bb3b628c-71ad-cf63-28d5-6a9959cda46b.png)
![a74d5940d56d67b06c1b02b4cc6509f9.png](https://qiita-image-store.s3.amazonaws.com/0/30241/25e45dfd-1f0e-35ff-b0eb-d7c3f73aa1e1.png)

# おわりに

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

[Google Apps Script を WebHook の レシーバとして動作させる（ただしGETに限る） | Dozens Members' Blog](https://dozensmembers.wordpress.com/2014/04/28/google-apps-script-as-a-webhooks-receiver/)

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