2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Slackに投稿された内容をスプレッドシートに記録する

Last updated at Posted at 2023-12-15

はじめに

この記事は「Ateam LifeDesign Advent Calendar 2023」で完走賞を狙って25記事書いているうちの16日目の記事です。今年も完走目指して頑張るぞ!

作るもの

今日はSlackで投稿された内容をスプレッドシートに記録していくサンプルを作ります。SlackのOutgoing Webhookを使い、Slackで発言があった際にAPIを叩くようにします。このAPIをGASで作ってその中でスプレッドシートへの記録を行います。

準備

まずはSlackにOutgoing Webhookをインストールします。

スクリーンショット 2023-12-13 21.39.23.png

アプリの設定画面から「Outgoing Webhook」を検索しアプリを「追加」します。

スクリーンショット 2023-12-13 21.42.45.png

するとこんな画面が出てくるので「Slackに追加」を押します。

スクリーンショット 2023-12-13 21.43.10.png

規約をよんで「Outgoing Webhookインテグレーションの追加」をクリック。

スクリーンショット 2023-12-13 21.44.49.png

そしてインテグレーションの設定をします。
チャンネルについてはどこでのチャンネルで発言があった場合にOutgoing Webhookが反応するようにするかを選択することができます。URLのところにはこのあとGAS側で発行するAPIのURLを入力します。トークンはGASの中で使っていくのでGAS側のスクリプトプロパティに登録しておきます。

スクリーンショット 2023-12-13 21.52.06.png

今回は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を立てていきます。

スクリーンショット 2023-12-13 21.59.14.png

「デプロイ」から「新しいデプロイ」をクリック。

スクリーンショット 2023-12-13 22.09.16.png

デプロイの種類は「ウェブアプリ」を選択します。

スクリーンショット 2023-12-13 22.06.17.png

必要に応じて権限設定を行います。

スクリーンショット 2023-12-13 22.07.13.png

デプロイが完了するとこのような画面が出てきます。この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
}

実行結果

スクリーンショット 2023-12-13 22.37.29.png

ちゃんとSlackへ送った内容が記録されました!

最後に

今日はSlackに投稿された内容をGASを使ってスプレッドシートに転記する方法についてみていきました。が、実はこのOutcomingWebhookは現在非推奨になってるんですよね・・・。実装はとても簡単なので使い続けたいところですが。。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?