<目次>
(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②)
>目次にもどる