Slack API 作成と python でSlack SDKを利用してチャンネルにメッセージを通知

Python

Slack Bot 作成

① Slack API のアプリケーション管理ページにアクセスします。
https://api.slack.com/apps

② 「Create an App」ボタンをクリックします。
image.png

image.png

③「App Name」に任意のアプリ名を入力し、「Development Slack Workspace」で対象となるワークスペースを選択して、「Create App」ボタンをクリックします。

image.png

④ 左側のメニューで「OAuth & Permissions」を選択します。
image.png

⑤「Scopes」の下の「Bot Token Scopes」の「Add an OAuth Scope」ボタンをクリックし、必要な権限を追加します。本例では、chat:write(メッセージの送信)を追加します。
image.png
image.png

⑥ 左側のメニューで「App Home」を選択します。
image.png

⑦「App Home」ページ内の「Your App’s Presence in Slack」の下にある「Edit」ボタンをクリックし、「Display Name」および「Default Username」に任意の名前を入力して保存します。

image.png

⑧「OAuth & Permissions」ページに戻り、「Install to Workspace」をクリックし、アプリをインストールします。この時点で Bot Token が生成されます。
image.png

image.png
image.png

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 通知を送信するチャンネル名
image.png

# 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"]   

実行結果
image.png

補足/権限追加について

 ① 権限追加
 image.png
 ② 「Reinstall to Workspace」をクリック
image.png
 ③「許可」をクリック
image.png

Webhoot 機能よりメッセージ投稿については以下記事を参考してください。

コメント