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?

2025年3月最新版:Slack ソケットモード(Socket Mode)のはじめかた

Posted at

概要

現在運用しているボットが反応しなくなりました。
しかも、ボットの開発者が退職したため、管理画面にアクセスできるエンジニアが誰もおらず。
仕方なく、ボットを新規作成したのですが、その際の過程をまとめました。

想定読者

アプリ側の実装方法はだいたいわかっているものの、WebSocketを使ったボットの構築方法がわからない方。
この記事で解説するのはボットの構築部分のみです。
アプリ側の構築方法が知りたい方は別の記事を参考にしてください。

現状(飛ばしても問題ないです)

2年ほど前からslack apiとseleniumを使ってeKYCの自動化をしています。
やっていることはシンプルです。

  1. slackで特定のパターンのメッセージを送信(ekyc xxxx OK)
  2. 「実行しますか?」という実行ボタン付きで届いた返信に対して「実行」をクリック
  3. Bolt for Python というslackSDKでスクリプト(selenium)を実行
  4. eKYCの審査をを自動で行い、完了したらslackに通知

問題点

1. の時点でアプリ側がメッセージを検知していない。
一方、interactive messagesというボタンアクションによるレスポンスは確認できていたため、Socketの疎通はできている。
上記状況から、slack apiのボットに付与する権限が何かしら足りていないという仮説を立てました。
そのアプローチがボットの新規作成をし、適切な権限を付与するというものです。

手順

slack apiにアクセス

Create New Appを選択
image.png

From a manifestFrom scratchはできることが同じ。
From a manifestがGUI操作、From scratchが定義ファイル(ymlかJSON)で一括設定ができる。
From scratchを採用(楽だから)。

display_information:
  name: Test eKYC # slackで見える表示名(名前に当たる部分)
settings:
  org_deploy_enabled: false # エンタープライズプランにデプロイできるか
  socket_mode_enabled: true # Socket Modeだからtrueにする
  is_hosted: false # Slackによりホスティングされたアプリか(普通はfalse)
  token_rotation_enabled: false # slackのトークンを自動でローテーション(定期的に再発行)するか(普通はfalse)

上記設定をしたら、次に進み、プレビューが表示される。
問題なければ「Create」。
管理画面に遷移すれば無事作成されています。

Basic Information

App-Level Tokensで「Generate Token and Scopes」を選択。
以下の通りToken NameとScopeを設定し、「Generate」を選択。

image.png

生成されるとTokenが表示されるので、コピーしてください(閉じると見れなくなる)。

image.png

Socket Mode

先ほどymlファイルでsocket_mode_enabledtrueにしたので、Socket Modeタブを開いてみると、すでに「Enable Socket Mode」がOnになっています。
※筆者は最初のymlファイルで定義を忘れており、管理者権限がないことも相まって少々苦労しました。
image.png

Event Subscriptions

slack上でメッセージを送信した時にボットが検知するための設定。
「Enable Events」をOnにする

image.png

Subscribe to bot eventsの「Add Bot User Event」を選択する。
そこで指定したいEvent Nameを検索する。
私はメッセージの検知を行いたいため、message.channelsを選びました。

image.png

設定完了したら、「Sagve Changes」を選択し、「Success」とポップアップが表示されたら完了。

OAuth & Permissions

ScopesセクションのBot Token Scopesで「Add an OAuth Scope」を選択
選択したのは以下3つ。
多くのユースケースではchannels:historychat:writeがあれば事足りることが多いと思います。
私はプライベートリポジトリでの作業も想定していたため、groups:historyを追加しています。

image.png

上記が完了したら、同じ画面上の上部にあるOAuth Tokensの「Install to :ワークスペース名」を選択。
画面遷移し、「:ボット名 が :ワークスペース名 Slack ワークスペースにアクセスする権限をリクエストしています」というメッセージが表示されるので「許可する」を選択。
すると元の画面に遷移し、Bot User OAuth Tokenが発行されます。

※注意点:

ここまでEvent SubscriptionsやScopesを修正してきましたが、この後削除や追加をしたら、再度「Reinstall to :ワークスペース名」から再インストールが必要(インストールしないと反映されない)

slackでインストールしたボットを招待

招待リストにbotが表示されて参加できたら完了です。
アプリ側も作り込んで、権限が足りないとなればslack api側の権限周りの設定をこねくり回してください。

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?