はじめに
この記事は「Ateam LifeDesign Advent Calendar 2023」で完走賞を狙って25記事書いているうちの16日目の記事です。今年も完走目指して頑張るぞ!
作るもの
今日はSlackで投稿された内容をスプレッドシートに記録していくサンプルを作ります。SlackのOutgoing Webhookを使い、Slackで発言があった際にAPIを叩くようにします。このAPIをGASで作ってその中でスプレッドシートへの記録を行います。
準備
まずはSlackにOutgoing Webhookをインストールします。
アプリの設定画面から「Outgoing Webhook」を検索しアプリを「追加」します。
するとこんな画面が出てくるので「Slackに追加」を押します。
規約をよんで「Outgoing Webhookインテグレーションの追加」をクリック。
そしてインテグレーションの設定をします。
チャンネルについてはどこでのチャンネルで発言があった場合にOutgoing Webhookが反応するようにするかを選択することができます。URLのところにはこのあとGAS側で発行するAPIのURLを入力します。トークンはGASの中で使っていくのでGAS側のスクリプトプロパティに登録しておきます。
今回はOutgoingWebhookKey
という名前でトークンを登録しました。
GASを書いていく
function doPost(e) {
// ここに処理をかく
}
このdoPost
関数はこのあとデプロイするWebアプリに対してPOSTリクエストが送られた時に実行される関数です。Outgoing Webhook
からリクエストがPOSTで送られてくるので、ここに処理を書いていきます。
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Slack');
今回は「Slack」という名前のシートにデータを蓄積していきます。
const outgoingWebhookKey = PropertiesService.getScriptProperties().getProperty('OutgoingWebhookKey');
if (outgoingWebhookKey == e.parameter.token){
// ここに処理を書く
}
ここでリクエストがSlackのOutcomingWebhookから送られてきたものかの検証をおこないます。設定画面で発行したトークンが一致するか否かで判定します。
var messageText = e.parameter.text;
var userName = e.parameter.user_name
sheet.appendRow([userName, messageText]);
今回はA列に名前を、B列にメッセージの内容を記録します。それぞれparameter
から取得してappendRow
によって書き込みます。
ここまででコードは出来上がりました。
そしてコードができたらデプロイしてAPIを立てていきます。
「デプロイ」から「新しいデプロイ」をクリック。
デプロイの種類は「ウェブアプリ」を選択します。
必要に応じて権限設定を行います。
デプロイが完了するとこのような画面が出てきます。このURLの部分をコピーして先に記載したSlackのOutgoingWebhookの設定画面に登録します。
完成品がこちら
GASのコード
function doPost(e) {
const outgoingWebhookKey = PropertiesService.getScriptProperties().getProperty('OutgoingWebhookKey');
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Slack');
if (outgoingWebhookKey == e.parameter.token){
var messageText = e.parameter.text;
var userName = e.parameter.user_name
sheet.appendRow([userName, messageText]);
}
return
}
実行結果
ちゃんとSlackへ送った内容が記録されました!
最後に
今日はSlackに投稿された内容をGASを使ってスプレッドシートに転記する方法についてみていきました。が、実はこのOutcomingWebhookは現在非推奨になってるんですよね・・・。実装はとても簡単なので使い続けたいところですが。。