Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

IT技術 (Technology)

Slackのソケットモードとは?概要からHello Worldの手順までご紹介

投稿日:2022年7月22日 更新日:

 

<目次>

(1) Slackのソケットモードとは?概要からHello Worldの手順までご紹介
 (1-1) Slackのソケットモードとは?
 (1-2) 設定手順(Hello World)
  ●STEP1:Slackアプリの新規作成&権限付与
  ●STEP2:Slackでソケットモードの有効化
  ●STEP3:Slackでイベント登録の有効化
  ●STEP4:Slackアプリをワークススペースにリリース
  ●STEP5:Pythonコーディング
  ●STEP6:疎通テスト
  ●こんなエラーが出たらどうする?

(1) Slackのソケットモードとは?概要からHello Worldの手順までご紹介

(1-1) Slackのソケットモードとは?

「ソケットモード」はクラサバ通信(クライアント-サーバ間通信)で使用されるプロトコルの1つです。Slackの「Events API」や対話的な部品について、パブリックなHTTPリクエスト先を公開せずに使用できる機能です。テスト目的やセキュリティ事情(組織のFirewall等)で、パブリックなHTTPエンドポイントを公開したくない場合などに使えます。
 
(特徴)
・ソケットモードでは、ウェブソケットURL(WebSocket URL)を通じてSlackと通信します。
・ウェブソケットは双方向&ステートフル(以前の状態を保持)なプロトコルである
・Slackとご自身のアプリ(例:Python)とは低レイテンシー(NW遅延が少ない)で通信できます。
・ウェブソケットURLは、パブリックなHTTPエンドポイントと異なり、実行時にapps.connections.openメソッドをコールして生成される
・そのため、ウェブソケットURLは毎回リフレッシュされる(高セキュリティ)
結果として、ローカルPCをサーバに見立てて、アプリを実行することが可能
・app.configの設定で、いつでもパブリックなHTTPエンドポイントと、ソケットモードを切り替え可能
 

(1-2) 設定手順(Hello World)

今回の設定の全体像はざっくり、こんな感じです。
(図100)

(図101)意味は同じですが、もう少し補足

●STEP1:Slackアプリの新規作成&権限付与

・①下記URLにアクセス
・②「From scratch」を選択
(図111)
・③「App Name」とワークスペースを指定して「Create App」押下
(図112)
・④「OAuth & Permissions」を選択
(図113①)
・⑤「Bot Token Scopes」の所にある「Add an OAuth Scope」を選択
→ボットとして行える操作を付与します。
(図113②)
・⑥下記の権限を追加
app_mentions:read
channels:join
chat:write
(図113③)

●STEP2:Slackでソケットモードの有効化

Appレベルのトークンを発行する事で「Slackアプリ」と「ご自身のアプリ(例:Python)」が接続する事ができます。
 
・①左メニューから「Socket Mode」を選択
(図121①)
・②「Enable Socket Mode」のスライダーバーを押下
(図121②)
・③ソケットモードを使うために必要となるトークンを発行します。そのためにToken Nameにトークンの名前を入力して「Generate」を押下
(図121③)
・④発行したトークンを「Copy」ボタンでコピーします。
※この値は後で使用するので控えておきます。
(図121④)

(図121⑤)

●STEP3:Slackでイベント登録の有効化

イベント登録を有効化する事で、ボットが各種イベント(投稿、メンション、リアクションなど)に対して自動的に応答できるようになります。
・①左メニューの「Event Subscriptions」→「Enable Events」をOFFからONに変更
(図131①)
・②「Subscribe to bot events」の所で「Add Bot User Event」を押下
(図132①)


・③「app_mention」を追加して「Save Changes」を押下
(図132②)

●STEP4:Slackアプリをワークススペースにリリース

ボットの設定が完了したら、ワークスペースにインストールします。
・①左メニューの「Install App」を選択し「Install to Workspace」を押下
(図141①)

・②アプリへの権限付与について「許可する」を押下
(図141②)
・③「Bot User OAuth Token」を「Copy」ボタンでコピーして値を控える
※この値は後で使用するので控えておきます。
(図141③)

●STEP5:Pythonコーディング

Visual Studio Code等のお好きなエディタでPythonのコーディングを実施します。
(サンプルプログラム)
 
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler

SLACK_BOT_TOKEN = 'xoxb-xxxxxxxxxxx-xxxxxxxxxxxxxx'
SLACK_APP_TOKEN = 'xapp-1-AXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXX'

# Boltアプリケーションを生成
app = App(token=SLACK_BOT_TOKEN)

### メンションを受けたメッセージに対して応答する
# メソッドのデコレーター(@xxxx("xxxx")の部分)により、ボットが指定の名前をメンションした
# メッセージを検知する度に「mention_handler」を呼ぶことを保証します。
@app.event("app_mention")
# メンションを受けた場合に、それに対して返事をするメソッド
# body引数
#   JSON形式のペイロード(データ本体)を受信します。 
#   内容はBotが応答予定のメッセージに関する情報を保持(タイムスタンプ、テキスト、送信者など)
# sayメソッド
#   string型を引数として、メッセージに対して応答するメソッドです。
def mention_handler(body, say):
        say('Hello World!')

### ソケットモードの有効化&アプリの実行

if __name__ == "__main__":
        handler = SocketModeHandler(app, SLACK_APP_TOKEN)
        handler.start()
(図151①)

●STEP6:疎通テスト

・①テスト用のチャンネルを作成
(図161①)

(図161②)
・②作成したSlackアプリをチャンネルに追加
⇒チャンネル内で「@アプリ名」で送信すると追加できます。
(図162①)
(図162②)
・③Pythonプログラムの実行
(実行コマンド例)
.\app.py
(実行結果例)
Bolt app is running!
(図163)

・④テストメッセージ投稿
(図164①)

・⑤結果確認
⇒作成したアプリ「Rainbow_Socket_TestApp」から自動で応答が返ってきました!
(図164②)

(動画164③)

こんなエラーが出たらどうする?

「ModuleNotFoundError: No module named ‘slack_bolt’」
(エラー)
    from slack_bolt import App
ModuleNotFoundError: No module named 'slack_bolt'
(図171①)

(対処)
pip install slack-boltを実行し、ライブラリをインストール

(図171②)

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-IT技術 (Technology)

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

Slackでボットを開発する手順をご紹介(Python)

  <目次> (1) Slackでボットを開発する手順をご紹介(Python)  (1-0) やりたいこと  (1-1) STEP1:Slackアプリの作成と疎通  (1-2) STEP2: …

OpenAIのEmbeddingの使い方

  <目次> (1) OpenAIのEmbeddingの使い方  (1-1) やりたいこと  (1-2) 概要:OpenAIのEmbeddingとは?  (1-3) STEP1:サンプルコー …

クラウドネイティブとは?(コンテナ、サービスメッシュ、マイクロサービス、イミュータブルインフラストラクチャ等)

<目次> (1) クラウドネイティブとは?(コンテナ、サービスメッシュ、マイクロサービス、イミュータブルインフラストラクチャ等)  (1-1) コンテナ  (1-2) サービスメッシュ  (1-3) …

LangChainのChainやAgentとは?概要やサンプルプログラムをご紹介

  <目次> (1) LangChainのChainやAgentとは?概要やサンプルプログラムをご紹介  (1-1) やりたいこと  (1-2) Chain概要  (1-3) Chainサン …

USBブートのやり方(Windows 10)と起動しない時の確認項目について

  <目次> (1) USBブートのやり方(Windows 10)と起動しない時の確認項目について  (1-1) USBブートとは?  (1-2) USBブートのやり方(手順)  (1-3) …

  • English (United States)
  • 日本語
Top