Slackに投稿したメッセージをほぼリアルタイムにGoogle スプレッドシートにバックアップするGoogle Apps Scriptです。無償版Slackはデータの保存期間が90日に短縮されるので作ってみました。
特にありません。スプレッドシートがあればOKです。
このスクリプトは設置に少々手間がかかります。
まずはスプレッドシートを1つ作成して、スクリプトエディタを開いてコードをコピペしてください。
一番上の「事前設定エリア」に作成したスプレッドシートのファイルURLをセットしてください。
Webアプリケーションとして動かすため、右上の「デプロイ」から「新しいデプロイ」を押します。
歯車アイコンから「ウェブアプリ」を選択します。
ウェブアプリの設定画面が開きます。
説明文は適当に、実行ユーザーは自分、アクセスできるユーザーは全員とします。
すべての入力、選択が終わったら「デプロイ」を押しましょう。
権限の承認画面が出たら内容を確認した上で承認してください。
デプロイIDとウェブアプリのURLが発行されました。
ウェブアプリのURLはSlack側の設定で使いますのでコピーしておいてください。
さて、次はSlack側の設定です。
Outgoing Webhookという機能を使って、メッセージの投稿をトリガーに外部サービス(今回は自作のGAS Webアプリケーション)に接続します。
Slackアプリの左上にあるワークスペース名をクリックして、「設定と管理」から「ワークスペースの設定」に移動します。
画面が切り替わったら「App管理」をクリックします。
上に検索窓がありますので「Outgoing webhook」と検索し、ヒットしたものをクリックします。
「Slackに追加」をクリックします。
あともう少しです。
「Outgoing webhook インテグレーションの追加」を押します。
メッセージを転送したいチャンネルを選択します。
「すべてのチャンネル」も選択可能なのですが、そうしてしまうと特定キーワードが含まれる場合にしかOutgoing Webhookが発火してくれないようです。
特定チャンネルであればすべてのメッセージをトリガーに発火してくれます。
「引き金となる言葉」は空欄、「URL」にはGAS側の準備でコピーしておいたウェブアプリのURLを入力しましょう。
お疲れさまです!これで準備完了です。
Outgoing Webhookで指定したチャンネルに移動して、適当にメッセージを送ってみます。
スプレッドシートを見てみると・・・
年、月のシートが作成されてメッセージが書き込まれています!
/**
* このスクリプトの説明、使い方はこちら。
* https://myfunc.jp/items/00130/index.html
*/
function doPost(json) {
// ########## 事前設定エリア ここから ##########
const ss_url = 'https://docs.google.com/spreadsheets/d/******************';
// ########## 事前設定エリア ここまで ##########
// Slackから受け取ったJSONから、必要なデータを拾う
const username = String(json['parameters']['user_name']); // Slackの投稿者名
const workspace = String(json['parameters']['team_domain']); // ワークスペース名
const channel = String(json['parameters']['channel_name']); // 投稿先チャンネル名
const datetime = Utilities.formatDate(new Date(json['parameters']['timestamp'] * 1000), 'JST', 'yyyy/MM/dd HH:mm:ss'); // 投稿日時(整形する)
const message = String(json['parameters']['text']); // メッセージ本文
// ログを書き込むスプレッドシートのオブジェクトを取得
const ss = SpreadsheetApp.openByUrl(ss_url);
// ログは現在の年月(YYYYMM)のシート名に書き込むため、シートが存在するかどうかをチェックし、無ければ作成する
// スプレッドシートに存在するすべてのシートを取得する
const sheets = ss.getSheets();
// ログの書き込み先シート名を定義。
const name_log_sheet = Utilities.formatDate(new Date(), 'JST', 'yyyyMM');
// 存在するシートの名前を格納する配列を準備
const sheets_name = [];
// 存在するシートの数だけループ
for (let i = 0; i < sheets.length; i++) {
// シート名を配列に追加していく
sheets_name.push(sheets[i].getName());
}
// ログ書き込み先のシートオブジェクト用の変数
let log_sheet;
// 既存シートの名前に今月のシート名(例:202208)があるかどうかチェック、無ければ
if (sheets_name.indexOf(name_log_sheet) == -1) {
// シートが存在しないので作成する
log_sheet = ss.insertSheet().setName(name_log_sheet);
// 1行目に項目名も追加する
log_sheet.appendRow(['日時', 'ワークスペース', '投稿先チャンネル', 'ユーザー名', 'メッセージ'])
}
// ログ書き込み先シートのオブジェクトを取得
log_sheet = ss.getSheetByName(name_log_sheet);
// ログを書き込む
log_sheet.appendRow([datetime, workspace, channel, username, message]);
}
Googleカレンダーの今日の予定をSlackに通知してくれるGoogle Apps Scriptです。1日分の予定は朝にまとめて知りたいですよね。SlackのIncoming Webhookを使用しています。
スプレッドシートの不要な行を削除するGoogle Apps Scriptです。行がいつの間にか数万行に増えてしまっている・・・よくありますよね。
トリガーで実行されたスクリプトが失敗したときに送信されるエラー通知メールを、Slackに転送するGoogle Apps Scriptです。メールはトリガーの設定者にしか飛ばないため、他のメンバーに共有したいときにどうぞ。
Gmailに届いたメールから特定の件名のものをSlackに通知するGoogle Apps Scriptです。Slackが浸透するほどメールをあまり見なくなり、大事なメールを見逃すことが増えてきたので作りました。