Slack Bot 作成
① Slack API のアプリケーション管理ページにアクセスします。
https://api.slack.com/apps
③「App Name」に任意のアプリ名を入力し、「Development Slack Workspace」で対象となるワークスペースを選択して、「Create App」ボタンをクリックします。
④ 左側のメニューで「OAuth & Permissions」を選択します。
⑤「Scopes」の下の「Bot Token Scopes」の「Add an OAuth Scope」ボタンをクリックし、必要な権限を追加します。本例では、chat:write(メッセージの送信)を追加します。
⑦「App Home」ページ内の「Your App’s Presence in Slack」の下にある「Edit」ボタンをクリックし、「Display Name」および「Default Username」に任意の名前を入力して保存します。
⑧「OAuth & Permissions」ページに戻り、「Install to Workspace」をクリックし、アプリをインストールします。この時点で Bot Token が生成されます。
Slack API トークンの取得
① 作成した Bot の設定ページにアクセスします。
② 「OAuth & Permissions」のページを開き、「Bot Token」欄に表示されている API トークンをコピーします。このトークンは、「xoxb-」で始まります。
③ API トークンを環境変数の設定で使用するために、.env ファイルに以下の形式で追加します。
SLACK_API_BOT_TOKEN=slack_api_bot_token # Slack API トークン
これで Slack 側で Bot が作成され、API トークンも取得できました。
Slack Python SDK でチャンネルにメッセージを投稿
1 必要なライブラリのインストール
① slack_sdk :Slack SDK
詳細はPython Slack SDK 公式サイトから確認させてください。
https://slack.dev/python-slack-sdk/installation/index.html
② python-dotenv: .env ファイルから環境変数を読み込むためのライブラリ
pip install slack_sdk
pip install python-dotenv
2 環境変数の設定
プロジェクトのルートディレクトリに .env という名前のファイルを作成し、以下のように環境変数を記述。
① SLACK_API_BOT_TOKEN: Slack API トークン
② SLACK_CHANNEL: Slack 通知を送信するチャンネル名
3 実行スクリプト
import os
import logging
from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError
from dotenv import load_dotenv
# デバッグレベルのログを出力します
logging.basicConfig(level=logging.DEBUG)
load_dotenv(verbose=True)
slack_token = os.getenv("SLACK_API_BOT_TOKEN")
slack_channel = os.getenv("SLACK_CHANNEL")
client = WebClient(token=slack_token)
try:
blocks = [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": ":wave: 連携成功かな :bow:",
},
},
]
response = client.chat_postMessage(
channel=slack_channel,
text="はじめまして :wave: pythonからSlackへ通知テスト:bow:",
blocks=blocks
)
except SlackApiError as e:
# You will get a SlackApiError if "ok" is False
# str like 'invalid_auth', 'channel_not_found'
assert e.response["error"]
補足/権限追加について
① 権限追加
② 「Reinstall to Workspace」をクリック
③「許可」をクリック
Webhoot 機能よりメッセージ投稿については以下記事を参考してください。