13
2

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 Bot:Event Subscriptions実装の仕方

Last updated at Posted at 2025-12-13

はじめに

slack botを作る際に、「やりたいことは決まっているのに、どのイベント名を選べばいいの?」 「このイベントを使うには、どのスコープ(権限)を設定すればいい?」 「そもそも、イベントを受け取るURL(エンドポイント)はどう管理するの?」途中で必要なURLの検証プロセスで躓いてしまったのでまとめ記事を作成しました。

Slack Appとは

Slackを介して使用できるアプリです。Slackのコマンドから実行させたり、時間指定して自動実行させたりすることができます。今回は、Slack Appに含まれている 「Bot User」を使用します。
今回は、Botがユーザーのアクションをトリガーとする、Event Subscriptionsの使用の仕方について解説します。

Event Subscriptionsとは

Slackで特定のアクションが起きた時に、Slackがあらかじめ登録しておいたURLに対して、そのイベント情報を自動的に送信してくれる機能です。

実践:Slack Appの作成と設定

①Slack APIの公式サイトにアクセスし、Create New Appをクリックします。

スクリーンショット 2025-12-13 17.13.53.png

From scratchを選択します。

スクリーンショット 2025-12-13 15.57.25.png

③アプリの名前を入力し、Slack Appを作成したいワークスペースを選択します。

スクリーンショット 2025-12-13 16.03.24.png

④サイドメニューからOAuth & Permissionsをクリックします。

スクリーンショット 2025-12-13 16.01.54.png

⑤権限の設定を行います。

OAuth & PermissionsページにあるScopesでAdd an OAuth Scopeをクリックし、必要な権限を選択します。実際に、Botがslackのチャンネルにメッセージの投稿がしたい場合は、chat writeを選択します。
以下権限の例

  • channels:history: パブリックチャンネルの会話履歴を見る。
  • groups:history: プライベートチャンネルの会話履歴を見る。
  • reactions:write: Botがメッセージにスタンプを押すことができる
    スクリーンショット 2025-12-13 17.24.09.png

⑥Event Subscriptionsの登録を行います。

サイドメニューからEvent Subscriptionsページを開き、Enable Eventsをオンにします。Request URLに、リクエストを受け取るエンドポイントを入力します。
スクリーンショット 2025-12-13 16.09.02.png
次の手順で私は、つまづいてしまったので、次からつまづかないように詳しく解説していきます。URLを入力した後に、Slackはエンドポイントに対して検証リクエストを送信し、応答を確認します。

⑦Request URLにリクエストを受け取るエンドポイントを入力します。

RequestURLにURLを入力すると、Slackはそのエンドポイントに対して一時的な検証リクエストを送信し、応答の確認をします。

Slack側から送られてきた、パラメーターをレスポンスでそのまま返すコードを書いておく必要があります。この検証がなぜ行われているのか?
Slackはイベントデータを送信する先が正しいサーバーであることを確認するために行われているそうです。
Slack側から送られてきた、パラメーターをレスポンスを返さないと以下のようにエラーになります。
スクリーンショット 2025-12-13 16.14.39.png

⑧実際に使ったコード

今回は、AWSのLambdaでPythonを使用した際の例です。

import json

def lambda_handler(event, context):
    # API GatewayやFunction URL経由の場合、bodyは文字列で来るので変換する
    body = json.loads(event['body'])
    
    # challengeがあれば返し、なければ空文字を返す(Slackは200 OKさえ返ればOK)
    return {
        "statusCode": 200,
        "body": json.dumps({"challenge": body['challenge']}) if "challenge" in body else ""
    }

実際に検証が成功したら、Request URL Verified と表示されます。

スクリーンショット 2025-12-13 16.55.03.png

⑨ Subscribe to bot eventsを登録します。

Request URLの下にSubscribe bot EventsでAdd Bot User Eventをクリックします。
実際に使用したいEventを選択します。設定が完了したら、Save Changesをクリックして保存します。
Slack Appの設定は以上になります。

⑩Slackのチャンネルに今回作成したアプリを追加します。

チャンネルの詳細から作成したSlack Appをチャンネルに追加します。

スクリーンショット 2025-12-13 17.10.38.png

Subscribe to bot eventsのまとめ

イベントは90種類以上あるので、実際によく使いそうだと思ったものをまとめました。(2025年12月13日時点)

全てのイベントを確認したい場合は、以下の公式ドキュメントを参照してください。
公式ドキュメント

1. Botと会話する(メッセージ)

イベント名 どんな時に使う?
app_mention メンション(@Bot)した時
message.im DMを送った時
ユーザーとBotが、1対1で会話。
message.channels チャンネルに投稿した時
「特定のキーワード」に反応させたい。

2. スタンプで操作する(リアクション)

イベント名 どんな時に使う?
reaction_added スタンプを押した時
「✅」ボタンを押したらタスク完了など、スタンプをを押した時のトリガー。
reaction_removed スタンプを消した時
間違って押したスタンプを取り消した場合、Botの処理も取り消す。

3. 行動に反応する(アクション)

イベント名 どんな時に使う?
member_joined_channel チャンネルに参加した時
ユーザーが入室した瞬間に「ようこそ!」と挨拶したい場合。
file_shared ファイルを送った時
ユーザーがアップロードした画像や資料を、Botに処理させたい場合。

最後に

今回は、slack botを作る際に、「やりたいことは決まっているのに、どのイベントを選べばいいの?」「イベントを受け取るURL(エンドポイント)はどう設定するの?」など、実際に作成してみて疑問に思った箇所が多かったので作成の仕方、Subscribe to bot eventsの種類をまとめました。Slack Botは簡単に作れると思うのでぜひ作ってみてください。

13
2
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
13
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?