Menu

Category

Archive

logo


SlackとGoogleドキュメントの連携 ~ Google Apps Script

2014-10-28 08:30:00 +0900
  • このエントリーをはてなブックマークに追加

Google Apps Scriptを使ってSlackとスプレッドシートを連携させました。アンケートの集計結果等がGoogleフォームにより、スプレッドシートに記入された際に、その内容がSlackに飛ぶようにしました。これで、Slackを使っているチームであれば、わざわざスプレッドシートのURLを共有したりする必要がなくなり、便利です。

Google Apps Scriptでスプレッドシートの送信する文字列の準備

Google Drive内で、Google Apps Scriptのプロジェクトを作成します。Newボタン、Moreと進み、Google Apps Scriptを探し選択します。Google Apps Scriptは、Googleサービスと連携でき、ドライブ上のファイル等を操作することができます。基本はJavascriptで書くことができます。まずは、Slackに飛ばす文章をスプレッドシートの情報をもとに作成します。この関数を定期的に実行されるように設定します。これはメニュー上の時計のアイコンから簡単に設定できます。

 1 function myFunction() {  
 2   var ss = SpreadsheetApp.openById('********');  
 3   var data = ss.getDataRange().getValues();
 4  
 5   var scriptProperties = PropertiesService.getScriptProperties();
 6  
 7   var lastCount = parseInt(scriptProperties.getProperty('LAST_COUNT'));
 8   if (lastCount == data.length) {
 9     Logger.log("No new data!");
10     return;
11   } else {
12     Logger.log("We have new data!");
13     
14     var newDataCount = data.length - lastCount;
15     var lastIndex = lastCount - 1;
16     
17     // Let's check the difference
18     for (var i = 1; i <= newDataCount; i++) {
19 
20       var os = data[lastIndex + i][1];
21       if (!os || os.length == 0) {
22         os = "No info";
23       }
24 
25       var device = data[lastIndex + i][2];
26       if (!device || device.length == 0) {
27         device = "No info";
28       }
29 
30       var body = "------------------------------------------------------------------------------------\n*日付* : " + data[lastIndex + i][0] + "\n" + "*OS*   : " + os + "\n" + "*端末* : " + device + "\n*コメント* : \n" + data[lastIndex + i][3] + "\n------------------------------------------------------------------------------------";
31       sendToSlack(body);      
32     }    
33   }
34 
35   // Save current data count
36   scriptProperties.setProperty('LAST_COUNT', data.length.toString());    
37 }

2行目の SpreadsheetApp.openByIdのIDはスプレッドシートを開いている時のURLから確認することができます。このスプレッドシートを2次元配列として扱い、行と列を指定して情報を取得します。PropertiesService.getScriptProperties は、前回この関数が実行された時に、このスプレッドシートが何行持っていたのかを保存しています。前回の列の数と現在の列の差分の分だけ、Slackに飛ばす文字列を作成しています。そのぶんだけ新しい情報があるということです。body変数に送信する文字列を格納しています。アスタリスクで囲むことにより、Slack上で太文字で表示されます。

Slackに送信

myFunction()で作成したSlackに飛ばしたい文字列をこのsendToSlack(body)で実際にSlackに送信します。Slackの拡張機能のIncoming WebHooksにアクセスすると、下記のようなURLを指定されるので、そこにPostします。他にもたくさんのAPIがあります。

 1 function sendToSlack(body) {
 2   var url = "https://****.slack.com/services/hooks/incoming-webhook?token=****";
 3   var data = {"channel": "#your_channel", "username": "webhookbot", "text": body, "icon_emoji": ":ghost:"};
 4   var payload = JSON.stringify(data);
 5   var headers = {"Accept":"application/json", 
 6                 "Content-Type":"application/json", 
 7                 "Authorization":"Basic _authcode_"
 8                };
 9   var options = { "method" : "POST",
10                   "contentType" : "application/json",
11                   "headers" : headers,
12                   "payload" : payload
13               };
14   var response = UrlFetchApp.fetch(url, options);  
15 }