0
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のEvent SubscriptionsをRailsで受け取る方法と注意点まとめ(Slack API × Rails)

Last updated at Posted at 2025-04-29

🔍 概要

SlackのメッセージログなどをRailsアプリで受け取るには、Slack APIのEvent Subscriptions(イベントサブスクリプション)を利用します。

この記事では、Slackイベントを ChatsController#create に送る設定と、実装時にハマりがちなポイントをまとめます。


⚙️ 前提:Slackのイベント通知の仕組み

Slackからイベントを受け取るには、Slack Appの管理画面でEvent Subscriptionsを有効にし、
その送信先としてRails側のエンドポイントURL(例: /chats)を設定する必要があります。

Slackは設定時に“challenge” トークンをPOSTで送信してきます。
このトークンをそのままレスポンスすることで、SlackがURLの正当性を確認します。


🚧 ローカル開発では動作しない?

Slackからのリクエストは外部からアクセス可能なサーバーにしか送られません。
そのため、ローカル開発では動作確認ができません。
ステージング環境などを使って確認してください。
ただし、URLを変えるごとに“challenge”リクエストをする必要があるので、本番環境にURLを変える時は再度“challenge”リクエストをしてください。


✅ Rails側の実装

Slackからの"challenge"検証に対応するコードは以下のようになります。

class ChatsController < ApplicationController
  # Slackの検証のため、認証をスキップする(後述)
  skip_before_action :authenticate_verify, only: [:create]

  def create
    # SlackからのURL検証
    if params["challenge"]
      render json: { challenge: params["challenge"] }, status: :ok
      return
    end

    # ここにSlackイベント受信後の処理を書く
  end
end

⚠️ 注意点:独自認証との干渉に注意

Railsアプリ側で before_action による認証を使っている場合(例:authenticate_verify など)、Slackのchallengeリクエストが弾かれてしまいます。

これを回避するために、該当アクションではスキップする必要があります。

# challenge検証中は認証をスキップ
skip_before_action :authenticate_verify, only: [:create]

📝 challengeの検証が終わったら?

Slack側でURL検証(challenge)が成功すると、以降はイベント通知が送られるようになります。
その後は、params["challenge"]の処理は不要なので、コメントアウトまたは削除しておいても構いません。

# skip_before_action :authenticate_verify, only: [:create]
# if params["challenge"]
#   render json: { challenge: params["challenge"] }, status: :ok
#   return
# end

💡 まとめ

  • Slackのイベント通知を受け取るには、Event Subscriptionsと外部アクセス可能なエンドポイントが必要

  • Railsでは params["challenge"] をそのまま返す実装が必要

  • before_action で独自認証をしている場合は、Slackリクエストに対してスキップ指定が必要

  • challenge検証後は該当コードをコメントアウト or 削除してOK

📌 余談:ボットユーザーがいないというエラーについて

Slack App のインストール時に、「インストールするボットユーザーがありません」というエラーに直面することがあります。

私もこの問題に遭遇しましたが、以下の記事が非常に参考になりました。

お困りの方は、ぜひ一読をおすすめします。

0
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
0
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?