SlackのイベントAPIを使って、特定のチャンネル内で送信されたメッセージをスプレッドシートに出力する方法を試してみます。
スプレッドシートの用意
まずはスプレッドシートからGASを作成して、以下のような内容にします。
const SHEET_NAME = 'シート1';
function doPost(e) {
const data = JSON.parse(e.postData.contents);
// SlackのURL検証用(初回のみ)
if (data.type === 'url_verification') {
return ContentService.createTextOutput(data.challenge);
}
const event = data.event;
// ユーザーの新規投稿のみを対象
if (event.subtype) {
return ContentService.createTextOutput('no');
}
const sheet = SpreadsheetApp
.getActiveSpreadsheet()
.getSheetByName(SHEET_NAME);
sheet.appendRow([
event.channel || '',
event.text || '',
event.user || '',
event.ts,
JSON.stringify(event)
]);
return ContentService.createTextOutput('ok');
}
Slack側から受け取ったデータを確認して、スプシに書き込む想定です。
6-9行目はSlack側にURLを設定した際に初回だけ行う処理で、以下のようなjson形式を受け取るのでchallengeの値を返す必要があります。
{
"token": "Jhj5dZrVaK7ZwHHjRyZWjbDl",
"challenge": "3eZbrw1aBm2rZgRNFdxV2595E9CY3gmdALWMmHkvFXO7tYXAYM8P",
"type": "url_verification"
}
これでコードの準備が完了したので、GASをウェブアプリとしてデプロイします。
右上のデプロイ > 新しいデプロイ を選択します。
左上の 歯車アイコン > ウェブアプリ を選択します。
アクセスできるユーザーを全員に変更して、デプロイを行います。
デプロイ完了後、ウェブアプリのURLをコピーしておきます。
Slackの設定
次にSlackでの設定です。
Slackにログイン後、Slackアプリの管理画面に移動して、Create New Appをクリックします。
アプリの作成方法で、From scratchを選択します。
アプリ名とワークスペースの選択を行い、Create Appをクリックします。
これでアプリを作成できました。
次にサイドメニューから Features > OAuth & Permissions を選択します。
Scopes の Bot Token Scopes で Add an OAuth Scope を選択します。
今回は「channels:history」のスコープを追加したいので、下部に入力して検索します。
スコープを追加できました。
次にサイドメニューの Features > Event Subscriptions を選択します。
Enable EventsをOnにします。
下に表示されるRequest URLに、先ほどのウェブアプリのURLを貼り付けます。
前述のGASのコードで記載しましたが、張り付けたURLが問題ないかの検証が行われ、問題なければVerifiedが表示されます。
さらに下にあるSubscribe to Bot Events を選択します。
イベントの追加が行えるので、message.channelsを追加します。
message.channels が追加できました。
最後に作成したアプリをワークスペースに追加して、イベントを設定したいチャンネルに招待します。
/invite @XXXXXXXX
チャンネルでメッセージを送信すると、スプレッドシートに出力されることを確認できました。


















コメントが承認されるまで時間がかかります。